J'ai corrig les bugs qui fesaient plant le script dhcp-connect.
Mais je ne sais pas comment le test... en fait, je ne sais pas si je peux installer dhcp-server sur egon ? (a va rien cass ?) darcs-hash:20061117203342-f46e9-fbdeb5ef9e713501ffc2106b3ad84519d6990b56.gz
This commit is contained in:
parent
4f3b212b2d
commit
37473f566d
1 changed files with 28 additions and 23 deletions
|
@ -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) <bernat@crans.org>", "Disconnect team <disconnect@crans.org>")
|
||||
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) <bernat@crans.org>", "Disconnect team <disconnect@crans.org>")
|
||||
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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue