Compare commits

...

5 Commits

Author SHA1 Message Date
106bced01b feat(优化代码): 优化代码
/ build (push) Successful in 5m32s
2026-01-28 20:50:11 +08:00
6dfd0dffe0 fix(修复问题): 修复Mapping=Unknown时误判为Symmetric
/ build (push) Successful in 5m25s
2026-01-28 20:39:10 +08:00
779d56b818 feat(默认地址): 更新默认的stun服务器
/ build (push) Successful in 5m41s
2026-01-22 23:55:13 +08:00
495c63813b feat(完善逻辑): 完善逻辑
/ build (push) Successful in 5m48s
2026-01-22 23:30:52 +08:00
be6cd187bb feat(优化逻辑): 优化逻辑
/ build (push) Successful in 5m40s
2026-01-22 22:42:16 +08:00
3 changed files with 39 additions and 4 deletions
+1 -1
View File
@@ -27,7 +27,7 @@ probe -ip 6
probe -s5 127.0.0.1:54321
# 使用自定义服务器STUN协议
probe -s1 stun.miwifi.com:3478
probe -s1 stun.hot-chilli.net:3478
```
# 授权协议
+1 -1
View File
@@ -31,7 +31,7 @@ func main() {
to time.Duration
)
flag.StringVar(&ip, "ip", "", "协议版本")
flag.StringVar(&s1, "s1", "stun.l.google.com:19302", "主服务器")
flag.StringVar(&s1, "s1", "stun.nextcloud.com:3478", "主服务器")
flag.StringVar(&s2, "s2", "", "次服务器")
flag.StringVar(&s5, "s5", "", "代理地址")
flag.DurationVar(&to, "to", 10*time.Second, "超时时间")
+37 -2
View File
@@ -256,11 +256,42 @@ func DetectNAT(conn net.PacketConn, primarySTUN, secondarySTUN, network string,
}
}
}
respF1, _, _ := performTest(conn, primarySTUN, network, timeout, true, true)
respF1, addrF1, _ := performTest(conn, primarySTUN, network, timeout, true, true)
if respF1 != nil {
if dst, err := resolveAddr(conn, primarySTUN, network); err == nil {
var checkIP net.IP
var checkPort int
if sAddr, ok := dst.(*net.UDPAddr); ok {
checkIP = sAddr.IP
checkPort = sAddr.Port
} else if sAddr, ok := dst.(*SocksAddr); ok {
if ipAddr, err := net.ResolveIPAddr("ip", sAddr.Host); err == nil {
checkIP = ipAddr.IP
checkPort = sAddr.Port
}
}
if checkIP != nil && addrF1 != nil && checkIP.Equal(addrF1.IP) && addrF1.Port == checkPort {
respF1 = nil
}
}
}
if respF1 != nil {
res.Filtering = FilteringEndpointIndependent
} else {
respF2, _, _ := performTest(conn, primarySTUN, network, timeout, false, true)
respF2, addrF2, _ := performTest(conn, primarySTUN, network, timeout, false, true)
if respF2 != nil {
if dst, err := resolveAddr(conn, primarySTUN, network); err == nil {
var checkPort int
if sAddr, ok := dst.(*net.UDPAddr); ok {
checkPort = sAddr.Port
} else if sAddr, ok := dst.(*SocksAddr); ok {
checkPort = sAddr.Port
}
if checkPort != 0 && addrF2 != nil && checkPort == addrF2.Port {
respF2 = nil
}
}
}
if respF2 != nil {
res.Filtering = FilteringAddressDependent
} else {
@@ -272,12 +303,16 @@ func DetectNAT(conn net.PacketConn, primarySTUN, secondarySTUN, network string,
if res.Mapping == MappingUnknown {
res.Mapping = MappingEndpointIndependent
}
} else if res.Mapping == MappingUnknown {
res.Type = NATUnknown
} else if res.Mapping == MappingEndpointIndependent {
switch res.Filtering {
case FilteringAddressDependent:
res.Type = NATRestricted
case FilteringAddressPortDependent:
res.Type = NATPortRestricted
default:
res.Type = NATUnknown
}
} else {
res.Type = NATSymmetric