Précédent   Forum du club des développeurs et IT Pro > C et C++ > C > Réseau
Réseau Forum d'entraide sur la programmation réseau en C
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 24/11/2012, 17h34   #1
hazaki
Futur Membre du Club
 
mouloud jean
Inscription : septembre 2010
Messages : 84
Détails du profil
Informations personnelles :
Nom : mouloud jean

Informations forums :
Inscription : septembre 2010
Messages : 84
Points : 16
Points : 16
Par défaut Connaitre le numéro de port Client connecté au port 21 du FTP

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 !
hazaki est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2012, 22h13   #2
Obsidian
Modérateur
 
Avatar de Obsidian
 
Homme
Chercheur d'emploi
Inscription : septembre 2007
Messages : 4 610
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 36
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Chercheur d'emploi
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2007
Messages : 4 610
Points : 11 065
Points : 11 065
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.
Obsidian est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2012, 22h54   #3
hazaki
Futur Membre du Club
 
mouloud jean
Inscription : septembre 2010
Messages : 84
Détails du profil
Informations personnelles :
Nom : mouloud jean

Informations forums :
Inscription : septembre 2010
Messages : 84
Points : 16
Points : 16
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 !
hazaki est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2012, 01h58   #4
Obsidian
Modérateur
 
Avatar de Obsidian
 
Homme
Chercheur d'emploi
Inscription : septembre 2007
Messages : 4 610
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 36
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Chercheur d'emploi
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2007
Messages : 4 610
Points : 11 065
Points : 11 065
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().
Obsidian est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2012, 13h40   #5
cyrill.gremaud
Membre éprouvé
 
Homme Cyrill Gremaud
Ingénieur systèmes et réseaux
Inscription : août 2005
Messages : 1 031
Détails du profil
Informations personnelles :
Nom : Homme Cyrill Gremaud
Âge : 24
Localisation : Suisse

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Enseignement

Informations forums :
Inscription : août 2005
Messages : 1 031
Points : 459
Points : 459
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...
cyrill.gremaud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2012, 17h22   #6
Médinoc
Expert Confirmé Sénior
 
Avatar de Médinoc
 
Homme
Développeur informatique
Inscription : septembre 2005
Messages : 22 380
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2005
Messages : 22 380
Points : 32 012
Points : 32 012
Envoyer un message via MSN à Médinoc
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.
Médinoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 14h02.


 
 
 
 
Partenaires

Hébergement Web