mirror of
https://github.com/xiaoqidun/probe.git
synced 2026-02-11 10:25:30 +08:00
Compare commits
5 Commits
f7e5b9e930
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 106bced01b | |||
| 6dfd0dffe0 | |||
| 779d56b818 | |||
| 495c63813b | |||
| be6cd187bb |
@@ -27,7 +27,7 @@ probe -ip 6
|
|||||||
probe -s5 127.0.0.1:54321
|
probe -s5 127.0.0.1:54321
|
||||||
|
|
||||||
# 使用自定义服务器(STUN协议)
|
# 使用自定义服务器(STUN协议)
|
||||||
probe -s1 stun.miwifi.com:3478
|
probe -s1 stun.hot-chilli.net:3478
|
||||||
```
|
```
|
||||||
|
|
||||||
# 授权协议
|
# 授权协议
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ func main() {
|
|||||||
to time.Duration
|
to time.Duration
|
||||||
)
|
)
|
||||||
flag.StringVar(&ip, "ip", "", "协议版本")
|
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(&s2, "s2", "", "次服务器")
|
||||||
flag.StringVar(&s5, "s5", "", "代理地址")
|
flag.StringVar(&s5, "s5", "", "代理地址")
|
||||||
flag.DurationVar(&to, "to", 10*time.Second, "超时时间")
|
flag.DurationVar(&to, "to", 10*time.Second, "超时时间")
|
||||||
|
|||||||
+37
-2
@@ -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 {
|
if respF1 != nil {
|
||||||
res.Filtering = FilteringEndpointIndependent
|
res.Filtering = FilteringEndpointIndependent
|
||||||
} else {
|
} 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 {
|
if respF2 != nil {
|
||||||
res.Filtering = FilteringAddressDependent
|
res.Filtering = FilteringAddressDependent
|
||||||
} else {
|
} else {
|
||||||
@@ -272,12 +303,16 @@ func DetectNAT(conn net.PacketConn, primarySTUN, secondarySTUN, network string,
|
|||||||
if res.Mapping == MappingUnknown {
|
if res.Mapping == MappingUnknown {
|
||||||
res.Mapping = MappingEndpointIndependent
|
res.Mapping = MappingEndpointIndependent
|
||||||
}
|
}
|
||||||
|
} else if res.Mapping == MappingUnknown {
|
||||||
|
res.Type = NATUnknown
|
||||||
} else if res.Mapping == MappingEndpointIndependent {
|
} else if res.Mapping == MappingEndpointIndependent {
|
||||||
switch res.Filtering {
|
switch res.Filtering {
|
||||||
case FilteringAddressDependent:
|
case FilteringAddressDependent:
|
||||||
res.Type = NATRestricted
|
res.Type = NATRestricted
|
||||||
case FilteringAddressPortDependent:
|
case FilteringAddressPortDependent:
|
||||||
res.Type = NATPortRestricted
|
res.Type = NATPortRestricted
|
||||||
|
default:
|
||||||
|
res.Type = NATUnknown
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
res.Type = NATSymmetric
|
res.Type = NATSymmetric
|
||||||
|
|||||||
Reference in New Issue
Block a user