
[ Home | Liste | F.A.Q. |
Risorse | Cerca... ]
Archivio: devel@sikurezza.org Soggetto: [devel] Modificare l'arp cache Mittente: denote23@xxxxxxxxx Data: Tue, 11 May 2010 19:17:17 +0200 (CEST)
Salve a tutti
Ho un problema. Ho bisogno di poter modificare la cache arp di una macchina
ubuntu
vi volevo chiedere una cosetta che mi è capitata che non riesco a risolvere
io utilizzo le libnetlink per aggiungere una voce arp alla cache.
La voce da aggiugere è questa (192.168.35.12 00:12:0C:34:23:01)
L'indirizzo ip di questa macchina non esiste ma non è di fondamentale
importanza per il mio problema.
inserisco questa voce con il codice che ho scritto (allegato sotto) e
successivamente con il
comando ip neigh visualizzo
192.168.35.12 dev eth1 lladdr 00:12:0C:34:23:01 nud reachable
mentre con il comando arp -an non compare la voce e neanche in /proc/net/arp
quando faccio un ping a 192.168.35.12 io mi aspetto che il kernel non faccia
la risoluzione arp poiché teoricamente
la voce è inserita in cache e quindi dovrebbe essere conosciuta quella
destinazione
invece succede che questa voce è come se la ignorasse. infatti parte il
protocollo arp per cercare quella macchina
dopo il ping ottengo a 192.168.35.12 (che ricordo essere inesistente) ho:
>
>192.168.35.12 dev eth1 lladdr 00:12:0C:34:23:01 nud reachable
>192.168.35.12 dev eth1 nud failed
>
>
>con arp -an
>
>? (192.168.35.12) at <incomplete> on eth1
>
>Adesso incomplete compare perche la macchina è irragiungibile ma il fatto
>strano che adesso su arp -an mi compare una voce
e in ip neigh me ne accoda una duplicata con lo stesso indirizzo ip.
>
Quello che volevo fare io era con il mio codice inserire una voce arp e
quando
faccio il ping deve tenere subito in considerazione la voce aggiunta me
Grazie mille.
>------
>Questo è il codice che uso:
>
>char *iface="eth1";
>
> struct rtnl_handle rth;
> struct {
> struct nlmsghdr n;
> struct ndmsg ndm;
> char buf[256];
> } req;
>
> inet_prefix dst;
>
>
> memset(&req, 0, sizeof(req));
>
> req.n.nlmsg_len = NLMSG_LENGTH(sizeof(struct ndmsg));
> req.n.nlmsg_flags = NLM_F_REQUEST | NLM_F_CREATE| NLM_F_REPLACE;
> req.n.nlmsg_type = RTM_NEWNEIGH;
> req.ndm.ndm_family = AF_INET;
>
>
>
> req.ndm.ndm_state = NUD_REACHABLE;
>
> /* add the IP */
>
> get_addr(&dst, "192.168.35.12", AF_INET);
> addattr_l(&req.n, sizeof(req), NDA_DST, &dst.data, dst.bytelen);
>
> /* add the link layer address */
>
> addattr_l(&req.n, sizeof(req), NDA_LLADDR, "00:12:0C:34:23:01",
LL_ADDR_LEN);
> /* find the iface index */
> //if ((req.ndm.ndm_ifindex = ll_name_to_index("eth1")) == 0)
> // printf("ll_name_to_index()\n");
>
> req.ndm.ndm_ifindex = 2;
> /* open the netlink socket */
>
> if (rtnl_open(&rth, 0) < 0)
> printf("Cannot open rtnl_open()");
>
> ll_init_map(&rth);
>
>
> /* send data */
>
> if (rtnl_talk(&rth, &req.n, 0, 0, NULL, NULL, NULL) < 0)
> printf("rtnl_talk()\n");
>
> return 0;
[ Home | Liste | F.A.Q. |
Risorse | Cerca... ]
www.sikurezza.org - Italian Security Mailing List
(c) 1999-2005