Lorsque je me connecte à https://www.google.co.uk, cela passe à 216.58.198.228:443. Ensuite, une connexion avec moi s'ouvre sur [Mon adresse IP]: 63998.
Ma question est de savoir comment le port 63998 est choisi et existe-t-il un moyen de le forcer à être 63999.
networking
port
tcp
TheGathron
la source
la source
Réponses:
Comment les ports locaux sont-ils déterminés
Le numéro de port est choisi par le logiciel d'implémentation TCP à partir d'une gamme de numéros de port appelés ports éphémères .
Le mécanisme exact de choix du numéro de port et de la plage à utiliser dépend du système d'exploitation.
Existe-t-il un moyen de le forcer à 63999.
Cela peut être fait en modifiant la configuration du logiciel d'implémentation TCP.
Des instructions sur la configuration de la gamme de ports éphémères pour une variété de différents systèmes d'exploitation peuvent être trouvées dans Changer la gamme de ports éphémères .
Cependant, ce n'est pas une bonne idée de restreindre la plage à un seul port, par exemple
63999
.En fait, sur Windows, cela n'est pas possible car:
La gamme du port éphémère
Source La gamme du port éphémère
Modification de la plage de ports éphémères
Linux:
Windows Vista / Windows Server 2008 et plus récent:
Source Modification de la plage de ports éphémères
Source de l'article 929851 de la base de connaissances Microsoft :
Windows XP et versions antérieures:
Source Modification de la plage de ports éphémères
la source
bind
appel système avant d'appelerconnect
. Certaines applications ont une option pour le faire, d'autres non.La réponse de David Postill est parfaitement juste. Je voudrais juste ajouter quelque chose, en soulignant que changer la plage de ports éphémères sous Linux est si simple, que l'OP a une réponse affirmative.
Vous modifiez l'EPR comme suit:
et vous pouvez sélectionner le port 50000 (à titre d'exemple) avec le script suivant:
Une mise en garde ici: comme il n'y a qu'un seul port dans la plage, une autre application peut vous l'arracher entre l'exécution des troisième et quatrième lignes ci-dessus; aussi, même s'il n'y a pas de condition de concurrence, vous paralyserez toutes les autres applications jusqu'à ce que vous restauriez un grand EPR, c'est pourquoi j'ai restauré la gamme d'origine dès que possible.
Ainsi, si le système d'exploitation des PO avait été Linux, la réponse aurait été que cela aurait pu être fait facilement.
Étonnamment, ce n'est pas aussi simple sur les BSD, dont certains n'ont même pas de paramètre de noyau d'exécution pour l'EPR. MacOS X, FreeBSD et OpenBSD nécessitent de modifier le fichier /etc/sysctl.conf , mais ils ont des choix différents pour l'EPR.
Indépendamment de ce qui précède et de l'OS, le fait que quelque chose puisse être fait ne signifie pas que cela devrait être fait: pourquoi diable en avez-vous besoin? Je ne peux pas penser à un seul cas d'utilisation.
la source
BIND_PORT
facultatif, de sorte que le code puisse toujours être utilisé exactement de la même manière que l'original. Je pense quehtons(bind_port_env ? atoi(bind_port_env) : 0)
ferait la bonne chose.Il convient d'ajouter que le noyau Linux possède également
net.ipv4.ip_local_reserved_ports
bouton qui fait quelque peu l'opposé mais néanmoins il pourrait être très utile car de cette façon vous pouvez "percer un trou" pour les services qui ouvrent des ports spécifiques dans une gamme de ports autrement éphémère.
Bref extrait de la documentation :
la source