La Fibre

Télécom => Réseau => reseau TCP/IP / Fonctionnement des réseaux => Discussion démarrée par: vivien le 26 décembre 2015 à 12:46:47

Titre: Plage de ports dynamique du protocole TCP
Posté par: vivien le 26 décembre 2015 à 12:46:47
Les ports "clients" pour une connexion UDP ou TCP sont appelés "ports éphémères" (c'est le nom canonique bien que parfois on croise "ports dynamiques" et "ports de retour").

Les ports clients sont normalement dans la plage suivante :
- Windows 2000 / XP (sortie en 2001) : du port 1025 au port 5000
- Windows modernes (à partir de 2007) : du port 49152 au port 65535
- Linux avant 2001 (noyaux 2.2.x) : du port 1024 au port 4999
- Linux à partir de 2001 (noyaux 2.4.x à 3.13) : du port 32768 au port 61000
- Linux à partir de 2015 (noyaux 3.19 et suivants) : du port 32768 au port 60999
- MacOS X / FreeBSD modernes : du port 49152 au port 65535

Si le port utilisé n'est pas dans cette plage et que vous n'avez pas modifié votre système d'exploitation, c'est qu'un équipement, comme un Carrier-grade NAT modifie les ports dynamiquement. Il est possible que d'autres modifications soient effectuées.

Les exceptions :
- Windows avec Microsoft Exchange Server 2007 : Plage de port de 1025 à 60000
- Windows avec des logiciels de virtualisation : Plage de port de 1025 à 65535 (à confirmer)

Les 3 plages de l'IANA :
(l'IANA (Internet Assigned Numbers Authority) s'occupe du nommage et la correspondance entre nom et numéro port via des procédures d'attributions.)
- de 0 à 1023: ports systèmes assignés par l'IANA (system ports ou "well-known ports")
- de 1024 à  49151: ports enregistrés assignés par l'IANA  (registered ports)
- de 49152 à 65535: port éphémères non gérés par l'IANA (dynamic ports)




Comment vérifier la plage de port de mon système d'exploitation ?

Sous Windows :

1/ Démarrer une "Invite de commandes"
2/ Copier / coller la commande netsh int ipv4 show dynamicport tcp
(https://lafibre.info/testdebit/windows10/201512_ports_dynamique_winows10_10586.png)

Sous Linux :
1/ Démarrer un terminal
2/ Copier / coller la commande cat /proc/sys/net/ipv4/ip_local_port_range
(https://lafibre.info/testdebit/ubuntu/201512_ports_dynamique_ubuntu.png)

Sous MacOS X :
1/ Démarrer un terminal
2/ Copier / coller la commande sysctl net.inet.ip.portrange.first net.inet.ip.portrange.last


Merci à kgersen pour les infos !

Tutoriel : Configurer Apache 2.4 pour avoir accès aux ports de retour dans les logs (https://lafibre.info/tutoriels-linux/configurer-log-apache/)
Titre: Plage de ports dynamique du protocole TCP
Posté par: corrector le 26 décembre 2015 à 16:47:13
Non, j'ai :

>netsh i i sh dy t

Plage de ports dynamique du protocole tcp
-------------------------------------------
Port de démarrage   : 1025
Nombre de ports     : 64510

et je suis certain de ne pas avoir fait joujou avec ce paramètre.
Titre: Plage de ports dynamique du protocole TCP
Posté par: underground78 le 26 décembre 2015 à 16:54:41
Sur un Windows 7 à jour avec les paramètres par défaut :
>netsh int ipv4 show dynamicport tcp

Plage de ports dynamique du protocole tcp
-------------------------------------------
Port de démarrage   : 49152
Nombre de ports     : 16384
Titre: Plage de ports dynamique du protocole TCP
Posté par: corrector le 26 décembre 2015 à 16:57:02
Tu veux dire que c'est la MàJ qui fait la différence? (Je ne fais pas toutes les MàJ.)
Titre: Plage de ports dynamique du protocole TCP
Posté par: underground78 le 26 décembre 2015 à 17:20:14
Aucune idée, c'était juste pour donner le plus de détails possibles.
Titre: Plage de ports dynamique du protocole TCP
Posté par: vivien le 26 décembre 2015 à 21:06:08
Corrector, ta configuration semble celle proposée par défaut par Windows server 2003, qui utilise les ports 1025 à 65535 pour les ports dynamiques RPC (source Microsoft (https://support.microsoft.com/fr-fr/kb/832017))

Windows server 2008 et suivant, lui est sur la plage 49152 - 65535 mais l'installation de logiciels peuvent modifier cette plage.

Lorsque vous installez Microsoft Exchange Server 2007 sur un ordinateur Windows Server 2008, la plage de port par défaut est 1025 à 60000. (Source: Microsoft (https://support.microsoft.com/fr-fr/kb/929851))
Titre: Plage de ports dynamique du protocole TCP
Posté par: vivien le 26 décembre 2015 à 21:30:56
Afficher la plage de ports dynamiques sur un ordinateur Windows :
- netsh int ipv4 show dynamicport tcp
- netsh int ipv4 show dynamicport udp
- netsh int ipv6 show dynamicport tcp
- netsh int ipv6 show dynamicport udp

La plage est définie séparèment pour chaque transport et pour chaque version du protocole IP.

Modifier la plage de ports :
Premier chiffre : le port de démarrage de la plage
Second chiffre : le nombre de ports de la plage

- netsh int ipv4 set dynamicport tcp start=10000 num=1000
- netsh int ipv4 set dynamicport udp start=10000 num=1000
- netsh int ipv6 set dynamicport tcp start=10000 num=1000
- netsh int ipv6 set dynamicport udp start=10000 num=1000

Ces exemples de commandes définissent la plage de ports dynamiques à partir de port 10 000 et à la fin sur le port 10999 (1000 ports). La plage minimale de ports qui peuvent être définies est de 255. Le début de la plage est au minimum à 1 025. Le port de fin maximale (basé sur la plage en cours de configuration) ne peut pas dépasser 65535.

Exemple avec Windows 10 :
(https://lafibre.info/testdebit/windows10/201512_ports_dynamique_winows10.png)
Titre: Plage de ports dynamique du protocole TCP
Posté par: corrector le 26 décembre 2015 à 21:35:35
Corrector, ta configuration semble celle proposée par défaut par Windows server 2003, qui utilise les ports 1025 à 65535 pour les ports dynamiques RPC (source Microsoft (https://support.microsoft.com/fr-fr/kb/832017))

Windows server 2008 et suivant, lui est sur la plage 49152 - 65535 mais l'installation de logiciels peuvent modifier cette plage.

Lorsque vous installez Microsoft Exchange Server 2007 sur un ordinateur Windows Server 2008, la plage de port par défaut est 1025 à 60000. (Source: Microsoft (https://support.microsoft.com/fr-fr/kb/929851))
Pourtant c'est un Windows 8 de base.
Titre: Plage de ports dynamique du protocole TCP
Posté par: Bensay le 27 décembre 2015 à 12:55:52
Pourtant c'est un Windows 8 de base.

Idem sous Windows 10 TH2.

>netsh int ipv4 show dynamicport tcp

Plage de ports dynamique du protocole tcp
-------------------------------------------
Port de démarrage   : 1025
Nombre de ports     : 64510
Titre: Plage de ports dynamique du protocole TCP
Posté par: vivien le 27 décembre 2015 à 20:09:40
Bensay,

J'ai vérifié sur plusieurs Windows 10 (édition famille, pro, 32bits 64bits, avec 2Go de ram, avec 16Go de ram, clean install, mise à jour depuis la preview)

=> J'ai toujours
(https://lafibre.info/testdebit/windows10/201512_ports_dynamique_winows10.png)

Quel logiciel aurais pu modifier la plage des ports ?

La seule chose, c'est que toute les version de Windows 10 avaient la dernière grosses mise à jour (build 10586).

Pour savoir si tu as la mise à jour : c'est simple il y a un copyright 2016 pour la build 10586.
Edge n'est pas en version 12 mais en version 13.
(https://lafibre.info/testdebit/windows10/201501_windows10_informations.png)
Titre: Plage de ports dynamique du protocole TCP
Posté par: Bensay le 27 décembre 2015 à 23:47:43
Edge HTML est bien en version 13.
Et version 1511 depuis le 18/12
Mais rien de concordant avec toi :
(https://lafibre.info/testdebit/windows10/201501_windows10_informations_bensay.jpg)

(https://lafibre.info/testdebit/windows10/201512_ports_dynamique_winows10_10586_bensay.png)

Cdt

Bensay
Titre: Plage de ports dynamique du protocole TCP
Posté par: corrector le 28 décembre 2015 à 01:34:13
Vivien, tu pourrais compiler les plages de port utilisées par OS?

Il faudrait commencer par trier le fichier par utilisateur. C'est là que de ne pas avoir le login utilisateur est dommage mais on pourrait imaginer que l'adresse IP sur une courte période soit une approximation.
Titre: Plage de ports dynamique du protocole TCP
Posté par: vivien le 28 décembre 2015 à 17:14:53
Je vais faire des stats sur le pourcentage de ports < 32768 par FAI.
Cela permet de voir dans quel proportion les FAI utilisent plusieurs clients sur une IP (ou les clients utilisent Windows 2000 / XP ou Linux 2.2 ou <)

Les seuls systèmes d'exploitation à utiliser les ports < 32768 sont Windows XP est précédents et Linux 2.2 et précédents (Linux d'avant 2001)

- Windows XP (sortie en 2001) : de 1025 à 5000
- Windows server 2008 : 49152 à 65535 (recommandation de l'Internet Assigned Numbers Authority)
- Windows server 2008 avec Microsoft Exchange Server 2007 : 1025 à 60000
- Windows Vista (sortie en 2007) et suivants : de 49152 à 65535 (recommandation de l'Internet Assigned Numbers Authority)
- Linux avant 2001 (noyaux 2.2.x) : de 1024 à 4999
- Linux à  partir de 2001 (noyaux 2.4.x à 3.13) : de 32768 à 61000
- Linux à  partir de 2015 (noyaux 3.19 et suivants) : de 32768 à 60999
- FreeBSD : de 49152 à 65535 (recommandation de l'Internet Assigned Numbers Authority)
- MacOS X : de 49152 à 65535 (recommandation de l'Internet Assigned Numbers Authority)

J'ai refait des tests avec Windows 10, pas moyen d'avoir ce que vous avez, Corrector et Bensay.

(https://lafibre.info/testdebit/windows10/201512_ports_dynamique_winows10_10240.png)

(https://lafibre.info/testdebit/windows10/201512_ports_dynamique_winows10_10586.png)

PS : Pour le copyright "2016" de Windows10 10586, Microsoft à corrigé le bug et c'est repassé en "2015" avec les mises à jour de décembre.

La commande fonctionne bien avec Linux 2.2 aussi bien sous Linux Mandrake 7 et Debian Potato (2.2) et bien sur c'est toujours bon sur les systèmes plus récents.
cat /proc/sys/net/ipv4/ip_local_port_range
Pour Windows, la commande ne fonctionne que à  partir de Windows XP. Un Windows 2000 SP4 a bien netsh mais il ne semble pas possible de visualiser ou modifier les ports de retour. Je suppose qu'il faut passer par le registre (pas trouvé où est la valeur)
netsh int ipv4 show dynamicport tcp
Titre: Plage de ports dynamique du protocole TCP
Posté par: corrector le 28 décembre 2015 à 18:35:05
On est d'accord que les box préservent les ports? (sauf exception)

Les box sont toutes basées sur iptables ou pas?
Titre: Plage de ports dynamique du protocole TCP
Posté par: kgersen le 28 décembre 2015 à 18:54:30
Pour Windows, la commande ne fonctionne que à  partir de Windows XP. Un Windows 2000 SP4 a bien netsh mais il ne semble pas possible de visualiser ou modifier les ports de retour. Je suppose qu'il faut passer par le registre (pas trouvé où est la valeur)

oui:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

puis mettre une valeur DWORD nommé MaxUserPort. Si la valeur n'existe pas c'est le défaut: 5000

https://technet.microsoft.com/en-us/library/cc938196.aspx

a priori on ne peut changer le port mini.
Titre: Plage de ports dynamique du protocole TCP
Posté par: corrector le 28 décembre 2015 à 19:00:28
Est-ce que SMF enregistre les ports?
Titre: Plage de ports dynamique du protocole TCP
Posté par: Marin le 28 décembre 2015 à 19:07:47
Les box sont toutes basées sur iptables ou pas?

Neufbox, Bbox, Freebox, oui ; Livebox, non pour les firmwares basés sur OpenRG (aucune référence, les fonctions pare-feu sont gérées du côté du code propriétaire) mais peut-être pour d'autres ; quant à la flotte de modems de Numericable, c'est moins sûr en sachant qu'une partie est basée sur des systèmes comme eCos.
Titre: Plage de ports dynamique du protocole TCP
Posté par: vivien le 28 décembre 2015 à 19:16:54
Non, SMF n'enregistre pas les ports, mais Apache enregistre les ports.

Je viens d'installer un Linux 2.0 (Redhat 5.1 qui date d’août 1998 et qui a le noyau Linux 2.0.34) mais si /proc/sys/net/ipv4/ existe bien, pas de "ip_local_port_range"

Il y a uniquement :
- /proc/sys/net/ipv4/arp_check_interval (6000)
- /proc/sys/net/ipv4/arp_confirm_interval (30000)
- /proc/sys/net/ipv4/apr_confirm_timeout (500)
- /proc/sys/net/ipv4/arp_dead_res_time (6000)
- /proc/sys/net/ipv4/arp_max_tries (3)
- /proc/sys/net/ipv4/arp_res_time (500)
- /proc/sys/net/ipv4/arp_timeout (6000)
- /proc/sys/net/ipv4/ip_dynaddr (0)
- /proc/sys/net/ipv4/ip_forward (0)
Titre: Plage de ports dynamique du protocole TCP
Posté par: Breizh 29 le 28 décembre 2015 à 19:47:48
Moi j'ai ça:
Titre: Plage de ports dynamique du protocole TCP
Posté par: corrector le 28 décembre 2015 à 19:59:42
Je viens d'installer un Linux 2.0 (Redhat 5.1 qui date d’août 1998 et qui a le noyau Linux 2.0.34) mais si /proc/sys/net/ipv4/ existe bien, pas de "ip_local_port_range"
J'ai trouvé deux choses :

1) Si l'utilisateur choisit un numéro de port, il ne peut pas prendre n'importe lequel :

19 /*
 20  *      Linux ports don't normally get allocated above 32K.
 21  *      I used an extra 4K port-space
 22  */
 23
 24 #define PORT_MASQ_BEGIN 61000
 25 #define PORT_MASQ_END   (PORT_MASQ_BEGIN+4096)
 

616 #ifdef CONFIG_IP_MASQUERADE
617         /* The kernel masquerader needs some ports. */         
618         if(snum>=PORT_MASQ_BEGIN && snum<=PORT_MASQ_END)
619                 return -EADDRINUSE;
620 #endif

Donc cette plage de ports était réservée pour MASQUERADE et donc interdite aux sockets créées localement! Cela évite d'avoir à gérer les sockets locales dans MASQUERADE.

Dans un linux moderne (càd version > 2.6), la généralisation de MASQUERADE qui est SNAT gère automatiquement toutes les connexions sortantes même quand on ne lui demande que de gérer certaines connexions.

2) Si l'utilisateur ne spécifie pas de numéro de port :


168 static inline int udp_lport_inuse(u16 num)
169 {
170         struct sock *sk = udp_hash[num & (UDP_HTABLE_SIZE - 1)];
171
172         for (; sk != NULL; sk = sk->next) {
173                 if (sk->num == num)
174                         return 1;
175         }
176         return 0;
177 }
178
179 /* Shared by v4/v6 tcp. */
180 unsigned short udp_good_socknum(void)
181 {
182         int result;
183         static int start = 0;
184         int i, best, best_size_so_far;
185
186         SOCKHASH_LOCK();
187
188         /* Select initial not-so-random "best" */
189         best = PROT_SOCK + 1 + (start & 1023);
190         best_size_so_far = 32767;       /* "big" num */
191         result = best;
192         for (i = 0; i < UDP_HTABLE_SIZE; i++, result++) {
193                 struct sock *sk;
194                 int size;
195
196                 sk = udp_hash[result & (UDP_HTABLE_SIZE - 1)];
197
198                 /* No clashes - take it */
199                 if (!sk)
200                         goto out;
201
202                 /* Is this one better than our best so far? */
203                 size = 0;
204                 do {
205                         if (++size >= best_size_so_far)
206                                 goto next;
207                 } while ((sk = sk->next) != NULL);
208                 best_size_so_far = size;
209                 best = result;
210 next:
211         }
212
213         while (udp_lport_inuse(best))
214                 best += UDP_HTABLE_SIZE;
215         result = best;
216 out:
217         start = result;
218         SOCKHASH_UNLOCK();
219         return result;
220 }

Voir

http://lxr.free-electrons.com/source/net/ipv4/af_inet.c?v=2.0.40#L329
http://lxr.free-electrons.com/source/net/ipv4/udp.c?v=2.0.40#L179
http://lxr.free-electrons.com/source/include/net/ip_masq.h?v=2.0.40#L19
http://lxr.free-electrons.com/source/include/net/sock.h?v=2.0.40#L429
Titre: Plage de ports dynamique du protocole TCP
Posté par: Bensay le 28 décembre 2015 à 20:55:25
Peut être le fait d'avoir Vmware ?
Titre: Plage de ports dynamique du protocole TCP
Posté par: corrector le 28 décembre 2015 à 21:03:36
Tu parles du NAT de Vmware?
Titre: Plage de ports dynamique du protocole TCP
Posté par: corrector le 28 décembre 2015 à 21:19:44
213         while (udp_lport_inuse(best))
214                 best += UDP_HTABLE_SIZE;

Je n'arrive pas à comprendre ce qui garantit que ce truc termine à temps!

Il y a aussi ça :

503 static __inline__ int tcp_lport_inuse(int num)
504 {
505         struct sock *sk = tcp_bound_hash[tcp_bhashfn(num)];
506
507         for(; sk != NULL; sk = sk->bind_next) {
508                 if(sk->num == num)
509                         return 1;
510         }
511         return 0;
512 }
513
514 /* Find a "good" local port, this is family independant.
515  * There are several strategies working in unison here to
516  * get the best possible performance.  The current socket
517  * load is kept track of, if it is zero there is a strong
518  * likely hood that there is a zero length chain we will
519  * find with a small amount of searching, else the load is
520  * what we shoot for when the chains all have at least
521  * one entry.  The base helps us walk the chains in an
522  * order such that a good chain is found as quickly as possible.  -DaveM
523  */
524 unsigned short tcp_good_socknum(void)
525 {
526         static int start = PROT_SOCK;
527         static int binding_contour = 0;
528         int best = 0;
529         int size = 32767; /* a big num. */
530         int retval = 0, i, end, bc;
531
532         SOCKHASH_LOCK();
533         i = tcp_bhashfn(start);
534         end = i + TCP_BHTABLE_SIZE;
535         bc = binding_contour;
536         do {
537                 struct sock *sk = tcp_bound_hash[i&(TCP_BHTABLE_SIZE-1)];
538                 if(!sk) {
539                         /* find the smallest value no smaller than start
540                          * that has this hash value.
541                          */
542                         retval = tcp_bhashnext(start-1,i&(TCP_BHTABLE_SIZE-1));
543
544                         /* Check for decreasing load. */
545                         if (bc != 0)
546                                 binding_contour = 0;
547                         goto done;
548                 } else {
549                         int j = 0;
550                         do { sk = sk->bind_next; } while (++j < size && sk);
551                         if (j < size) {
552                                 best = i&(TCP_BHTABLE_SIZE-1);
553                                 size = j;
554                                 if (bc && size <= bc) {
555                                         i = best;
556                                         goto verify;
557                                 }
558                         }
559                 }
560         } while(++i != end);
561         i = best;
562
563         /* Socket load is increasing, adjust our load average. */
564         binding_contour = size;
565 verify:
566         if (size < binding_contour)
567                 binding_contour = size;
568
569         retval = tcp_bhashnext(start-1,i);
570
571         best = retval;  /* mark the starting point to avoid infinite loops */
572         while(tcp_lport_inuse(retval)) {
573                 retval = tcp_bhashnext(retval,i);
574                 if (retval > 32767)     /* Upper bound */
575                         retval = tcp_bhashnext(PROT_SOCK,i);
576                 if (retval == best) {
577                         /* This hash chain is full. No answer. */
578                         retval = 0;
579                         break;
580                 }
581         }
582
583 done:
584         start = (retval + 1);
585         if (start > 32767 || start < PROT_SOCK)
586                 start = PROT_SOCK;
587         SOCKHASH_UNLOCK();
588
589         return retval;
590 }

http://lxr.free-electrons.com/source/net/ipv4/tcp.c?v=2.0.40#L503
Titre: Plage de ports dynamique du protocole TCP
Posté par: vivien le 28 décembre 2015 à 22:18:45
Peut être le fait d'avoir Vmware ?
C'est une bonne piste.

A noter que Virtualbox et KVM/libvirt ne font pas ce type de modifications sous Linux.
Titre: Plage de ports dynamique du protocole TCP
Posté par: vivien le 29 décembre 2015 à 21:55:45
J'ai rajouté l’information du port source et du port destination sur la page https://ip.lafibre.info/

J'ai aussi rajouté la version du protocole http (1.0 ou 1.1 aujourd'hui ; 2.0 mi-2016, quand le serveur sera compatible)

Enfin j'affiche l'adresse IP via deux méthodes, censé donner l'information de la véritable IP du visiteur, et non l'IP du proxy (en cas d'utilisation d'un proxy).
=> Plus d'infos : http://www.infowebmaster.fr/tutoriel/php-fonction-adresse-ip
Titre: Plage de ports dynamique du protocole TCP
Posté par: corrector le 29 décembre 2015 à 23:06:15
Tu as pensé à récupérer l'adresse avec WebRTC?

https://diafygi.github.io/webrtc-ips/
Titre: Plage de ports dynamique du protocole TCP
Posté par: corrector le 30 décembre 2015 à 00:49:32
Tu pourrais faire une page qui affiche la dispersion des ports?

Déjà tu crées une URL qui donne IP et port en texte, sans chichis. Il faut un truc qui marche en IPv6 donc éviter d'utiliser ":" comme séparateur.

Imaginons : une simple page avec un menu vitesse (en Hz) et un bouton démarrer. Le bouton lance un script qui fait des connexions et récupère IP et port. Pour chaque IP, une liste de ports est compilée.

Ensuite on peut dessiner les ports sur un graphique.
Titre: Plage de ports dynamique du protocole TCP
Posté par: Marin le 30 décembre 2015 à 07:39:14
Tu as pensé à récupérer l'adresse avec WebRTC?

Non, juste le X-Forwarded-For, un champ peu renseigné dans la pratique (surtout par des proxy ouverts qui restent aujourd'hui rarement accessibles).

$ curl -s https://ip.lafibre.info/ -H 'X-Forwarded-For: <script>alert("CARRÉMENT VALIDE")</script>' | grep 'Votre véritable adresse'
      <li>Votre véritable adresse IP est <strong><script>alert("CARRÉMENT VALIDE")</script></strong> <small>(différente si vous utilisez un proxy)</small></li>

Cette ligne pourrait être n'affichée qu'au besoin.

Outre WebRTC, il pourrait y avoir le décodage des IPv4 encapsulées (dans les IPv6 Free par exemple) qui pourrait être intéressant, afin d'afficher directement l'hôte et donc le NRA (on peut aussi penser à intégrer d'autres sources de données comme le traceroute chez Orange/FBN mais ce n'est pas le sujet).

[..]
Imaginons : une simple page avec un menu vitesse (en Hz) et un bouton démarrer. Le bouton lance un script qui fait des connexions et récupère IP et port. Pour chaque IP, une liste de ports est compilée.

Si on fait ça, il faudrait peut-être une implèmentation légère comme un socket qui écoute les connexions et renvoie au plus vite le port en réponse (sans persistance), pour :
Titre: Plage de ports dynamique du protocole TCP
Posté par: Bensay le 30 décembre 2015 à 08:10:50
Tu parles du NAT de Vmware?

Je suppute, Vmware jouant avec les interfaces réseaux , peut être une cause à effet ?
Une idée corrector de ce qui aurait pour effet cette divergence avec Vivien ?
Titre: Plage de ports dynamique du protocole TCP
Posté par: vivien le 30 décembre 2015 à 11:38:00
Cette ligne pourrait être n'affichée qu'au besoin.

Voila, j'affiche directement les informations HTTP_CLIENT_IP et HTTP_X_FORWARDED_FOR si ils ne sont pas nuls :
$ClientIp2 = $_SERVER["HTTP_CLIENT_IP"];
$Forwarded = $_SERVER["HTTP_X_FORWARDED_FOR"];
if ("$ClientIp2" != "")
{
        echo "      <li>Information HTTP_CLIENT_IP est <strong>",$ClientIp2,"</strong></li>\n";
}
if ("$Forwarded" != "")
{
        echo "      <li>Information HTTP_X_FORWARDED_FOR est <strong>",$Forwarded,"</strong></li>\n";
}
Titre: Plage de ports dynamique du protocole TCP
Posté par: corrector le 30 décembre 2015 à 17:09:36
        echo "      <li>Information HTTP_X_FORWARDED_FOR est <strong>",$Forwarded,"</strong></li>\n";

vivien, le monsieur t'explique que ça ne se fait pas!
Titre: Plage de ports dynamique du protocole TCP
Posté par: vivien le 30 décembre 2015 à 17:11:37
Si cela n'est jamais utilisé, cela ne s'affichera jamais.

Si c'est utilisé un jour, on pourra voir les infos.

Pour le décodage des IPv4 encapsulées dans les IPv6 Free, si une personne veut se lancer pour le bout de code, pas de pb.
Titre: Plage de ports dynamique du protocole TCP
Posté par: Marin le 30 décembre 2015 à 17:33:58
Je crois que corrector faisait référence à la petite XSS, mais une XSS qui demande de modifier les en-têtes client + sur un site qui ne reçoit pas d'entrée utilisateur particulière et ne stocke rien + qui n'a même pas d'intérêt de détournement, l'intérêt est limité. C'était juste pour montrer qu'on peut mettre n'importe quoi, ce que les développeurs de certains sondages en ligne qui remplacent d'office la variable $adresse_ip par le X-Forwarded-For s'il est présent n'ont pas compris :)
Titre: echo $n'importequoi
Posté par: corrector le 30 décembre 2015 à 17:48:21
qui n'a même pas d'intérêt de détournement, l'intérêt est limité.
Certes.

C'est une question de principe, hein.
Titre: 6rd
Posté par: corrector le 30 décembre 2015 à 17:53:59
Pour le décodage des IPv4 encapsulées dans les IPv6 Free, si une personne veut se lancer pour le bout de code, pas de pb.
Il est impossible de distinguer à coup sûr une simple coincidence numérique du 6to4rd généralisé.

Tout dépend du taux de faux positif/faux négatif.

Quels sont les paramètres utilisés par les autres opérateurs en 6rd?
Titre: Plage de ports dynamique du protocole TCP
Posté par: vivien le 30 décembre 2015 à 20:33:56
Je crois que corrector faisait référence à la petite XSS

Comme ça, c'est bon ?
En appelant htmlspecialchars pour les variables où il est possible d'injecter du code :
$ClientIp = $_SERVER["REMOTE_ADDR"];//On obtient l'adresse IP
$ClientIp2 = htmlspecialchars($_SERVER["HTTP_CLIENT_IP"]);
$Forwarded = htmlspecialchars($_SERVER["HTTP_X_FORWARDED_FOR"]);
$ClientPort = $_SERVER["REMOTE_PORT"];//On obtient le port source
$ServerPort = $_SERVER["SERVER_PORT"];//On obtient le port destination
$ClientHTTP = $_SERVER["SERVER_PROTOCOL"];//On obtient la version de HTTP utilisé
$Chiffrement = $_SERVER["HTTPS"];
$ClientHost = gethostbyaddr($ClientIp);//on transforme en Host avec adresse du FAI
$ClientHostTab = explode(".", $ClientHost);//on divise en segments le host par rapport à chaque point
$nb_points = substr_count($ClientHost, ".");// Nombre de point(s) dans la ligne
$ClientUA = htmlspecialchars($_SERVER["HTTP_USER_AGENT"]);
Titre: Plage de ports dynamique du protocole TCP
Posté par: vivien le 30 décembre 2015 à 20:43:16
Au passage, il est peut-être plus rapide d'utiliser directement 'REMOTE_HOST' pour le revese DNS, plutôt que gethostbyaddr($ClientIp) ?

$ClientHost = gethostbyaddr($ClientIp);//on transforme en Host avec adresse du FAI
Titre: Plage de ports dynamique du protocole TCP
Posté par: corrector le 30 décembre 2015 à 22:46:47
Attention au fait que le PTR peut indiquer n'importe quoi, y compris une chaîne qui n'est pas un nom de domaine existant ou valide.
Titre: Plage de ports dynamique du protocole TCP
Posté par: vivien le 30 décembre 2015 à 23:02:35
Au passage, il est peut-être plus rapide d'utiliser directement 'REMOTE_HOST' pour le revese DNS, plutôt que gethostbyaddr($ClientIp) ?
La réponse est simple : REMOTE_HOST n'est pas activé par défaut et si on l'active dans Apache, le reverse DNS est systématiquement récupéré, ce qui va faire perdre du temps pour les autres sites web sur le serveur (surtout en cas de lenteur DNS)

Corrector, effectivement, j'ai oublié de protéger le PTR. C'est fait :
$ClientHost = htmlspecialchars(gethostbyaddr($ClientIp));//on transforme en Host avec adresse du FAI
Titre: Plage de ports dynamique du protocole TCP
Posté par: corrector le 31 décembre 2015 à 05:59:23
213         while (udp_lport_inuse(best))
214                 best += UDP_HTABLE_SIZE;

Je n'arrive pas à comprendre ce qui garantit que ce truc termine à temps!
En fait le principe est de trouver le case la moins remplie de la table et dans cette case le port le moins élevé qui soit libre.

Donc l'algo commence par une petite valeur et augmente, donc si il choisit une très grande valeur c'est qu'il a y énormèment de ports alloués et peut être que les concepteurs pensaient que c'était suffisamment improbable d'avoir 60000 ports alloués en même temps...?
Titre: Plage de ports dynamique du protocole TCP
Posté par: Paul le 31 décembre 2015 à 23:23:24
Citer
Vous utilisez IPv4 avec le port TCP 9522

C:\Users\Paul>netsh int ipv4 show dynamicport tcp

Plage de ports dynamique du protocole tcp
-------------------------------------------
Port de démarrage   : 1025
Nombre de ports     : 64510


Je suis sous Windows 7 64-bit toutes mises à jours installées.
Titre: Plage de ports dynamique du protocole TCP
Posté par: Paul le 31 décembre 2015 à 23:30:21
Citer
Vous utilisez IPv4 avec le port TCP 64742

C:\Users\Paul>netsh int ipv4 show dynamicport tcp

Plage de ports dynamique du protocole tcp
-------------------------------------------
Port de démarrage   : 49152
Nombre de ports     : 16384


Par contre sous Windows 10 c'est dans l'intervalle "normal".
Titre: Plage de ports dynamique du protocole TCP
Posté par: vivien le 31 décembre 2015 à 23:58:25
Paul, tu as installé un soft réseau ou pour gérer une VM ?
Titre: Plage de ports dynamique du protocole TCP
Posté par: Paul le 01 janvier 2016 à 00:33:48
Oui j'ai Virtualbox sur les 2 PC.
Titre: Plage de ports dynamique du protocole TCP
Posté par: vivien le 02 janvier 2016 à 17:40:09
J'ai installé Virtualbox 5.0.12 sur Windows 10, redémarrer la machine, crée une machine virtuelle Windows 7 mais sans sucés : les ports dynamiques de Windows restent à la valeur par défaut.

(https://lafibre.info/testdebit/windows10/201512_ports_dynamique_winows10_10586.png)

Paul, Corrector, maintenant que le port est affiché en bas de chaque page de LaFibre.info, observez vous certaines connexion ou le port est affiché en rouge (première moitié des ports TCP) ?

Port compris entre 0 et 32767 => affiché en rouge en bas de chaque page
Port compris entre 32768 et 65535 => affiché en vert en bas de chaque page
Titre: Plage de ports dynamique du protocole TCP
Posté par: Paul le 02 janvier 2016 à 17:54:22
Oui, depuis que le site m'informe du port utilisé j'ai remarqué qu'il était toujours compris entre 9000 et 10000.
Titre: Plage de ports dynamique du protocole TCP
Posté par: kgersen le 02 janvier 2016 à 18:15:01
NB: en IPv4, le site affiche le port apres le NAT de la box. ce n'est pas forcement le meme port coté PC. Il serait interessant d'avoir le port coté PC aussi.
Titre: Plage de ports dynamique du protocole TCP
Posté par: VincentAlex le 02 janvier 2016 à 18:20:40
En 4G, ça affiche en rouge 22357
Titre: Plage de ports dynamique du protocole TCP
Posté par: corrector le 02 janvier 2016 à 18:32:27
Paul, Corrector, maintenant que le port est affiché en bas de chaque page de LaFibre.info, observez vous certaines connexion ou le port est affiché en rouge (première moitié des ports TCP) ?
Question sans intérêt (réponse c'est en vert).

Ce qui s'affiche aujourd'hui n'est pas le souci, la plage étant très large.

Je n'ai pas besoin que le forum m'affiche mon port source pour voir que Firefox a récupéré un port < 2**15 quand il s'est connecté au serveur de contrôle de Tor Browser (connecté 3 fois d'ailleurs, je me demande bien pourquoi).
Titre: Plage de ports dynamique du protocole TCP
Posté par: corrector le 02 janvier 2016 à 18:49:36
NB: en IPv4, le site affiche le port apres le NAT de la box. ce n'est pas forcement le meme port coté PC. Il serait interessant d'avoir le port coté PC aussi.
Je ne vois pas comment tu pourrais faire ça!
Titre: Plage de ports dynamique du protocole TCP
Posté par: vivien le 02 janvier 2016 à 23:34:30
Question sans intérêt (réponse c'est en vert).

Ce qui s'affiche aujourd'hui n'est pas le souci, la plage étant très large.

Bien sur que cela peut être dans la plage verte, mais normalement cela ne devrait pas toujours être dans la plage verte, c'est pour ça que j'ai mis des couleurs : tu devrais remarquer le rouge rien qu'en fessant défiler la page si tu passes dans la plage rouge un jour.

Je suis toujours preneur d'idées sur le logiciel qui aurait modifié la configuration.
Titre: Plage de ports dynamique du protocole TCP
Posté par: corrector le 03 janvier 2016 à 03:36:08
Les ports "clients" pour une connexion UDP ou TCP sont appelés "ports éphémères" (c'est le nom canonique bien que parfois on croise "ports dynamiques" et "ports de retour").
De quand date ce concept bizarroïde?

Est-ce une nouveauté de TCP ou bien cela vient-il d'un protocole plus ancien?
Titre: Plage de ports dynamique du protocole TCP
Posté par: VincentAlex le 03 janvier 2016 à 08:58:59
Cela a toujours existé.
Titre: Plage de ports dynamique du protocole TCP
Posté par: corrector le 03 janvier 2016 à 09:14:31
Depuis l'invention du télégraphe ou plus tôt?
Titre: Plage de ports dynamique du protocole TCP
Posté par: corrector le 07 janvier 2016 à 06:14:35
Bien sur que cela peut être dans la plage verte, mais normalement cela ne devrait pas toujours être dans la plage verte, c'est pour ça que j'ai mis des couleurs : tu devrais remarquer le rouge rien qu'en fessant défiler la page si tu passes dans la plage rouge un jour.
Voilà, c'est en rouge : "Vous utilisez IPv6 (Félicitations!) avec le port TCP 26458"

Content?

(Je ne vois pas l'intérêt de truc.)
Titre: Plage de ports dynamique du protocole TCP
Posté par: vivien le 07 janvier 2016 à 18:00:10
Cela permet de voir que la plage de port (1025 => 65535) n'est pas qu'une illusion : tu es sorti de la plage 49152 => 65535 de Windows 7.

Il me reste à comprendre ce qui a fait cette modification.
Titre: Plage de ports dynamique du protocole TCP
Posté par: corrector le 11 janvier 2016 à 12:37:35
Vous utilisez IPv4 avec le port TCP 15142
(Tor, IP 109.163.234.5)
Titre: Plage de ports dynamique du protocole TCP
Posté par: Polynesia le 25 février 2016 à 11:17:21
Bonjour,

Donc si j'ai çà :

>netsh int ipv4 show dynamicport tcp

Plage de ports dynamique du protocole tcp
-------------------------------------------
Port de démarrage   : 49152
Nombre de ports     : 16384



C'est bon pour ipv6 ?
Titre: Plage de ports dynamique du protocole TCP
Posté par: corrector le 25 février 2016 à 15:00:04
Pourquoi ce serait mauvais?

Qu'est-ce qui est mauvais pour IPv6?
Titre: Plage de ports dynamique du protocole TCP
Posté par: BadMax le 25 février 2016 à 16:46:38

C'est bon pour ipv6 ?

Je t'aide :

Citer
>netsh int ipv4 show dynamicport tcp

Titre: Plage de ports dynamique du protocole TCP
Posté par: Polynesia le 25 février 2016 à 20:28:45
idem même si je mets ipv6
Titre: Plage de ports dynamique du protocole TCP
Posté par: corrector le 25 février 2016 à 20:54:36
Pourquoi tu t'inquiètes pour les ports?
Titre: Plage de ports dynamique du protocole TCP
Posté par: vivien le 25 février 2016 à 22:56:41
Les ports permettent juste de mettre en évidence l’utilisation de CG-Nat par certains FAI.

En aucun cas avoir un port de retour hors de la plage habituelle ne pose problème.
Titre: Plage de ports dynamique du protocole TCP
Posté par: mattmatt73 le 26 février 2016 à 00:52:50
Les ports permettent juste de mettre en évidence l’utilisation de CG-Nat par certains FAI.

En aucun cas avoir un port de retour hors de la plage habituelle ne pose problème.

moi je vois souvent la ligne en rouge quand je suis en 4G chez bouygues
Titre: Plage de ports dynamique du protocole TCP
Posté par: corrector le 26 février 2016 à 01:02:08
Pas étonnant pour un CG-NAT.
Titre: Plage de ports dynamique du protocole TCP
Posté par: buddy le 27 février 2016 à 17:08:26
Cela permet de voir que la plage de port (1025 => 65535) n'est pas qu'une illusion : tu es sorti de la plage 49152 => 65535 de Windows 7.

Il me reste à comprendre ce qui a fait cette modification.

Je me demande si ce que retourne la commande windows sert à quelque chose, c'est bien la box qui choisit le port de sortie final... Donc çà ne sert à rien de le mettre en rouge ou en vert non ?

Sur un connexion VDSL SFR j'ai le port 1694 alors que W8 indique bien 49152 et +
Titre: Plage de ports dynamique du protocole TCP
Posté par: corrector le 27 février 2016 à 17:25:55
La NAT-box peut laisser ou modifier les ports.

La Freebox préserve autant que faire se peut.
Titre: Plage de ports dynamique du protocole TCP
Posté par: vivien le 28 février 2016 à 16:06:48
Étonnant buddy, tu as ce phénomène en IPv4 et en IPv6 ?

En IPv6, il n'y a pas de raison de modifier le port source.

L'activation de l'IPv6 se fait dans la Neufbox.
Titre: Plage de ports dynamique du protocole TCP
Posté par: corrector le 23 octobre 2016 à 05:35:37
Je crois que corrector faisait référence à la petite XSS, mais une XSS qui demande de modifier les en-têtes client + sur un site qui ne reçoit pas d'entrée utilisateur particulière et ne stocke rien + qui n'a même pas d'intérêt de détournement, l'intérêt est limité.
En fait c'est surtout l'idée qu'on produise du HTML par assemblage de chaines de caractères qui me hérisse.

Le PHP est presque aussi mal adapté au Web que le C. C'est de la merde.
Titre: Plage de ports dynamique du protocole TCP
Posté par: Breizh 29 le 12 février 2017 à 19:49:19
Perso je suis 2 fois sur 3 en rouge, sous Win 10 pro.
Bizarre.  :-\
Titre: Plage de ports dynamique du protocole TCP
Posté par: vivien le 13 février 2017 à 06:54:01
En 4G, c'est normal Breizh 29 : il y a du CG-Nat dans le réseau.

Avec la livebox ou la Bbox, en xDSL ou FTTH, je suis étonné.
Titre: Plage de ports dynamique du protocole TCP
Posté par: alain_p le 15 septembre 2018 à 23:03:12
Je ranime un peu ce sujet, mais j'ai remarqué que j'avais le port TCP marqué en rouge, alors que je suis sous windows 10 1803.

Citer
Vous utilisez IPv6 (Félicitations!) avec le port TCP 11370 (Plus d'informations)

Lorsque je recherche la plage de ports utilisés, elle est bien entre 1024 et 64511 :

C:\>netsh int ipv4 show dynamicport tcp

Plage de ports dynamique du protocole tcp
-------------------------------------------
Port de démarrage   : 1024
Nombre de ports     : 64511


C:\>netsh int ipv6 show dynamicport tcp

Plage de ports dynamique du protocole tcp
-------------------------------------------
Port de démarrage   : 1024
Nombre de ports     : 64511

En UDP, je suis par contre sur la plage de ports normale :

C:\>netsh int ipv6 show dynamicport udp

Plage de ports dynamique du protocole udp
-------------------------------------------
Port de démarrage   : 49152
Nombre de ports     : 16384


C:\>netsh int ipv4 show dynamicport udp

Plage de ports dynamique du protocole udp
-------------------------------------------
Port de démarrage   : 49152
Nombre de ports     : 16384

Je suis à peu près sûr qu'auparavant j'avais bien un port en vert au dessus de 49152. J'ai VirtualBox d'installé.
Titre: Plage de ports dynamique du protocole TCP
Posté par: vivien le 15 septembre 2018 à 23:14:20
Je ranime un peu ce sujet, mais j'ai remarqué que j'avais le port TCP marqué en rouge, alors que je suis sous windows 10 1803.

Lorsque je recherche la plage de ports utilisés, elle est bien entre 1024 et 64511 :

C:\>netsh int ipv4 show dynamicport tcp

Plage de ports dynamique du protocole tcp
-------------------------------------------
Port de démarrage   : 1024
Nombre de ports     : 64511


C:\>netsh int ipv6 show dynamicport tcp

Plage de ports dynamique du protocole tcp
-------------------------------------------
Port de démarrage   : 1024
Nombre de ports     : 64511

Ah oui, c'est intéressant de savoir :
- quel logiciel a fait la modification
- pourquoi un tel changement a été réalisé. 16384 ports c'est suffisant pour tous les usages grand public sans exception.
Titre: Plage de ports dynamique du protocole TCP
Posté par: alain_p le 15 septembre 2018 à 23:17:12
Je n'ai rien installé récemment, c'est pourquoi je me demandais si ce n'était pas une mise à jour windows ? Car sinon, comme d'autres, j'ai Virtualbox (avec peut-être une mise à jour récente, je ne me rappelle plus de la date de la dernière), qui, en tant que logiciel de virtualisation, change peut-être la plage de ports...
Titre: Plage de ports dynamique du protocole TCP
Posté par: vivien le 16 septembre 2018 à 07:23:54
Avec les dernières mises à jour de Windows 10, j'ai :

netsh int ipv4 show dynamicport tcp

Plage de ports dynamique du protocole tcp
-------------------------------------------
Port de démarrage   : 49152
Nombre de ports     : 16384


netsh int ipv6 show dynamicport tcp

Plage de ports dynamique du protocole tcp
-------------------------------------------
Port de démarrage   : 49152
Nombre de ports     : 16384

Ensuite, j'ai installé VirtualBox 5.2 et je n'ai aucun changement.
Titre: Plage de ports dynamique du protocole TCP
Posté par: alain_p le 16 septembre 2018 à 18:18:29
J'avais fait les tests avec mon PC fixe. J'ai testé avec mon PC portable, même chose. Puis j'ai testé sur deux PCs au travail (un nouveau et un ancien, tous les deux en windows 10). L'un avaient les ports dynamiques commençant à 1024, l'autre, l'ancien, à 49152. L'ancien était en 1607, je l'ai upgradé en 1803, mais il est resté à 1024.

J'ai regardé aussi sur quelques serveurs, les uns en 2012 R2 et d'autres en 2016. Certains commencent à 1024, les autres à 49152.

Un point commun de ceux dont les ports dynamiques commencent à 1024 pourrait être qu'ils ont une version assez récente de nmap (zenmap). A confirmer...