DHCP poisoner: refactor FindIP

- do not crash on IP addresses where one octet contains 0x45 0x4f or 0x46

- operate on bytes (avoid encoding/decoding round-trip)
  and use simple string search instead of regular expressions

closes #181
closes #304
This commit is contained in:
Stefan Walter 2025-04-12 12:11:00 +02:00
parent 545137275f
commit a0d1f03617
No known key found for this signature in database
GPG key ID: 9B6F96EE41A08DAC

View file

@ -239,9 +239,12 @@ def ParseSrcDSTAddr(data):
return SrcIP, SrcPort, DstIP, DstPort return SrcIP, SrcPort, DstIP, DstPort
def FindIP(data): def FindIP(data):
data = data.decode('latin-1') IPPos = data.find(b"\x32\x04") + 2
IP = ''.join(re.findall(r'(?<=\x32\x04)[^EOF]*', data)) if IPPos == -1 or IPPos + 4 >= len(data):
return ''.join(IP[0:4]).encode('latin-1') return None
else:
IP = data[IPPos:IPPos+4]
return IP
def ParseDHCPCode(data, ClientIP,DHCP_DNS): def ParseDHCPCode(data, ClientIP,DHCP_DNS):
global DHCPClient global DHCPClient