Skip to content

Commit

Permalink
new: new ndp.spoof.router_lifetime option
Browse files Browse the repository at this point in the history
  • Loading branch information
konradh committed Jan 24, 2024
1 parent 924ff57 commit ad36a8e
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 10 deletions.
24 changes: 16 additions & 8 deletions modules/ndp_spoof/ndp_spoof.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,13 @@ import (

type NDPSpoofer struct {
session.SessionModule
neighbour net.IP
prefix string
prefixLength int
addresses []net.IP
ban bool
waitGroup *sync.WaitGroup
neighbour net.IP
prefix string
prefixLength int
routerLifetime int
addresses []net.IP
ban bool
waitGroup *sync.WaitGroup
}

func NewNDPSpoofer(s *session.Session) *NDPSpoofer {
Expand All @@ -45,6 +46,9 @@ func NewNDPSpoofer(s *session.Session) *NDPSpoofer {
mod.AddParam(session.NewIntParameter("ndp.spoof.prefix.length", "64",
"IPv6 prefix length for router advertisements."))

mod.AddParam(session.NewIntParameter("ndp.spoof.router_lifetime", "1800",
"Router lifetime for router advertisements in seconds."))

mod.AddHandler(session.NewModuleHandler("ndp.spoof on", "",
"Start NDP spoofer.",
func(args []string) error {
Expand Down Expand Up @@ -117,7 +121,11 @@ func (mod *NDPSpoofer) Configure() error {

if err, mod.prefix = mod.StringParam("ndp.spoof.prefix"); err != nil {
return err
} else if err, mod.prefixLength = mod.IntParam("ndp.spoof.prefix.length"); err != nil {
}
if err, mod.prefixLength = mod.IntParam("ndp.spoof.prefix.length"); err != nil {
return err
}
if err, mod.routerLifetime = mod.IntParam("ndp.spoof.router_lifetime"); err != nil {
return err
}

Expand Down Expand Up @@ -153,7 +161,7 @@ func (mod *NDPSpoofer) Start() error {
if mod.prefix != "" {
mod.Debug("sending router advertisement for prefix %s(%d)", mod.prefix, mod.prefixLength)
err, ra := packets.ICMP6RouterAdvertisement(mod.Session.Interface.IPv6, mod.Session.Interface.HW,
mod.prefix, uint8(mod.prefixLength))
mod.prefix, uint8(mod.prefixLength), uint16(mod.routerLifetime))
if err != nil {
mod.Error("error creating ra packet: %v", err)
} else if err = mod.Session.Queue.Send(ra); err != nil {
Expand Down
4 changes: 2 additions & 2 deletions packets/icmp6.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ func ICMP6NeighborAdvertisement(srcHW net.HardwareAddr, srcIP net.IP, dstHW net.
var macIpv6Multicast = net.HardwareAddr([]byte{0x33, 0x33, 0x00, 0x00, 0x00, 0x01})
var ipv6Multicast = net.ParseIP("ff02::1")

func ICMP6RouterAdvertisement(ip net.IP, hw net.HardwareAddr, prefix string, prefixLength uint8) (error, []byte) {
func ICMP6RouterAdvertisement(ip net.IP, hw net.HardwareAddr, prefix string, prefixLength uint8, routerLifetime uint16) (error, []byte) {
eth := layers.Ethernet{
SrcMAC: hw,
DstMAC: macIpv6Multicast,
Expand Down Expand Up @@ -69,7 +69,7 @@ func ICMP6RouterAdvertisement(ip net.IP, hw net.HardwareAddr, prefix string, pre
adv := layers.ICMPv6RouterAdvertisement{
HopLimit: 255,
Flags: 0x08, // prf
RouterLifetime: 1800,
RouterLifetime: routerLifetime,
Options: []layers.ICMPv6Option{
{
Type: layers.ICMPv6OptSourceAddress,
Expand Down

0 comments on commit ad36a8e

Please sign in to comment.