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

14

Je veux savoir si une machine HP-UX peut communiquer avec une machine distante (sur laquelle je n'ai aucun 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?

skinp
la source

Réponses:

16

Faire un ping sur un port UDP est assez délicat, car il n'y a pas de connexion 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 que la première!)

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

Le bashshell 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 de 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 manière 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. J'espère 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), vous devriez alors 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, vous ne pouvez pas obtenir de réponse lorsque le port cible est fermé. Le seul moyen infaillible de savoir si l'hôte distant est réactif consiste à exécuter votre application dépendante des données UDP et à surveiller le trafic réseau.

Steven Monday
la source
10

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
f01
la source
Parfait, nc fonctionne pour tout!
Shoaib Khan