修复1
This commit is contained in:
@@ -2,6 +2,7 @@ package handler
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
|
"fmt"
|
||||||
"net"
|
"net"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"strings"
|
"strings"
|
||||||
@@ -90,7 +91,7 @@ func handleDns(c *gin.Context, url string, params map[string]interface{}) {
|
|||||||
// 解析dig输出行,格式如:example.com. 300 IN A 192.168.1.1
|
// 解析dig输出行,格式如:example.com. 300 IN A 192.168.1.1
|
||||||
parts := strings.Fields(line)
|
parts := strings.Fields(line)
|
||||||
if len(parts) >= 5 {
|
if len(parts) >= 5 {
|
||||||
recordType := parts[3] // IN
|
// parts[3] 是 "IN" (record type),parts[4] 是记录类型 (A, AAAA, CNAME等)
|
||||||
recordClass := parts[4] // A, AAAA, CNAME等
|
recordClass := parts[4] // A, AAAA, CNAME等
|
||||||
recordValue := ""
|
recordValue := ""
|
||||||
if len(parts) > 5 {
|
if len(parts) > 5 {
|
||||||
|
|||||||
@@ -9,6 +9,12 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func handleFindPing(c *gin.Context, url string, params map[string]interface{}) {
|
func handleFindPing(c *gin.Context, url string, params map[string]interface{}) {
|
||||||
|
// 获取seq参数
|
||||||
|
seq := ""
|
||||||
|
if seqVal, ok := params["seq"].(string); ok {
|
||||||
|
seq = seqVal
|
||||||
|
}
|
||||||
|
|
||||||
// url应该是CIDR格式,如 8.8.8.0/24
|
// url应该是CIDR格式,如 8.8.8.0/24
|
||||||
cidr := url
|
cidr := url
|
||||||
if cidrParam, ok := params["cidr"].(string); ok && cidrParam != "" {
|
if cidrParam, ok := params["cidr"].(string); ok && cidrParam != "" {
|
||||||
@@ -19,6 +25,7 @@ func handleFindPing(c *gin.Context, url string, params map[string]interface{}) {
|
|||||||
_, ipNet, err := net.ParseCIDR(cidr)
|
_, ipNet, err := net.ParseCIDR(cidr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(200, gin.H{
|
c.JSON(200, gin.H{
|
||||||
|
"seq": seq,
|
||||||
"type": "ceFindPing",
|
"type": "ceFindPing",
|
||||||
"error": "无效的CIDR格式",
|
"error": "无效的CIDR格式",
|
||||||
})
|
})
|
||||||
@@ -65,6 +72,7 @@ func handleFindPing(c *gin.Context, url string, params map[string]interface{}) {
|
|||||||
wg.Wait()
|
wg.Wait()
|
||||||
|
|
||||||
c.JSON(200, gin.H{
|
c.JSON(200, gin.H{
|
||||||
|
"seq": seq,
|
||||||
"type": "ceFindPing",
|
"type": "ceFindPing",
|
||||||
"cidr": cidr,
|
"cidr": cidr,
|
||||||
"alive_ips": aliveIPs,
|
"alive_ips": aliveIPs,
|
||||||
|
|||||||
@@ -10,10 +10,17 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func handleTCPing(c *gin.Context, url string, params map[string]interface{}) {
|
func handleTCPing(c *gin.Context, url string, params map[string]interface{}) {
|
||||||
|
// 获取seq参数
|
||||||
|
seq := ""
|
||||||
|
if seqVal, ok := params["seq"].(string); ok {
|
||||||
|
seq = seqVal
|
||||||
|
}
|
||||||
|
|
||||||
// 解析host:port格式
|
// 解析host:port格式
|
||||||
parts := strings.Split(url, ":")
|
parts := strings.Split(url, ":")
|
||||||
if len(parts) != 2 {
|
if len(parts) != 2 {
|
||||||
c.JSON(200, gin.H{
|
c.JSON(200, gin.H{
|
||||||
|
"seq": seq,
|
||||||
"type": "ceTCPing",
|
"type": "ceTCPing",
|
||||||
"url": url,
|
"url": url,
|
||||||
"error": "格式错误,需要 host:port",
|
"error": "格式错误,需要 host:port",
|
||||||
@@ -26,6 +33,7 @@ func handleTCPing(c *gin.Context, url string, params map[string]interface{}) {
|
|||||||
port, err := strconv.Atoi(portStr)
|
port, err := strconv.Atoi(portStr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(200, gin.H{
|
c.JSON(200, gin.H{
|
||||||
|
"seq": seq,
|
||||||
"type": "ceTCPing",
|
"type": "ceTCPing",
|
||||||
"url": url,
|
"url": url,
|
||||||
"error": "端口格式错误",
|
"error": "端口格式错误",
|
||||||
@@ -33,6 +41,22 @@ func handleTCPing(c *gin.Context, url string, params map[string]interface{}) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 解析hostname获取IP
|
||||||
|
var primaryIP string
|
||||||
|
ips, err := net.LookupIP(host)
|
||||||
|
if err == nil && len(ips) > 0 {
|
||||||
|
// 优先使用IPv4
|
||||||
|
for _, ip := range ips {
|
||||||
|
if ip.To4() != nil {
|
||||||
|
primaryIP = ip.String()
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if primaryIP == "" && len(ips) > 0 {
|
||||||
|
primaryIP = ips[0].String()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 执行TCP连接测试
|
// 执行TCP连接测试
|
||||||
start := time.Now()
|
start := time.Now()
|
||||||
conn, err := net.DialTimeout("tcp", net.JoinHostPort(host, portStr), 5*time.Second)
|
conn, err := net.DialTimeout("tcp", net.JoinHostPort(host, portStr), 5*time.Second)
|
||||||
@@ -40,8 +64,10 @@ func handleTCPing(c *gin.Context, url string, params map[string]interface{}) {
|
|||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(200, gin.H{
|
c.JSON(200, gin.H{
|
||||||
|
"seq": seq,
|
||||||
"type": "ceTCPing",
|
"type": "ceTCPing",
|
||||||
"url": url,
|
"url": url,
|
||||||
|
"ip": primaryIP,
|
||||||
"host": host,
|
"host": host,
|
||||||
"port": port,
|
"port": port,
|
||||||
"latency": -1,
|
"latency": -1,
|
||||||
@@ -51,9 +77,18 @@ func handleTCPing(c *gin.Context, url string, params map[string]interface{}) {
|
|||||||
}
|
}
|
||||||
defer conn.Close()
|
defer conn.Close()
|
||||||
|
|
||||||
|
// 如果之前没有获取到IP,从连接中获取
|
||||||
|
if primaryIP == "" {
|
||||||
|
if addr, ok := conn.RemoteAddr().(*net.TCPAddr); ok {
|
||||||
|
primaryIP = addr.IP.String()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
c.JSON(200, gin.H{
|
c.JSON(200, gin.H{
|
||||||
|
"seq": seq,
|
||||||
"type": "ceTCPing",
|
"type": "ceTCPing",
|
||||||
"url": url,
|
"url": url,
|
||||||
|
"ip": primaryIP,
|
||||||
"host": host,
|
"host": host,
|
||||||
"port": port,
|
"port": port,
|
||||||
"latency": latency,
|
"latency": latency,
|
||||||
|
|||||||
Reference in New Issue
Block a user