IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseaux Discussion :

Problème NAT et numéro de Port Externe


Sujet :

Réseaux

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 36
    Points : 22
    Points
    22
    Par défaut Problème NAT et numéro de Port Externe
    Bonjour à tous,

    Mon problème porte sur une règle NAT et de numéros de port, pour connaitre son IP et le port utilisé pour une connexion.

    Avant de commencer, j'espère avoir posté au bon endroit, autrement j'en appelle aux modérateur pour le mettre à un endroit plus approprié. Merci !

    J'ai sur mon routeur la règle NAT suivante :
    Port externe 12345, interne 12345, IP locale : 192.168.1.10 protocoles : TCP et UDP
    Et associé à une règle DHPC pour mon PC sur cette IP 192.168.1.10
    La règle fonctionne bien car je l'ai déjà utilisé pour d'autres transferts.

    J'ai de plus écrit une page PHP sur un serveur mutualisé qui m'affiche mon IP et mon numéro de port.
    J'ai ensuite écrit un programme (en C) utilisant des sockets TCP pour réaliser une requête HTML sur cette page PHP.
    Le but est de trouver son IP et le port utilisé en sortie de routeur.
    Tout fonctionne bien dans la forme, mais dans le fond quelque chose cloche...

    Je voulais déjà vérifier un point :
    Coté PHP, j'utilise $_SERVER['REMOTE_PORT'] pour connaitre mon port publique (i.e. le port extérieur de mon routeur).
    Est bien la bonne méthode, et ceci me renvoi-t-il bien le port externe au router utilisé par la connexion TCP ?

    Maintenant le problème :
    Concernant l'IP, récupérée avec $_SERVER['REMOTE_IP'], pas de soucis.
    Mais le numéro de port parait inexact : en effet si je lis ma socket TCP au port 12345 de mon PC, alors la règle NAT devra faire passer la connexion par le port externe 12345. Or la page PHP me retourne un numéro radicalement différent (et changeant à chaque test).

    Donc autre question :
    La règle NAT peut-elle s'appliquer dans le sens sortant ?

    Bref pour conclure je précise que mon but est que, bien sûr, dans ce cas-là, la page PHP me retourne 12345.

    Voilà tout et merci par avance pour vos réponses et pour m'avoir lu jusqu'au bout.

  2. #2
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 193
    Points : 28 077
    Points
    28 077
    Par défaut
    Pour la partie PHP je ne saurais pas répondre, à voir peut-être dans le forum PHP

    Pour ce qui est de la requete NAT elle ne s'applique qu'aux connexions entrantes. Ta règle NAT telle que tu la configurée signifie pour le routeur "Toute demande de connexion que je reçois depuis l'extérieur sur mon port externe 12345, je dois le redirigé sur le réseau interne, sur le port 12345 de la machine 192.168.1.10".

    Pour ce qui est du n° de port que tu lis avec ta page php, c'est normal qu'il soit différent et qu'il change. Le port de sortie d'une connexion internet est choisi arbitrairement par la couche du client de façon (réputée) aléatoire parmi les ports disponibles >1024.
    C'est réputé aléatoire, mais ça ne l'est pas vraiment.
    Pour un process donné, le port de la première connexion sera choisit aléatoirement parmi les ports disponibles (les ports déjà utilisés dans les minutes qui précèdent, même par un autre process, seront, si possible exclus).
    Tant que la connexion n'est pas fermée c'est toujours le même port qui est utilisé.
    Si la connexion est fermée, la connexion suivante sera généralement ouverte sur le port N+1 si celui-ci est libre, ce, tant que le process n'est pas lui-même arrêté.
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 36
    Points : 22
    Points
    22
    Par défaut
    Bon forcément si la règle NAT ne s'applique pas, c'est normal que j'ai des numéros de port variable...
    Autre question : j'ai pus noter avec les quelques box d'opérateurs différents que si on lance un programme (la première fois, ie sans avoir lancé avant) sur le port local mettons 65535, la box a l'air de le rediriger vers son port externe 65535.
    Et si je relance ensuite rapidement le programme, le port externe est "proche" : par exemple j'avais eu le port 1024 (qui est le suivant, au final, ceux d'avant étant inaccessible dans ce cas là). Est ce sur cette constatation totalement expérimentale est stupide ?
    Autre question : peut on faire un netstat (ou équivalant) sur le routeur directement, histoire de voir les port ouvert ? A défaut peut on voir la liste des port ouvert ? Sinon est ce que faire un scan de port est illégal et peut on faire une sorte d'auto scan de port (ie scanner les port de sa propre box) ?
    Peut on connaitre le timeout d'une "règle NAT temporaire" (exemple établie lors d'une connexion TCP)
    Est ce que si j'initie une connexion TCP et une UDP (deux sockets, en fait) sur un même port de mon PC, les deux connexions passeront t'elle forcément par le même port externe de la box ? (répondu dans l'EDIT)

    Voilà tout !

    J'ai rarement l'habitude de poster sur le net donc j'avais déjà bien cherché, mais impossible de savoir !

    Merci pour tes réponses actuelles et futures !!

    EDIT : ma dernière question est inutile : j'ai fait le test est la réponse est non, les port de sortie ne sont pas les même, même si les deux sockets sont sur le même port. Voilà si jamais ça intéresse quelqu'un !

  4. #4
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 193
    Points : 28 077
    Points
    28 077
    Par défaut
    Citation Envoyé par lapotose Voir le message
    Autre question : j'ai pus noter avec les quelques box d'opérateurs différents que si on lance un programme (la première fois, ie sans avoir lancé avant) sur le port local mettons 65535, la box a l'air de le rediriger vers son port externe 65535.
    Et si je relance ensuite rapidement le programme, le port externe est "proche" : par exemple j'avais eu le port 1024 (qui est le suivant, au final, ceux d'avant étant inaccessible dans ce cas là). Est ce sur cette constatation totalement expérimentale est stupide ?
    expérimentale, oui. Stupide, non. Mais d'une quelconque valeur technique, aucune.
    Cela dépend de l'algorithme que le fabricant a intégré dans sa box et de l'utilisation à l'instant t.
    Car effectivement, peut-être que pour le fabricant ça lui simplifie la table de translation de faire correspondre le port de sortie avec celui de la machine, mais ce n'est, de toute façon, sue "dans la mesure du possible".
    Si une machine A sort sur le port X, le routeur, pour faire simple, va aussi sortir sur le port X. Cependant, le coup suivant, la machine A va sortir sur le port X+1, mais niveau routeur, le port X+1 aura peut-être été utilisé pour faire sortir le paquet d'une machine B ou C du même réseau. Il faudra donc qu'il en choisisse un autre et la correspondance apparente n'existera plus.


    Citation Envoyé par lapotose Voir le message
    peut on faire un netstat (ou équivalant) sur le routeur directement, histoire de voir les port ouvert ? A défaut peut on voir la liste des port ouvert ?
    Sur un routeur administrable qui a prévu cette fonctionnalité, oui, sur une box d'opérateur, très peu probable. Elles sont généralement fermée, et très peu administrable.

    Citation Envoyé par lapotose Voir le message
    Sinon est ce que faire un scan de port est illégal
    Non à partir du moment ou le responsable et propriétaire de la connexion internet a donné son accord. Donc si toi tu es d'accord, pour que tu fasse un scan de ta connexion, il n'y a pas de problème.

    Citation Envoyé par lapotose Voir le message
    Est ce que si j'initie une connexion TCP et une UDP (deux sockets, en fait) sur un même port de mon PC, les deux connexions passeront t'elle forcément par le même port externe de la box ? (répondu dans l'EDIT)
    EDIT : ma dernière question est inutile : j'ai fait le test est la réponse est non, les port de sortie ne sont pas les même, même si les deux sockets sont sur le même port. Voilà si jamais ça intéresse quelqu'un !
    La réponse exacte est pas obligatoirement. Elles peuvent très bien passer par le même port, mais pour les raisons dites précédemment il est bien plus probable qu'au final ça se fasse sur des ports différents.
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 36
    Points : 22
    Points
    22
    Par défaut
    Ok très bien tout cela me confirme (hélas!) ce que je pensais.
    Bon alors encore une question (encore merci pour tes réponses !) :
    Mon soucis est que je veux utiliser une connexion UDP entre deux PC distants : pour cela je peux d'abord échanger les IP des deux PC (éventuellement au moyen d'un serveur intermédiaire, mais là n'est pas mon soucis)
    Puis il me faut les numéros des ports externes utilisés par chacun des routers. Mais pour ça je ne vois pas comment faire : ma première possibilité qui as loupé était justement d'utiliser une double connexion TCP/UDP passant par le même port, la connexion TCP me permettant de faire une requête HTML vers un serveur qui l'inscrivait dans une base de données, ce qui permettait à l'autre PC de récupérer ce fameux numéro de port (en la demandant au serveur) et de pourvoir envoyer des paquets UDP au bon port (qui etait donc apte a recevoir aussi de l'UDP).

    Voilà ce qui explique toutes mes questions précédentes !

    De plus, pour éviter tout ce bazar de double connexion TCP/UDP, j'ai essayé de trouver un moyen d'ouvrir sur un serveur un port (et une socket) UDP, pour pouvoir envoyer directement un paquet UDP au serveur et qui enregistrerais le port utilisé par la connexion UDP (et non TCP comme précédemment), pour que ensuite comme avant l'autre PC puisse avoir le bon port de destination...
    Mais impossible de trouver ! Il semble que cette possibilité est désactivee pour des raisons de sécurité. Soit dis en passant, je suis sur un serveur mutualisé gratuit... Mais je ne veux pas payer pour echanger deux pauvres numéros de port, tout ça pour une application de débutant, et non fondamentale...

    J'espère être clair, mais ce n'est pas sûr du tout ! D'autant qu'il me semble que cette façon de faire n'est pas très orthodoxe !

    D'ailleurs, comment font les autres soft de P2P ? j'ai entendu parler du protocole UPnP qui permettrai de créer des règles NAT depuis un PC du réseau privé : c'est bien cela, et comment ca marche ? J'ai eu l'impression que c'est une usine à gaz ! (c'est d'ailleurs ce qui me rebute a l'utiliser ! d'autant que on peux le désactiver sur les box, et que c'est presque recommandé, apparemment)

    Bref, pour revenir a mon problème initial, c'est la "découverte" des ports qui me posent vraiment problème...

    Voilà tout, et merci pour ton aide !!

  6. #6
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Salut,

    Citation Envoyé par lapotose Voir le message
    Autre question : peut on faire un netstat (ou équivalant) sur le routeur directement, histoire de voir les port ouvert ? A défaut peut on voir la liste des port ouvert ? Sinon est ce que faire un scan de port est illégal et peut on faire une sorte d'auto scan de port (ie scanner les port de sa propre box) ?
    Citation Envoyé par sevyc64 Voir le message
    Non à partir du moment ou le responsable et propriétaire de la connexion internet a donné son accord. Donc si toi tu es d'accord, pour que tu fasse un scan de ta connexion, il n'y a pas de problème.
    Merci...

    Ben justement dans ce fil : les adresses IP internes/privées je me posais la question de savoir comment certains sites pouvaient connaitre notre adresse IP interne/privé et le port utilisé... Bon qu'ils puissent connaitre notre adresse IP publique ça c'est ok mais je pensais que notre adresse IP interne/privée et le port utilisé étaient cachés, non visibles à l'extérieur...

    Mais en vous lisant je vois qu'il y a apparemment des logiciels qui permettent de faire ça, genre ces logiciels scannent tous les ports un par un, c'est ça ? Mais pour l’adresse IP interne/privée je ne sais toujours pas comment ils font...

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/11/2015, 06h57
  2. Problème de numéro du port com
    Par bm1990 dans le forum Composants VCL
    Réponses: 3
    Dernier message: 02/04/2012, 17h03
  3. Changement de numéro de port
    Par romdelf dans le forum Websphere
    Réponses: 8
    Dernier message: 16/11/2005, 17h35
  4. courant sur port extern
    Par bobymaw dans le forum C++Builder
    Réponses: 16
    Dernier message: 06/05/2004, 13h16
  5. Connexion au serveur Interbase + Numéro de port
    Par SkyDev dans le forum InterBase
    Réponses: 5
    Dernier message: 03/05/2004, 13h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo