mirror of
https://github.com/xiaoqidun/probe.git
synced 2026-01-29 04:58:46 +08:00
feat(强化检查): 实现更多的检查
This commit is contained in:
+36
-15
@@ -195,28 +195,49 @@ func DetectNAT(conn net.PacketConn, primarySTUN, secondarySTUN, network string,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var mappedAddr3 *net.UDPAddr
|
var mappedAddr2 *net.UDPAddr
|
||||||
if targetSTUN2 != "" {
|
if targetSTUN2 != "" {
|
||||||
resp3, _, err := performTest(conn, targetSTUN2, network, timeout, false, false)
|
resp2, _, err := performTest(conn, targetSTUN2, network, timeout, false, false)
|
||||||
if err == nil && resp3 != nil {
|
if err == nil && resp2 != nil {
|
||||||
mappedAddr3 = resp3.GetMappedAddress()
|
mappedAddr2 = resp2.GetMappedAddress()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if mappedAddr3 != nil {
|
if mappedAddr2 == nil {
|
||||||
if mappedAddr1.String() == mappedAddr3.String() {
|
|
||||||
res.Mapping = MappingEndpointIndependent
|
|
||||||
} else {
|
|
||||||
res.Mapping = MappingAddressPortDependent
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
res.Mapping = MappingUnknown
|
res.Mapping = MappingUnknown
|
||||||
|
} else if mappedAddr1.String() == mappedAddr2.String() {
|
||||||
|
res.Mapping = MappingEndpointIndependent
|
||||||
|
} else {
|
||||||
|
res.Mapping = MappingAddressPortDependent
|
||||||
|
changedAddr := resp1.GetChangedAddress()
|
||||||
|
if changedAddr != nil {
|
||||||
|
host, _, _ := net.SplitHostPort(primarySTUN)
|
||||||
|
primaryIP := net.ParseIP(host)
|
||||||
|
if primaryIP == nil {
|
||||||
|
if ipAddr, err := net.ResolveIPAddr("ip", host); err == nil {
|
||||||
|
primaryIP = ipAddr.IP
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if primaryIP != nil && changedAddr.Port != 0 {
|
||||||
|
altPortSTUN := net.JoinHostPort(primaryIP.String(), strconv.Itoa(changedAddr.Port))
|
||||||
|
if altPortSTUN != primarySTUN {
|
||||||
|
resp3, _, err := performTest(conn, altPortSTUN, network, timeout, false, false)
|
||||||
|
if err == nil && resp3 != nil {
|
||||||
|
if mappedAddr3 := resp3.GetMappedAddress(); mappedAddr3 != nil {
|
||||||
|
if mappedAddr1.String() == mappedAddr3.String() {
|
||||||
|
res.Mapping = MappingAddressDependent
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
resp2, _, _ := performTest(conn, primarySTUN, network, timeout, true, true)
|
respF1, _, _ := performTest(conn, primarySTUN, network, timeout, true, true)
|
||||||
if resp2 != nil {
|
if respF1 != nil {
|
||||||
res.Filtering = FilteringEndpointIndependent
|
res.Filtering = FilteringEndpointIndependent
|
||||||
} else {
|
} else {
|
||||||
resp4, _, _ := performTest(conn, primarySTUN, network, timeout, false, true)
|
respF2, _, _ := performTest(conn, primarySTUN, network, timeout, false, true)
|
||||||
if resp4 != nil {
|
if respF2 != nil {
|
||||||
res.Filtering = FilteringAddressDependent
|
res.Filtering = FilteringAddressDependent
|
||||||
} else {
|
} else {
|
||||||
res.Filtering = FilteringAddressPortDependent
|
res.Filtering = FilteringAddressPortDependent
|
||||||
|
|||||||
Reference in New Issue
Block a user