Re: [HS] Adresse IP
On Mon, Apr 04, 2005 at 01:59:38PM +0200, François Boisson wrote:
> Le Mon, 4 Apr 2005 12:04:01 +0200
> Jean-Michel OLTRA <jm.oltra.antispam@espinasse.net> a écrit:
>
> >
> > bonjour,
> >
> >
> > Le lundi 04 avril 2005, François Boisson a écrit...
> >
> >
> > > Un truc idiot en C, je crée une socket UDP qui envoit des paquets à
> > > une machine donnée. Je cherche l'adresse IP sous laquelle
> > > j'apparaitrais à la cible (en clair l'adresse IP d'où proviendra le
> > > paquet que la machine recevra si on suppose l'absence de NAT bien
> > > sûr). Un getsockname me renvoit 0.0.0.0 (IPPADR_ANY en fait).
> > > Y-a-t-il une méthode simple, ça me parait tout bête mais je n'ai
> > > rien trouvé dans mon pavé de référence ("Programmation système en C
> > > sous linux" par Christophe Blaess).
> >
> > getpeername() ??
> >
>
> Non getpeername donne des renseignements sur la machine à l'autre bout
> (B dans ci dessous alors que je veux A): Je vais être plus clair:
>
> Une socket sur A envoit des paquets vers B, comment le programme en A
> peut-il connaitre l'IP sous laquelle il envoit les paquets (l'IP de la
> machine A donc). Si il y a plusieurs cartes réseaux, le pbm n'est pas si
> simple, je pensais qu'un getsockname juste après un envoi de paquet
> renverrait les informations mais non, ça ne permet de connaitre que le
> numéro de port utilisé...
Ça ne marche pas si tu fais un connect(2) sur B avant un
getsockname? Je crois qu'il n'y même pas besoin faire un
send/sendto/sendmsg avant.
Ça devrait si je comprends le code du noyau qui passe par
net/ipv4/af_inet.c:inet_dgram_connect. Tu peux désassocier
ton socket si tu veux en faisant un connect(2) à un socket
de famille AF_UNSPEC.
Gabriel
Reply to: