diff --git a/surveillance/dhcp-detect.py b/surveillance/dhcp-detect.py index 6f979911..2c721af6 100755 --- a/surveillance/dhcp-detect.py +++ b/surveillance/dhcp-detect.py @@ -13,7 +13,11 @@ sys.path.append("/usr/bin") from scapy import Ether, sendp, sniff, BOOTP, IP, UDP # Adresse MAC de egon -mac=os.popen(r"ifconfig | grep '^eth0' | awk '{print $(NF)}'").readline().strip() +#mac=os.popen(r"ifconfig | grep '^eth0' | awk '{print $(NF)}'").readline().strip() +# maintenant c'est crans l'interface +INTERFACE = "crans" + +mac=os.popen(r"ifconfig | grep '^crans' | awk '{print $(NF)}'").readline().strip() # Paquet à envoyer pour détecter un DHCP (il a été capturé pour avoir la bonne tête) tosend = Ether("\xff\xff\xff\xff\xff\xff\x00\x80\xc8\xc9\xab\x01\x08\x00E\x10\x01H\x00\x00\x00\x00@\x11y\x96\x00\x00\x00\x00\xff\xff\xff\xff\x00D\x00C\x014\x9aA\x01\x01\x06\x00\xb2\x87\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xc8\xc9\xab\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00c\x82Sc5\x01\x012\x04R\xe1'67\x07\x01\x1c\x02\x03\x0f\x06\x0c\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00") @@ -33,46 +37,47 @@ print # Envoi par mail le paquet def mail(paquet): if (paquet.getlayer(Ether).src in globals()['dejavu'] and (time.time() - globals()['dejavu'][paquet.getlayer(Ether).src]) < 60*60): - pass + pass else: - globals()['dejavu'][paquet.getlayer(Ether).src] = time.time() - msg = "From: %s\r\nTo: %s\r\nSubject: DHCP pirate\r\n\r\n" % ("Vincent Bernat (dhcp) ", "Disconnect team ") - msg = msg + """Un DHCP pirate a été découvert sur le réseau. Voici quelques renseignements mineurs à son sujet : - - Son adresse Ethernet : %s - Son adresse IP : %s - Son TTL : %d - -Merci de votre attention et à bientôt.""" % (paquet.getlayer(Ether).src, paquet.getlayer(IP).src, paquet.getlayer(IP).ttl) + globals()['dejavu'][paquet.getlayer(Ether).src] = time.time() + msg = "From: %s\r\nTo: %s\r\nSubject: DHCP pirate\r\n\r\n" % ("Vincent Bernat (dhcp) ", "Disconnect team ") + msg = msg + """Un DHCP pirate a été découvert sur le réseau. Voici quelques renseignements mineurs à son sujet : - server = smtplib.SMTP('localhost') - server.sendmail('bernat@crans.org', ('disconnect@crans.org',), msg) - server.quit() - + Son adresse Ethernet : %s + Son adresse IP : %s + Son TTL : %d + + Merci de votre attention et à bientôt.""" % (paquet.getlayer(Ether).src, paquet.getlayer(IP).src, paquet.getlayer(IP).ttl) + + server = smtplib.SMTP('localhost') + #server.sendmail('gdetrez@crans.org', ('disconnect@crans.org',), msg) + server.sendmail('gdetrez@crans.org', msg) + server.quit() + # Reception d'une réponse def recoit(paquet): # On affiche print paquet.summary() # On verifie que c'est bien ce qu'on attend if ((paquet.getlayer(Ether).dst.upper() == globals()['mac']) and (paquet.haslayer(BOOTP)) and (paquet.getlayer(BOOTP).op == 2) and (paquet.getlayer(IP).src != '138.231.136.6') and (paquet.getlayer(IP).src != '138.231.136.3')): - # DHCP pirate ? - print "DHCP pirate ? (%s)" % paquet.getlayer(Ether).src - mail(paquet) + # DHCP pirate ? + print "DHCP pirate ? (%s)" % paquet.getlayer(Ether).src + mail(paquet) # Envoi du paquet test def send(pere): while pere.isAlive(): - time.sleep(60) - print tosend.summary() - sendp(tosend) + time.sleep(60) + print tosend.summary() + sendp(tosend) print "Fin des envois" # Sniffer def get(pere): while pere.isAlive(): - # On prend les paquets par 100, sinon, le process grossit beaucoup trop - a = sniff(iface="eth0", filter="port bootpc and ether dst %s" % globals()['mac'], prn=recoit, count=100) + # On prend les paquets par 100, sinon, le process grossit beaucoup trop + a = sniff(iface=INTERFACE , filter="port bootpc and ether dst %s" % globals()['mac'], prn=recoit, count=100) print "Fin du sniff" # On va démarrer le thread qui envoie régulièrement le paquet et celui qui sniffe régulièrement la réponse