mirror of
https://github.com/bettercap/bettercap.git
synced 2025-03-12 04:36:03 -07:00
52 lines
1.1 KiB
Go
52 lines
1.1 KiB
Go
package packets
|
|
|
|
import (
|
|
"errors"
|
|
// TODO: refactor to use gopacket when gopacket folks
|
|
// will fix this > https://github.com/google/gopacket/issues/334
|
|
"github.com/mdlayher/dhcp6"
|
|
)
|
|
|
|
const DHCP6OptDNSServers = 23
|
|
const DHCP6OptDNSDomains = 24
|
|
const DHCP6OptClientFQDN = 39
|
|
|
|
// link-local
|
|
const IPv6Prefix = "fe80::"
|
|
|
|
var (
|
|
ErrNoCID = errors.New("Unexpected DHCPv6 packet, could not find client id.")
|
|
)
|
|
|
|
func DHCP6EncodeList(elements []string) (encoded []byte) {
|
|
encoded = make([]byte, 0)
|
|
|
|
for _, elem := range elements {
|
|
// this would be worth fuzzing btw
|
|
encoded = append(encoded, byte(len(elem)&0xff))
|
|
encoded = append(encoded, []byte(elem)...)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func DHCP6For(what dhcp6.MessageType, to dhcp6.Packet, duid []byte) (err error, p dhcp6.Packet) {
|
|
p = dhcp6.Packet{
|
|
MessageType: what,
|
|
TransactionID: to.TransactionID,
|
|
Options: make(dhcp6.Options),
|
|
}
|
|
|
|
var rawCID []byte
|
|
if raw, found := to.Options[dhcp6.OptionClientID]; !found || len(raw) < 1 {
|
|
return ErrNoCID, p
|
|
} else {
|
|
rawCID = raw[0]
|
|
}
|
|
|
|
p.Options.AddRaw(dhcp6.OptionClientID, rawCID)
|
|
p.Options.AddRaw(dhcp6.OptionServerID, duid)
|
|
|
|
return nil, p
|
|
}
|