Skip to content

Commit 7d370a7

Browse files
added system resolver as default, updated CLI commands description, bumped to v0.0.7
1 parent dd2ad7b commit 7d370a7

4 files changed

Lines changed: 27 additions & 13 deletions

File tree

README.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,9 @@ OPTIONS:
3939
-I Display list of network interfaces and exit
4040
-d Enable debug logging
4141
-nocolor Disable colored output
42-
-auto Automatically set kernel parameters (Linux/Android) and network settings
42+
-auto Automatically set kernel parameters (Linux/Android) and network settings. When RA spoofing is enabled and no -rdnss flag
43+
is provided, RDNSS option is included in each packet with host IP as DNS server for targets. DNS server is setup using
44+
resolv.conf or Google DNS as fallback nameserver.
4345
-i The name of the network interface. Example: eth0 (Default: default interface)
4446
-interval Interval between sent packets (Default: 5s)
4547

@@ -51,9 +53,9 @@ OPTIONS:
5153

5254
RA spoofing:
5355
-ra Enable RA (router advertisement) spoofing. It is enabled when no spoofing mode specified
54-
-p IPv6 prefix for RA spoofing (Example: 2001:db8:7a31:4400::/64)
56+
-p IPv6 prefix for RA spoofing (Example: 2001:db8:7a31:4400::/64). See RFC 4862 for more info
5557
-mtu MTU value to send in RA packet (Default: interface value)
56-
-rlt Router lifetime value
58+
-rlt Router lifetime value. Tells targets how long router should be used as default gateway. See RFC 4682 for more info
5759
-rdnss Comma separated list of DNS servers for RDNSS mode (Example: "2001:4860:4860::8888,2606:4700:4700::1111")
5860
-E Specify IPv6 extension headers for RA Guard evasion. The packet structure should contain at least one fragment (F)
5961
that is used to separate per-fragment headers (PFH) and headers for fragmentable part. PFH get included in each fragment,

cmd/nf/main.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,9 @@ OPTIONS:
4242
-I Display list of network interfaces and exit
4343
-d Enable debug logging
4444
-nocolor Disable colored output
45-
-auto Automatically set kernel parameters (Linux/Android) and network settings
45+
-auto Automatically set kernel parameters (Linux/Android) and network settings. When RA spoofing is enabled and no -rdnss flag
46+
is provided, RDNSS option is included in each packet with host IP as DNS server for targets. DNS server is setup using
47+
resolv.conf or Google DNS as fallback nameserver.
4648
-i The name of the network interface. Example: eth0 (Default: default interface)
4749
-interval Interval between sent packets (Default: 5s)
4850
@@ -54,9 +56,9 @@ OPTIONS:
5456
5557
RA spoofing:
5658
-ra Enable RA (router advertisement) spoofing. It is enabled when no spoofing mode specified
57-
-p IPv6 prefix for RA spoofing (Example: 2001:db8:7a31:4400::/64)
59+
-p IPv6 prefix for RA spoofing (Example: 2001:db8:7a31:4400::/64). See RFC 4862 for more info
5860
-mtu MTU value to send in RA packet (Default: interface value)
59-
-rlt Router lifetime value
61+
-rlt Router lifetime value. Tells targets how long router should be used as default gateway. See RFC 4682 for more info
6062
-rdnss Comma separated list of DNS servers for RDNSS mode (Example: "2001:4860:4860::8888,2606:4700:4700::1111")
6163
-E Specify IPv6 extension headers for RA Guard evasion. The packet structure should contain at least one fragment (F)
6264
that is used to separate per-fragment headers (PFH) and headers for fragmentable part. PFH get included in each fragment,

ndpspoof.go

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -412,12 +412,7 @@ func NewNDPSpoofer(conf *NDPSpoofConfig) (*NDPSpoofer, error) {
412412
return nil, fmt.Errorf("[ndp spoofer] failed creating DNS server on %s:53: %v", nr.hostIP, err)
413413
}
414414
nr.gwConn = pconn.(*net.UDPConn)
415-
var gwIPv4 netip.Addr
416-
gwIPv4, err = network.GetGatewayIPv4FromInterface(nr.iface.Name)
417-
if err != nil {
418-
gwIPv4 = netip.MustParseAddr("8.8.8.8")
419-
}
420-
nr.gwDNSAddr = &net.UDPAddr{IP: net.ParseIP(gwIPv4.String()), Port: 53}
415+
nr.gwDNSAddr = nr.getResolver()
421416
}
422417
if conf.PacketQuery != "" {
423418
ra := nr.newRAPacket(nr.rlt)
@@ -1222,3 +1217,18 @@ func (nr *NDPSpoofer) handleDNSConnection(conn *udpConn) {
12221217
return
12231218
}
12241219
}
1220+
1221+
func (nr *NDPSpoofer) getResolver() *net.UDPAddr {
1222+
if resolvers, err := network.GetSystemNameservers(); err == nil {
1223+
for _, r := range resolvers {
1224+
if network.Is6(r) {
1225+
var zone string
1226+
if r.IsLinkLocalUnicast() {
1227+
zone = nr.iface.Name
1228+
}
1229+
return &net.UDPAddr{IP: net.ParseIP(r.String()), Port: 53, Zone: zone}
1230+
}
1231+
}
1232+
}
1233+
return &net.UDPAddr{IP: net.ParseIP("2001:4860:4860::8888"), Port: 53}
1234+
}

version.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
package ndpspoof
22

3-
const Version string = "nf v0.0.6"
3+
const Version string = "nf v0.0.7"

0 commit comments

Comments
 (0)