|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Futur Membre du Club
![]() mouloud jean Inscription : septembre 2010 Messages : 84 ![]() |
Bonjour,
Je veux programmer un mini shell pour gérer un connexion ftp active. J'ai un problème puisque pour envoyer le commande PORT il faut que je précise le numéro du port qui est le N+1 de celui qui a initié la connexion. Ma question est donc, comment connaitre le numéro de port du client qui a initié la connexion vers le port 21 du serveur ftp? Merci pour votre aide ! |
|
|
00
|
|
|
#2 |
![]() ![]() Chercheur d'emploi Inscription : septembre 2007 Messages : 4 610 ![]() |
Bonjour,
Je suppose que tu utilises les sockets BSD habituels. Lorsque tu fais appel à accept(), tu peux lui passer deux arguments addr et addrlen, qui sont respectivement un pointeur vers une structure sockaddr et la taille de cette structure (pour éviter les dépassements de buffer). S'ils sont correctement renseignés, l'appel système en question y déposera l'adresse de ton correspondant, port compris. |
|
|
00
|
|
|
#3 |
|
Futur Membre du Club
![]() mouloud jean Inscription : septembre 2010 Messages : 84 ![]() |
Bonjour et merci pour votre réponse,
Je ne veux pas l'addresse de mon correspondant mais bien la mienne avec le port que j'utilise ! |
|
|
00
|
|
|
#4 |
![]() ![]() Chercheur d'emploi Inscription : septembre 2007 Messages : 4 610 ![]() |
Si ce que tu veux connaître, c'est le port local à ta machine et que le client atteint, c'est que tu es déjà à l'écoute d'une connexion entrante et, pour cela, tu as dû au préalable appeler bind() pour associer ton socket tout neuf à l'adresse que tu veux écouter, avant d'appeler listen().
C'est cette adresse qu'il faut examiner. Donc, si tu es à l'écoute de plusieurs ports à la fois (ce qui est peu probable), tu commences par identifier le socket concerné (renvoyé par select() ou poll()) et, de là, tu retrouves l'adresse que tu as utilisé avec bind(). |
|
|
00
|
|
|
#5 |
|
Membre éprouvé
![]() Cyrill GremaudIngénieur systèmes et réseaux Inscription : août 2005 Messages : 1 031 ![]() |
Salut.
As-tu un bout de code à nous montrer ? Au moment de la création de ton socket d'écoute ainsi que du bind ? merci
__________________
Il y a 10 types de personnes sur la planète. Ceux qui comprennent le binaire et ceux qui ne le comprennent pas... |
|
|
00
|
|
|
#6 |
|
Expert Confirmé Sénior
![]() |
Si tu veux savoir après la connexion pour quelque raison que ce soit, tu peux utiliser getsockname() pour les infos locales et getpeername() pour les infos distantes.
__________________
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant. "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?" Apparently everyone. -- Raymond Chen. Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen. |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com