import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
from scapy.all import *
from time import time, sleep
conf.verb = 0
dhcpserversinit = []
dhcpservers = []
init = 1
fam, hw = get_if_raw_hwaddr(conf.iface)
def dhcp_callback(pkt):
if DHCP in pkt and pkt[DHCP].options[0][1] == 2:
if init == 1:
dhcpserversinit.append(pkt[IP].src)
else:
dhcpservers.append(pkt[IP].src)
dhcp_request = (
Ether(dst='ff:ff:ff:ff:ff:ff') /
IP(src='0.0.0.0', dst='255.255.255.255') /
UDP(sport=68, dport=67) /
BOOTP(chaddr=hw) /
DHCP(options=[('message-type', 'discover'), 'end'])
)
sendp(dhcp_request)
sniff(prn=dhcp_callback, store=0, count=5)
init = 0
print "Servidores DHCP Encontrados:"
print "\n".join(dhcpserversinit)
while True:
dhcp_request = (
Ether(dst='ff:ff:ff:ff:ff:ff') /
IP(src='0.0.0.0', dst='255.255.255.255') /
UDP(sport=68, dport=67) /
BOOTP(chaddr=hw) /
DHCP(options=[('message-type', 'discover'), 'end'])
)
sendp(dhcp_request)
sniff(prn=dhcp_callback, store=0, count=5)
newdhcp = set(dhcpservers)
alerts= newdhcp.difference(dhcpserversinit)
if alerts:
print "Nuevo servidor DHCP encontrado"
print "\n".join(dhcpservers)
dhcpserversinit = dhcpservers
dhcpservers = []
sleep(20)