web-dev-qa-db-fra.com

Vérifier la connectivité à un serveur sur un port UDP

Je veux savoir si une machine HP-UX peut communiquer avec une machine distante (sur laquelle je n'ai pas de contrôle) sur un port particulier en utilisant UDP.

J'ai essayé telnet, mais il ne semble pas qu'il prenne en charge UDP. J'utiliserais netcat, mais je n'ai trouvé aucun paquet. Cette machine est en production donc je ne veux pas m'embêter à trop compiler ou installer des choses ... (nmap, netcat depuis la source ...)

Une façon simple de le faire?

15
skinp

Faire un ping sur un port UDP est un peu délicat, car il n'y a pas connexions, en soi. Si vous ne contrôlez pas l'hôte distant, vous ne saurez peut-être jamais vraiment si vos datagrammes UDP sont réellement reçus. Je suppose que vous savez déjà si l'hôte distant est accessible, via ping, traceroute, mtr, etc. (Sinon, vérifiez d'abord!)

Ensuite, puisque vous n'avez pas netcat, vous aurez besoin d'un moyen de générer des paquets UDP.

Le shell bash envoie des paquets UDP lorsque vous redirigez les données vers le périphérique spécial /dev/udp/Host/port. Par exemple:

#!/bin/bash
Host="10.10.10.10"
port=12345
echo "PING" >/dev/udp/$Host/$port

Python, bien sûr, est également entièrement capable d'UDP, par exemple.

#!/bin/python
import socket
Host="10.10.10.10"
port=12345
udp_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp_sock.sendto('PING', (Host, port))

Quelle que soit la façon dont vous tentez de générer votre paquet "ping" UDP, vous voudrez savoir si la cible l'a reçu. Si le port cible est ouvert (c'est-à-dire qu'un service écoute sur le port donné), ce qui se passera sera défini par l'application. Espérons que vous remarquerez un comportement ou une indication du système distant.

Si le port cible est fermé (c'est-à-dire qu'aucun service n'écoute sur ce port), alors vous devriez récupérer un paquet d'erreur ICMP en réponse. Utilisez votre renifleur de réseau filaire préféré pour le surveiller. Ou, peut-être que votre système HP-UX enregistre les erreurs ICMP quelque part (désolé, je n'ai aucune expérience avec HP-UX).

Malheureusement, si la cible est protégée par un pare-feu, il se peut que vous n'obteniez pas de réponse lorsque le port cible est fermé. Le seul moyen infaillible de savoir si l'hôte distant est réactif est d'exécuter votre application dépendante des données UDP et de surveiller le trafic réseau.

16
Steven Monday

Vous pouvez utiliser netcat. Sous OSX, voici ma commande:

$ nc -vnzu <IP> <PORT>
found 0 associations
found 1 connections:
1: flags=82<CONNECTED,PREFERRED>
outif (null)
src <SOURCE IP> port <SOURCE PORT>
dst <DEST IP> port <DEST PORT>
rank info not available
10
f01