È possibile utilizzare la funzione srp() per un pacchetto ICMP di livello 3? Vedo che quando realizziamo un pacchetto di richiesta echo ICMP e usiamo sr() per inviare/ricevere, NON lo vediamo inviato dall'interfaccia, quindi nessuna risposta dalla destinazione. Ma lo stesso pacchetto se usiamo la funzione srp() vediamo la risposta. Quando dovremmo usare sr() e quando srp()? Nella documentazione si afferma che sr() deve essere usato per il pacchetto L3 e srp() da utilizzare per L2? Ma nel mio caso non sono sicuro del motivo per cui sr() non funzioni per un pacchetto ICMP? Alcuni esperti possono aiutarmi a capire?invio di pacchetti ICMP in scapy e scelta dell'interfaccia corretta
Inoltre, qualcuno può farmi sapere se l'argomento "iface" è sempre necessario. Senza questo, come farà lo scapy a sapere attraverso quale interfaccia si suppone che mandi il pacchetto?
Caso 1: la funzione sr() con iface come argomento:
sr(icmp,iface="eth0")
Begin emissione:
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>)
Soprattutto non vedo alcuna risposta ICMP dal IP 192.168.25.1
Caso 2: funzione sr() senza 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>)
Se si vede sopra i pacchetti ricevuti è più, ma non vedo alcuna risposta ICMP.
Caso 3: invio del pacchetto ICMP con SRP() invece di 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>)
Qui ho usato la funzione invece della funzione sr() SRP() e ora vedo che la richiesta echo ICMP è stata inviata correttamente e ho ricevuto anche la risposta.
>>> 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
>>>
Great Yoel. Ho creato un pacchetto ICMP senza dare l'Ether() e ho notato che sr() funziona come menzionato. Ho anche notato che la tabella di routing in Scapy era fuori sincrono. L'ho risincronizzato e ora stava prendendo l'uscita corretta iface per sr(). Grazie per la risposta immediata. – Pradeep