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).
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).
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).
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() ??
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() ??
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() ??
[...]
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é...
[...]
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é...
[...]
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é...
Si tu ne spécifie pas l'IP de la socket, les paquets UDP sont envoyés
sur toutes les IP de la machine A (d'où le any). C'est ensuite au
niveau IP(le niveau sous UDP) que les paquets sont routés.
Je pense que ce que tu voudrais, c'est que le noyau t'informe de
l'interface/IP qui a servi à envoyer ce paquet.
Mais ce paquet est déjà parti !
Il faudrait :
1/ soit que la socket soit modifiée (plus en any)
2/ soit que les infos de routage remontent dans le paquet.
Pour le 1/, tu peux envoyer d'autres paquets par cette socket mais
vers n'importe quelle autre adresse (d'où le any). La socket n'est pas
modifiée(elle reste en any).
Pour le 2/, ben je ne connais pas par c_ur toutes les fonctions C sur
les paquets UDP mais il ne me semble pas que cela soit possible (en
tout cas les infos ne sont pas dans la socket).
Une solution, c'est que le receveur de ton paquet UDP te renvoie ton
adresse dans sa réponse.
Ou bien tu recherches le nom de la machine
sur laquelle tu travailles.
Mes 2 ¢,
Si tu ne spécifie pas l'IP de la socket, les paquets UDP sont envoyés
sur toutes les IP de la machine A (d'où le any). C'est ensuite au
niveau IP(le niveau sous UDP) que les paquets sont routés.
Je pense que ce que tu voudrais, c'est que le noyau t'informe de
l'interface/IP qui a servi à envoyer ce paquet.
Mais ce paquet est déjà parti !
Il faudrait :
1/ soit que la socket soit modifiée (plus en any)
2/ soit que les infos de routage remontent dans le paquet.
Pour le 1/, tu peux envoyer d'autres paquets par cette socket mais
vers n'importe quelle autre adresse (d'où le any). La socket n'est pas
modifiée(elle reste en any).
Pour le 2/, ben je ne connais pas par c_ur toutes les fonctions C sur
les paquets UDP mais il ne me semble pas que cela soit possible (en
tout cas les infos ne sont pas dans la socket).
Une solution, c'est que le receveur de ton paquet UDP te renvoie ton
adresse dans sa réponse.
Ou bien tu recherches le nom de la machine
sur laquelle tu travailles.
Mes 2 ¢,
Si tu ne spécifie pas l'IP de la socket, les paquets UDP sont envoyés
sur toutes les IP de la machine A (d'où le any). C'est ensuite au
niveau IP(le niveau sous UDP) que les paquets sont routés.
Je pense que ce que tu voudrais, c'est que le noyau t'informe de
l'interface/IP qui a servi à envoyer ce paquet.
Mais ce paquet est déjà parti !
Il faudrait :
1/ soit que la socket soit modifiée (plus en any)
2/ soit que les infos de routage remontent dans le paquet.
Pour le 1/, tu peux envoyer d'autres paquets par cette socket mais
vers n'importe quelle autre adresse (d'où le any). La socket n'est pas
modifiée(elle reste en any).
Pour le 2/, ben je ne connais pas par c_ur toutes les fonctions C sur
les paquets UDP mais il ne me semble pas que cela soit possible (en
tout cas les infos ne sont pas dans la socket).
Une solution, c'est que le receveur de ton paquet UDP te renvoie ton
adresse dans sa réponse.
Ou bien tu recherches le nom de la machine
sur laquelle tu travailles.
Mes 2 ¢,
> 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é...
Pour le 2/, ben je ne connais pas par c½ur toutes les fonctions C sur les
paquets UDP mais il ne me semble pas que cela soit possible (en tout cas
les infos ne sont pas dans la socket).
> 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é...
Pour le 2/, ben je ne connais pas par c½ur toutes les fonctions C sur les
paquets UDP mais il ne me semble pas que cela soit possible (en tout cas
les infos ne sont pas dans la socket).
> 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é...
Pour le 2/, ben je ne connais pas par c½ur toutes les fonctions C sur les
paquets UDP mais il ne me semble pas que cela soit possible (en tout cas
les infos ne sont pas dans la socket).
Le Mon, 4 Apr 2005 15:11:42 +0200
Sylvain Sauvage a écrit:Il faudrait :
1/ soit que la socket soit modifiée (plus en any)
Préciser l'IP de départ dans ce cas, c'est ça?
Une solution, c'est que le receveur de ton paquet UDP te renvoie ton
adresse dans sa réponse.
Exclus dans mon cas :(
Mes 2 ¢,
Je vois souvent ça mais je n'ai jamais osé demander, ça veut dire quoi
exactement?
Le Mon, 4 Apr 2005 15:11:42 +0200
Sylvain Sauvage <Sylvain.Sauvage@metanoesis.net> a écrit:
Il faudrait :
1/ soit que la socket soit modifiée (plus en any)
Préciser l'IP de départ dans ce cas, c'est ça?
Une solution, c'est que le receveur de ton paquet UDP te renvoie ton
adresse dans sa réponse.
Exclus dans mon cas :(
Mes 2 ¢,
Je vois souvent ça mais je n'ai jamais osé demander, ça veut dire quoi
exactement?
Le Mon, 4 Apr 2005 15:11:42 +0200
Sylvain Sauvage a écrit:Il faudrait :
1/ soit que la socket soit modifiée (plus en any)
Préciser l'IP de départ dans ce cas, c'est ça?
Une solution, c'est que le receveur de ton paquet UDP te renvoie ton
adresse dans sa réponse.
Exclus dans mon cas :(
Mes 2 ¢,
Je vois souvent ça mais je n'ai jamais osé demander, ça veut dire quoi
exactement?
Le Mon, 4 Apr 2005 12:04:01 +0200
Jean-Michel OLTRA 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é...
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é...
Le Mon, 4 Apr 2005 12:04:01 +0200
Jean-Michel OLTRA 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é...
Le 12877ième jour après Epoch,
François Boisson écrivait:
> Le Mon, 4 Apr 2005 15:11:42 +0200
> Sylvain Sauvage a écrit:
[...]
>> Mes 2 ¢,
>
> Je vois souvent ça mais je n'ai jamais osé demander, ça veut dire quoi
> exactement?
Ça doit probablement venir de l'expression "Une réponse à 2 balles"
.... Ça signifie une réponse qui vaut pas plus cher que ça ;)
Mes 2 ¢
Le 12877ième jour après Epoch,
François Boisson écrivait:
> Le Mon, 4 Apr 2005 15:11:42 +0200
> Sylvain Sauvage <Sylvain.Sauvage@metanoesis.net> a écrit:
[...]
>> Mes 2 ¢,
>
> Je vois souvent ça mais je n'ai jamais osé demander, ça veut dire quoi
> exactement?
Ça doit probablement venir de l'expression "Une réponse à 2 balles"
.... Ça signifie une réponse qui vaut pas plus cher que ça ;)
Mes 2 ¢
Le 12877ième jour après Epoch,
François Boisson écrivait:
> Le Mon, 4 Apr 2005 15:11:42 +0200
> Sylvain Sauvage a écrit:
[...]
>> Mes 2 ¢,
>
> Je vois souvent ça mais je n'ai jamais osé demander, ça veut dire quoi
> exactement?
Ça doit probablement venir de l'expression "Une réponse à 2 balles"
.... Ça signifie une réponse qui vaut pas plus cher que ça ;)
Mes 2 ¢
Ç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.
Ç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.
Ç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.
Voilà, mes 2 ¢ ;o)
...ou comment faire du HS dans un fil déjà marqué HS
Voilà, mes 2 ¢ ;o)
...ou comment faire du HS dans un fil déjà marqué HS
Voilà, mes 2 ¢ ;o)
...ou comment faire du HS dans un fil déjà marqué HS