Come posso inviare un pacchetto ARP da un programma C?
-
02-07-2019 - |
Domanda
Sto lavorando su un sistema Linux incorporato in C, sto cercando il codice sorgente per l'equivalente di SendARP in Windows. Qualche puntatore?
Soluzione
Dai un'occhiata a arping . Il modo rapido e sporco di inviare un arp sarebbe fare:
foo = system("/somepath/arping somehost");
Ma uno sguardo alla fonte arping dovrebbe essere in grado di darti una soluzione migliore.
Per la soluzione completa, tuttavia, puoi costruirne uno a mano e utilizzare un socket non elaborato o libpcap per inviarlo.
btw. Se tutto ciò che stai cercando di fare è forzare l'invio di un arp (ma necessariamente da parte tua), puoi farlo cancellando qualsiasi voce arp che hai già per il tuo host. Il prossimo accesso a quell'indirizzo richiederà l'invio di un arp.
ad es. / usr / sbin / arp -d destination_host_ip
Altri suggerimenti
Questo potrebbe essere di interesse: http://cvs.linux-ha.org/viewcvs/viewcvs.cgi/linux-ha/resources/heartbeat/SendArp.in?rev=1.4
È una implmenetation in uno script Bourne Shell.
Non ho mai visto nulla di specifico per ARP, ma penso che tu possa inviare qualsiasi tipo di pacchetto tu voglia usando libpcap e gli RFC appropriati.