Können wir die srp() -Funktion für ein Layer-3-ICMP-Paket verwenden? Ich sehe, dass wenn wir ein ICMP-Echo-Request-Paket erstellen und sr() zum Senden/Empfangen verwenden, wir es NICHT sehen, dass es aus der Schnittstelle gesendet wird, daher keine Antwort vom Ziel. Aber das gleiche Paket, wenn wir die srp() Funktion verwenden, sehen wir die Antwort. Wann sollten wir sr() und wann srp() verwenden? In der Dokumentation heißt es, sr() soll für L3-Paket und srp() für L2 verwendet werden? Aber in meinem Fall bin ich nicht sicher, warum sr() nicht für ein ICMP-Paket arbeitet? Können mir einige Experten helfen, das zu verstehen?Senden von ICMP-Paketen in scapy und Auswählen der richtigen Schnittstelle
Auch kann jemand mich wissen, ob "Iface" Argument immer benötigt wird. Ohne dass, wie wird scapy wissen durch welche Schnittstelle soll das Paket gesendet werden?
Fall 1: sr() Funktion mit iface als Argument:
sr(icmp,iface="eth0")
Begin Emission:
WARNING: Mac address to reach destination not found. Using broadcast.
Finished to send 1 packets.
^C
Received 0 packets, got 0 answers, remaining 1 packets
(<Results: TCP:0 UDP:0 ICMP:0 Other:0>, <Unanswered: TCP:0 UDP:0 ICMP:1 Other:0>)
Above ich sehe keine ICMP-Antwort von der IP 192.168.25.1
Fall 2: sr() Funktion ohne iface:
sr(icmp)
.Begin emission:
......WARNING: Mac address to reach destination not found. Using broadcast.
.Finished to send 1 packets.
...............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................^C
Received 887 packets, got 0 answers, remaining 1 packets
(<Results: TCP:0 UDP:0 ICMP:0 Other:0>, <Unanswered: TCP:0 UDP:0 ICMP:1 Other:0>)
Wenn Sie oben sehen, ist die empfangenen Pakete mehr, aber ich sehe keine ICMP-Antwort.
Fall 3: Senden der ICMP-Paket mit SRP() anstelle von sr():
srp(icmp,iface="eth0")
Begin emission:
Finished to send 1 packets.
*
Received 1 packets, got 1 answers, remaining 0 packets
(<Results: TCP:0 UDP:0 ICMP:1 Other:0>, <Unanswered: TCP:0 UDP:0 ICMP:0 Other:0>)
Hier verwendete ich die SRP() Funktion anstelle von Sr() Funktion und jetzt sehe ich, dass Die ICMP-Echo-Anfrage wurde korrekt gesendet und ich erhielt auch die Antwort.
>>> icmp.show2()
###[ Ethernet ]###
dst: 02:00:00:11:01:03
src: 02:00:20:ee:64:01
type: 0x800
###[ IP ]###
version: 4L
ihl: 5L
tos: 0x0
len: 28
id: 1
flags:
frag: 0L
ttl: 64
proto: icmp
chksum: 0xc78c
src: 192.168.25.2
dst: 192.168.25.1
\options\
###[ ICMP ]###
type: echo-request
code: 0
chksum: 0xf7ff
id: 0x0
seq: 0x0
>>>
Große Yoel. Ich habe ein ICMP-Paket erstellt, ohne den Ether() zu geben, und mir ist aufgefallen, dass sr() wie erwähnt funktioniert. Ich bemerkte auch, dass die Routing-Tabelle in Scapy nicht synchron war. Ich habe es wiedereingestellt und nun nahm es den richtigen Ausgang für sr(). Danke für Ihre schnelle Antwort. – Pradeep