|
|
@@ -68,6 +68,13 @@ var (
|
|
|
DetectRoleReceiver = "receiver"
|
|
|
)
|
|
|
|
|
|
+// PrepareOptions defines options for NAT traversal preparation
|
|
|
+type PrepareOptions struct {
|
|
|
+ // DisableAssistedAddrs disables the use of local network interfaces
|
|
|
+ // for assisted connections during NAT traversal
|
|
|
+ DisableAssistedAddrs bool
|
|
|
+}
|
|
|
+
|
|
|
type PrepareResult struct {
|
|
|
Addrs []string
|
|
|
AssistedAddrs []string
|
|
|
@@ -108,7 +115,7 @@ func PreCheck(
|
|
|
}
|
|
|
|
|
|
// Prepare is used to do some preparation work before penetration.
|
|
|
-func Prepare(stunServers []string) (*PrepareResult, error) {
|
|
|
+func Prepare(stunServers []string, opts PrepareOptions) (*PrepareResult, error) {
|
|
|
// discover for Nat type
|
|
|
addrs, localAddr, err := Discover(stunServers, "")
|
|
|
if err != nil {
|
|
|
@@ -133,9 +140,13 @@ func Prepare(stunServers []string) (*PrepareResult, error) {
|
|
|
return nil, fmt.Errorf("listen local udp addr error: %v", err)
|
|
|
}
|
|
|
|
|
|
- assistedAddrs := make([]string, 0, len(localIPs))
|
|
|
- for _, ip := range localIPs {
|
|
|
- assistedAddrs = append(assistedAddrs, net.JoinHostPort(ip, strconv.Itoa(laddr.Port)))
|
|
|
+ // Apply NAT traversal options
|
|
|
+ var assistedAddrs []string
|
|
|
+ if !opts.DisableAssistedAddrs {
|
|
|
+ assistedAddrs = make([]string, 0, len(localIPs))
|
|
|
+ for _, ip := range localIPs {
|
|
|
+ assistedAddrs = append(assistedAddrs, net.JoinHostPort(ip, strconv.Itoa(laddr.Port)))
|
|
|
+ }
|
|
|
}
|
|
|
return &PrepareResult{
|
|
|
Addrs: addrs,
|