Ich habe einen einfachen Paket-Sniffer mit Raw-Socket in Python erstellt.Python TCP Raw-Socket nicht auf Lo (localhost/127.0.0.1)
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP)
while True:
print s.recvfrom(1600)
Der Internetverkehr, den es zeigt. Aber wenn ich die primäre Netzwerkschnittstelle abschalten und syn-Pakete mit scapy über die Schnittstelle lo
(Quelle und Ziel 127.0.0.1) senden, wird nichts gedruckt.
Grundsätzlich erstelle und sende ich 10 syn-Pakete mit scapy, dessen Quelle und Ziel 127.0.0.1 ist, was in wireshark sichtbar ist. Aber nicht in diesem Sniffer. Ich dachte, es könnte ein Problem mit der Länge geben. Also setze ich die Puffergröße auf die Größe eines syn-Pakets, d. H. 74 (s.recvfrom(74)
), aber immer noch nichts. Sobald ich die primäre Netzwerkschnittstelle wieder einschalte, zeigt es den gesamten TCP-Verkehr an.
Ich muss die Netzwerkschnittstelle ausschalten, damit ich keinen anderen Verkehr als meinen eigenen erhalte.
Wo gehe ich falsch damit?
Da Ihr Level '0x000' ist, muss der Socket' 0x003' (ETH_ALL) erstellt werden. Aber eine Frage: "Wie bekomme ich ein Paket ohne Daten?" Und Sie müssen 'Loopback' hören, aber alles Paket gehört Ihnen nicht. Andere Pakete auf der Internetschnittstelle automatisch ignoriert, wenn das eingehende Paket nicht deins ist! – dsgdfg
Mit ETH_ALL nach der Antwort von @dsgdfg, erhält es den Ethernet-Header und es schnüffelt alle UDP-, ICMP-, TCP-Pakete. Was ich im "Loopback" sende, ist nur TCP. Also, wenn ich das hören will, was soll ich tun? – RatDon