Sendet DHCP-Discover mit python-scapy
Ich bin neu in python und lernen Sie einige Netzwerk-Programmierung habe ich auf Wunsch senden ein DHCP-Paket durch mein tap-Schnittstelle zu meinem DHCP-server und erwartet, irgendeine Reaktion von ihm. Ich habe versucht, mit mehreren packet-building-Techniken, solche Strukturen und ctypes und endete mit scapy. Hier bin ich in der Lage zu senden DHCP-Paket aber nicht erhalten, keine Antwort vom DHCP-server(Analysiert mit wireshark und tcpdump)..Mein Paket aussah wie original-DHCP-Paket jedoch nicht, um eine Reaktion zu erhalten. Hier ist mein code
import socket
from scapy.all import *
def main():
if len(sys.argv)<3:
print " fewer arguments."
sys.exit(1)
else:
tap_interface = sys.argv[1]
src_mac_address = sys.argv[2]
ethernet = Ether(dst='ff:ff:ff:ff:ff:ff',src=src_mac_address,type=0x800)
ip = IP(src ='0.0.0.0',dst='255.255.255.255')
udp =UDP (sport=68,dport=67)
fam,hw = get_if_raw_hwaddr(tap_interface)
bootp = BOOTP(chaddr = hw, ciaddr = '0.0.0.0',xid = 0x01020304,flags= 1)
dhcp = DHCP(options=[("message-type","discover"),"end"])
packet = ethernet / ip / udp / bootp / dhcp
fd = open('/dev/net/tun','r+')
TUNSETIFF = 0x400454ca
IFF_TAP = 0x0002
IFF_NO_PI = 0x1000
mode = IFF_TAP | IFF_NO_PI
ifr = struct.pack('16sH', tap_interface, IFF_TAP | IFF_NO_PI)
fcntl.ioctl(fd,TUNSETIFF,ifr)
while True:
sendp(packet, iface = tap_interface)
time.sleep(10)
if __name__ == '__main__':
main()
Gibt es andere Wege, dies zu erreichen? Wenn ja, bitte erwähnen Sie tun als gut.
Vielen Dank im Voraus.
- was die Umsetzung Ihres dhcp-server?
- Ich habe einen virtuellen router, die Pflege der routing-bezogenen Aufgaben
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gelöst ! Ich hatte das gleiche problem,
Das problem denke ich war auf der srp () - Funktion, es können nicht empfangen Pakete auf port 68, aber ich habe eine neue Funktion mit einem neuen thread, schnuppert BOOTP-Nachrichten und zeigt die Paket-Felder.
Sie können simulieren :
dann senden Sie das Paket mithilfe von srp() oder sendp() func 🙂
HINWEIS:
Ich habe verwendet multithreading-Mechanismus dazu führen, dass mein Programm sendet Nachrichten und schnüffelt wenn einen rogue-DHCP-Server im Netzwerk
Ich bin nicht sicher, ob das gelten würde, als eine Antwort, aber wir verwenden scapy zu simulieren, DHCP server/client, exchange, und die folgenden für uns die Arbeit macht:
Den wichtigsten Unterschied zwischen meinem code und der deine zu sein scheinen, wie der BOOTP-header definiert ist. Vielleicht könnten Sie versuchen, mein Paket definition und sehen, ob es funktioniert?
Hier ist ein Beispiel, dass ich das getan bekommt eine dhcp-Adresse und weist ihm eine ip-Schnittstelle:
Meine grobe POC, während das erstellen von code für mein Projekt: