[ Home | Liste | F.A.Q. | Risorse | Cerca... ]


[ Data: precedente | successivo | indice ] [ Argomento: precedente | successivo | indice ]


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