Modificare l'arp cache

"[email protected]" <[email protected]> Tue, 11 May 2010 19:17:12 +0200 (CEST)
Newsgroups gmane.comp.security.italian.devel
Message-ID <22758337.47501273598232277.JavaMail.defaultUser@defaultHost>
--===============1879032728==
Content-Type: text/plain;charset="UTF-8"
Content-Transfer-Encoding: quoted-printable


Salve a tutti


Ho un problema. Ho bisogno di poter modificare la cache arp di una macchina=
=20
ubuntu

vi volevo chiedere una cosetta che mi =C3=A8 capitata che non riesco a riso=
lvere

io utilizzo le libnetlink per aggiungere una voce arp alla cache.
La voce da aggiugere =C3=A8  questa (192.168.35.12  00:12:0C:34:23:01)
L'indirizzo ip di questa macchina non esiste ma non =C3=A8 di fondamentale=
=20
importanza per il mio problema.
inserisco questa voce con il codice che ho scritto (allegato sotto) e=20
successivamente con il=20
comando ip neigh visualizzo=20

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/a=
rp


quando faccio un ping a 192.168.35.12 io mi aspetto che il kernel non facci=
a=20
la risoluzione arp poich=C3=A9 teoricamente=20
la voce =C3=A8 inserita in cache e quindi dovrebbe essere conosciuta quella=
=20
destinazione=20
invece succede che questa voce =C3=A8 come se la ignorasse. infatti parte i=
l=20
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 =C3=A8 irragiungibile ma il f=
atto=20
>strano che adesso su arp -an mi compare una voce=20
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=20
quando=20
faccio il ping deve tenere subito in considerazione la voce aggiunta me


Grazie mille.


>------
>Questo =C3=A8 il codice che uso:
>
>char *iface=3D"eth1";
>=09
>=09struct rtnl_handle rth;
>=09struct {
>=09=09struct nlmsghdr =09n;
>=09=09struct ndmsg =09=09ndm;
>=09=09char   =09=09=09buf[256];
>=09} req;
>  =20
>=09inet_prefix dst;
>=09
>
>=09memset(&req, 0, sizeof(req));
>
>=09req.n.nlmsg_len =3D NLMSG_LENGTH(sizeof(struct ndmsg));
>=09req.n.nlmsg_flags =3D NLM_F_REQUEST | NLM_F_CREATE| NLM_F_REPLACE;
>=09req.n.nlmsg_type =3D RTM_NEWNEIGH;
>=09req.ndm.ndm_family =3D AF_INET;
>=09
>=20
>  =20
>   req.ndm.ndm_state =3D NUD_REACHABLE;
>
>   /* add the IP */
>  =20
>   get_addr(&dst, "192.168.35.12", AF_INET);
>=09addattr_l(&req.n, sizeof(req), NDA_DST, &dst.data, dst.bytelen);
>
>   /* add the link layer address */
>  =20
>=09addattr_l(&req.n, sizeof(req), NDA_LLADDR, "00:12:0C:34:23:01",=20
LL_ADDR_LEN);
>   /* find the iface index */
>   //if ((req.ndm.ndm_ifindex =3D ll_name_to_index("eth1")) =3D=3D 0)=20
>=09//    printf("ll_name_to_index()\n");
>
>   req.ndm.ndm_ifindex =3D 2;
>   /* open the netlink socket */
>
>=09if (rtnl_open(&rth, 0) < 0)
>=09  =09=09printf("Cannot open rtnl_open()");
>
>=09ll_init_map(&rth);
>
> =20
>   /* send data */
>  =20
>=09if (rtnl_talk(&rth, &req.n, 0, 0, NULL, NULL, NULL) < 0)
>=09  =09printf("rtnl_talk()\n");
>=20
>   return 0;



--===============1879032728==
Content-Type: text/plain; charset="iso-8859-1"
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline

________________________________________________________
http://www.sikurezza.org - Italian Security Mailing List
--===============1879032728==--