mirror of
https://github.com/bettercap/bettercap
synced 2025-07-05 20:42:09 -07:00
new: new ndp.spoof.router_lifetime option
This commit is contained in:
parent
924ff5753d
commit
4dc7bae48c
2 changed files with 18 additions and 10 deletions
|
@ -13,12 +13,13 @@ import (
|
||||||
|
|
||||||
type NDPSpoofer struct {
|
type NDPSpoofer struct {
|
||||||
session.SessionModule
|
session.SessionModule
|
||||||
neighbour net.IP
|
neighbour net.IP
|
||||||
prefix string
|
prefix string
|
||||||
prefixLength int
|
prefixLength int
|
||||||
addresses []net.IP
|
routerLifetime int
|
||||||
ban bool
|
addresses []net.IP
|
||||||
waitGroup *sync.WaitGroup
|
ban bool
|
||||||
|
waitGroup *sync.WaitGroup
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewNDPSpoofer(s *session.Session) *NDPSpoofer {
|
func NewNDPSpoofer(s *session.Session) *NDPSpoofer {
|
||||||
|
@ -45,6 +46,9 @@ func NewNDPSpoofer(s *session.Session) *NDPSpoofer {
|
||||||
mod.AddParam(session.NewIntParameter("ndp.spoof.prefix.length", "64",
|
mod.AddParam(session.NewIntParameter("ndp.spoof.prefix.length", "64",
|
||||||
"IPv6 prefix length for router advertisements."))
|
"IPv6 prefix length for router advertisements."))
|
||||||
|
|
||||||
|
mod.AddParam(session.NewIntParameter("ndp.spoof.router_lifetime", "10",
|
||||||
|
"Router lifetime for router advertisements in seconds."))
|
||||||
|
|
||||||
mod.AddHandler(session.NewModuleHandler("ndp.spoof on", "",
|
mod.AddHandler(session.NewModuleHandler("ndp.spoof on", "",
|
||||||
"Start NDP spoofer.",
|
"Start NDP spoofer.",
|
||||||
func(args []string) error {
|
func(args []string) error {
|
||||||
|
@ -117,7 +121,11 @@ func (mod *NDPSpoofer) Configure() error {
|
||||||
|
|
||||||
if err, mod.prefix = mod.StringParam("ndp.spoof.prefix"); err != nil {
|
if err, mod.prefix = mod.StringParam("ndp.spoof.prefix"); err != nil {
|
||||||
return err
|
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
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -153,7 +161,7 @@ func (mod *NDPSpoofer) Start() error {
|
||||||
if mod.prefix != "" {
|
if mod.prefix != "" {
|
||||||
mod.Debug("sending router advertisement for prefix %s(%d)", mod.prefix, mod.prefixLength)
|
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,
|
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 {
|
if err != nil {
|
||||||
mod.Error("error creating ra packet: %v", err)
|
mod.Error("error creating ra packet: %v", err)
|
||||||
} else if err = mod.Session.Queue.Send(ra); err != nil {
|
} else if err = mod.Session.Queue.Send(ra); err != nil {
|
||||||
|
|
|
@ -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 macIpv6Multicast = net.HardwareAddr([]byte{0x33, 0x33, 0x00, 0x00, 0x00, 0x01})
|
||||||
var ipv6Multicast = net.ParseIP("ff02::1")
|
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{
|
eth := layers.Ethernet{
|
||||||
SrcMAC: hw,
|
SrcMAC: hw,
|
||||||
DstMAC: macIpv6Multicast,
|
DstMAC: macIpv6Multicast,
|
||||||
|
@ -69,7 +69,7 @@ func ICMP6RouterAdvertisement(ip net.IP, hw net.HardwareAddr, prefix string, pre
|
||||||
adv := layers.ICMPv6RouterAdvertisement{
|
adv := layers.ICMPv6RouterAdvertisement{
|
||||||
HopLimit: 255,
|
HopLimit: 255,
|
||||||
Flags: 0x08, // prf
|
Flags: 0x08, // prf
|
||||||
RouterLifetime: 1800,
|
RouterLifetime: routerLifetime,
|
||||||
Options: []layers.ICMPv6Option{
|
Options: []layers.ICMPv6Option{
|
||||||
{
|
{
|
||||||
Type: layers.ICMPv6OptSourceAddress,
|
Type: layers.ICMPv6OptSourceAddress,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue