mirror of
https://github.com/maride/pancap.git
synced 2024-11-22 16:54:25 +00:00
Add support detecting the request for a specific IP address over DHCP
This commit is contained in:
parent
f918d26ab5
commit
c01d1f49c2
@ -45,7 +45,7 @@ func HandleDHCPv4Packet(packet gopacket.Packet) error {
|
|||||||
appendIfUnique(dhcppacket.ClientHWAddr.String(), requestMAC)
|
appendIfUnique(dhcppacket.ClientHWAddr.String(), requestMAC)
|
||||||
} else {
|
} else {
|
||||||
// Response/Offer packet
|
// Response/Offer packet
|
||||||
addResponseEntry(dhcppacket.ClientIP.String(), dhcppacket.ClientHWAddr.String(), ethernetpacket.SrcMAC.String())
|
addResponseEntry(dhcppacket.ClientIP.String(), dhcppacket.YourClientIP.String(), dhcppacket.ClientHWAddr.String(), ethernetpacket.SrcMAC.String())
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@ -72,7 +72,13 @@ func printResponseSummary() {
|
|||||||
|
|
||||||
// Iterate over all responses
|
// Iterate over all responses
|
||||||
for _, r := range responses {
|
for _, r := range responses {
|
||||||
tmpaddr = append(tmpaddr, fmt.Sprintf("%s offered %s IP address %s", r.serverMACAddr, r.destMACAddr, r.newIPAddr))
|
addition := ""
|
||||||
|
|
||||||
|
if r.askedFor {
|
||||||
|
addition = " which the client explicitly asked for."
|
||||||
|
}
|
||||||
|
|
||||||
|
tmpaddr = append(tmpaddr, fmt.Sprintf("%s offered %s IP address %s%s", r.serverMACAddr, r.destMACAddr, r.newIPAddr, addition))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Draw as tree
|
// Draw as tree
|
||||||
@ -80,7 +86,15 @@ func printResponseSummary() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Adds a new response entry. If an IP address was already issued or a MAC asks multiple times for DNS, the case is examined further
|
// Adds a new response entry. If an IP address was already issued or a MAC asks multiple times for DNS, the case is examined further
|
||||||
func addResponseEntry(newIP string, destMAC string, serverMAC string) {
|
func addResponseEntry(newIP string, yourIP string, destMAC string, serverMAC string) {
|
||||||
|
// Check if client asked for a specific address (which was granted by the DHCP server)
|
||||||
|
askedFor := false
|
||||||
|
if newIP == "0.0.0.0" {
|
||||||
|
// Yes, client asked for a specific address. Most likely not the first time in this network.
|
||||||
|
newIP = yourIP
|
||||||
|
askedFor = true
|
||||||
|
}
|
||||||
|
|
||||||
for _, r := range responses {
|
for _, r := range responses {
|
||||||
// Check for interesting cases
|
// Check for interesting cases
|
||||||
if r.destMACAddr == destMAC {
|
if r.destMACAddr == destMAC {
|
||||||
@ -112,5 +126,6 @@ func addResponseEntry(newIP string, destMAC string, serverMAC string) {
|
|||||||
destMACAddr: destMAC,
|
destMACAddr: destMAC,
|
||||||
newIPAddr: newIP,
|
newIPAddr: newIP,
|
||||||
serverMACAddr: serverMAC,
|
serverMACAddr: serverMAC,
|
||||||
|
askedFor: askedFor,
|
||||||
})
|
})
|
||||||
}
|
}
|
@ -4,5 +4,6 @@ type dhcpResponse struct {
|
|||||||
destMACAddr string
|
destMACAddr string
|
||||||
newIPAddr string
|
newIPAddr string
|
||||||
serverMACAddr string
|
serverMACAddr string
|
||||||
|
askedFor bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user