[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: