代码拉取完成,页面将自动刷新
package utils
import (
"fmt"
"net"
"net/url"
"strconv"
"time"
)
// IsValidIP 检测IP地址是否合法
func IsValidIP(ipAddr string) bool {
return net.ParseIP(ipAddr) != nil
}
// IsValidPort 检测端口是否合法
func IsValidPort(port string) (int, error) {
p, err := strconv.Atoi(port)
if err != nil {
return 0, fmt.Errorf("port conversion error: %v", err)
}
if p < 1 || p > 65535 {
return 0, fmt.Errorf("port number out of range: %d", p)
}
return p, nil
}
// IsValidURL 检测给定字符串是否是一个合法的URL。
func IsValidURL(u string) bool {
// 尝试解析URL
parsed, err := url.ParseRequestURI(u)
if err != nil {
return false // 解析失败意味着这不是一个合法的URL
}
// 判断解析后的URL是否包含Host字段,常用来判断URL是否合法
return parsed.Scheme != "" && parsed.Host != ""
}
// Ping 对目的地址发起ping检测icmp是否通畅(只支持ipv4)
func Ping(ipAddr string, timeout time.Duration) bool {
conn, err := net.DialTimeout("ip4:icmp", ipAddr, timeout)
if err != nil {
return false
}
_ = conn.Close()
return true
}
// DetectTcpPort
// 检测Tcp端口是否开通
func DetectTcpPort(ip string, port int, timeout time.Duration) bool {
address := fmt.Sprintf("%s:%d", ip, port)
conn, err := net.DialTimeout("tcp", address, timeout)
if err != nil {
return false
}
// 建立后关闭连接
defer func(conn net.Conn) {
_ = conn.Close()
}(conn)
return true
}
// DetectUdpPort
// 检测Udp端口是否开通
func DetectUdpPort(ip string, port int, timeout time.Duration) bool {
// 构建UDP地址
addr := fmt.Sprintf("%s:%d", ip, port)
// 构建UDP地址
udpAddr, err := net.ResolveUDPAddr("udp", addr)
if err != nil {
fmt.Println("地址解析错误:", err)
return false
}
// 创建UDP连接
conn, err := net.DialUDP("udp", nil, udpAddr)
if err != nil {
fmt.Println("连接错误:", err)
return false
}
defer func(conn *net.UDPConn) {
_ = conn.Close()
}(conn)
// 发送UDP数据包
_, err = conn.Write([]byte("Hello UDP"))
if err != nil {
fmt.Println("发送数据失败:", err)
return false
}
// 设置读取超时时间
err = conn.SetReadDeadline(time.Now().Add(timeout))
if err != nil {
fmt.Println("设置超时错误:", err)
return false
}
// 尝试读取响应
buffer := make([]byte, 1024)
_, err = conn.Read(buffer)
if err != nil {
fmt.Printf("没有收到响应, UDP端口 %d 可能未开放或不响应: %v\n", port, err)
return false
}
return true
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。