101 votes

Tester la connectivité du port UDP

J'essaie de tester si je peux accéder à un port particulier sur un serveur distant (auquel j'ai accès) par UDP.

Les deux serveurs sont tournés vers l'Internet. J'utilise netcat pour avoir un certain port d'écoute.

J'utilise ensuite nmap pour vérifier ce port afin de voir s'il est ouvert, mais il ne semble pas l'être.

Iptables est désactivé.

Avez-vous une idée de la raison pour laquelle cela pourrait être le cas ? Je vais éventuellement configurer un tunnel VPN, mais comme je suis très novice en matière de tunnels, je veux m'assurer que j'ai la connectivité sur le port UDP 1194 avant d'avancer.

0 votes

J'ai répondu à la question "Tester la connectivité du port UDP". Mais je vous suggère de vous concentrer sur la partie plus spécifique "s'assurer qu'OpenVPN reçoit mes paquets UDP" - cela peut être facilement réalisé en regardant les logs OpenVPN.

115voto

motobói Points 1501

Pour tester si le port udp répond, utilisez netcat .

Un exemple de la page de manuel :

nc -v -u -z -w 3 example.host 20-30
    Send UDP packets to ports 20-30 of example.host, and report which ones
    did not respond with an ICMP packet after three seconds.

Bien sûr, si un pare-feu est DROP ce qui est normalement le cas lorsqu'il s'agit de passerelles tournées vers l'Internet, vous ne recevrez pas de réponse ICMP.

10 votes

Cette réponse m'a donné un faux positif, alors qu'à l'inverse, la réponse de Sasha correspond à ce que j'attends.

1 votes

@texas-bronius Si vous avez accès à l'autre serveur, c'est probablement mieux de faire à la manière de Sasha.

1 votes

J'ai également reçu un faux positif de cet exemple.

94voto

Sasha Points 711
  1. à la fois sur le client et le serveur, installez nc : yum install nc (pour centos)
  2. sur le port UDP d'écoute du serveur : nc -ul 6111 (ajoutez le -6 option si vous testez une connexion ipv6)
  3. sur le client nc -u <server> 6111
  4. tapez n'importe quoi sur le client et appuyez sur entrée - vous devriez voir ce texte sur serveur

Note : Lorsque vous exécutez le nc -ul sur le serveur, il sólo pour la première connexion qui lui arrive. Vous ne pouvez pas, comme je l'ai découvert, passer d'un serveur à l'autre sans arrêter et redémarrer. nc -ul . En fait, si vous ^C arrêtez le client ( nc -u ... ), vous ne pouvez pas non plus redémarrer le client sans avoir préalablement redémarré le serveur d'écoute.

6 votes

J'aime cette réponse intelligente, parce qu'elle alimente ma propre compréhension (et mes malentendus !) du fait que UDP est "envoyer et oublier" et que toute confirmation ne peut être obtenue que par une configuration appropriée. Trop de facteurs. Cette réponse donne un appel et une réponse vraiment simple et définitive qui fonctionne ou ne fonctionne pas, changez la configuration, rincez et répétez.

4 votes

$ sudo apt install netcat (pour ubuntu)

2 votes

Cela devrait vraiment être la réponse acceptée par l'OMI.

90voto

Luke404 Points 5608

Il n'existe pas de port UDP "ouvert", du moins pas dans le sens où la plupart des gens ont l'habitude de l'entendre (qui consiste à répondre quelque chose comme "OK, j'ai accepté votre connexion"). UDP est sans session, donc "un port" (lire : le protocole UDP dans la pile IP du système d'exploitation) ne répondra jamais "succès" de lui-même.

Les ports UDP n'ont que deux états : en écoute ou non. Cela se traduit généralement par "avoir un socket ouvert sur lui par un processus" ou "n'avoir aucun socket ouvert". Ce dernier cas devrait être facile à détecter puisque le système devrait répondre avec un message ICMP Destination Unreachable avec le code=3 (Port inaccessible). Malheureusement, de nombreux pare-feu peuvent rejeter ces paquets et si vous ne recevez rien en retour, vous ne pouvez pas être sûr que le port est dans cet état ou non. N'oublions pas non plus que le protocole ICMP est sans session et n'effectue pas de retransmissions : le paquet Port Unreachable peut très bien être perdu quelque part sur le réseau.

Un port UDP en état d'écoute peut ne pas répondre du tout (le processus qui l'écoute reçoit simplement le paquet et ne transmet rien) ou peut renvoyer quelque chose (si le processus agit à la réception). y s'il agit en répondant via UDP à l'expéditeur original IP:port). Donc, une fois de plus, vous ne pouvez jamais être sûr de l'état de la situation si vous ne recevez rien en retour.

Vous dites que vous pouvez contrôler l'hôte récepteur : cela vous permet de construire votre propre protocole pour vérifier l'accessibilité du port UDP : il suffit de mettre un processus sur l'hôte récepteur qui écoutera sur le port UDP donné. y répondre (ou vous envoyer un e-mail, ou simplement paniquer et unlink() tout ce qui se trouve sur le système de fichiers de l'hôte... tout ce qui peut attirer votre attention fera l'affaire).

0 votes

Je crois que je comprends maintenant. Donc un netstat sur le serveur avec le port d'écoute udp ne montrera jamais l'hôte distant... Seul un tcpdump devrait montrer les requêtes distantes ?

0 votes

Netstat et tcpdump ont tous deux la capacité de déverser des données sur vous, le dernier sous une forme plus lisible par l'homme. Consultez leurs pages de manuel pour plus de détails.

23voto

tmarkiewicz Points 251

J'avais un problème similaire et j'ai trouvé une bonne solution en utilisant netcat ici : http://en.wikipedia.org/wiki/Netcat#Test_if_UDP_port_is_open:_simple_UDP_server_and_client

nc -vzu <host> <port>

J'ai pu confirmer que mon port UDP était ouvert et j'ai ensuite pu tester mon code réel.

1 votes

Cette solution est erronée selon la page de manuel nc (dernières lignes) : CAVEATS Les scans de ports UDP utilisant la combinaison d'indicateurs -uz rapportent toujours un succès, quel que soit l'état de la machine cible. Cependant, en conjonction avec un renifleur de trafic soit sur la machine cible soit sur un périphérique intermédiaire, la combinaison -uz pourrait être utile pour le diagnostic des communications. Notez que la quantité de trafic UDP générée peut être limitée en raison des ressources matérielles et/ou des paramètres de configuration.

0 votes

Le succès est toujours au rendez-vous

11voto

Ryan Sampson Points 2898

Le test des ports UDP ouverts avec nmap est semé d'embûches : il n'y a pas de poignée de main à trois voies pour indiquer l'ouverture. À moins que le processus d'écoute ne réponde à ce que nmap envoie, il n'y a aucun moyen pour nmap de différencier un port ouvert qui ne répond pas d'un port filtré.

Le plus simple est d'écouter à une extrémité avec netcat et d'utiliser netcat à l'autre extrémité pour envoyer des paquets, et de voir qu'ils arrivent à l'autre extrémité. Faites-le dans les deux sens pour être sûr. Vous pouvez également tcpdump pour voir les paquets arriver là où ils doivent aller.

0 votes

Je vois Alors comment nmap sait-il exactement qu'un port est ouvert ? Envoie-t-il des données à ce port et s'il reçoit une réponse, il est considéré comme ouvert ? Je vais utiliser une combinaison de tcpdump et netcat. Merci pour votre réponse bien expliquée.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X