Verificar la conectividad a un servidor en un puerto UDP

14

Quiero saber si una máquina HP-UX puede comunicarse con una máquina remota (sobre la cual no tengo control) en un puerto en particular usando UDP.

Intenté telnet, pero no parece que sea compatible con UDP. Usaría netcat, pero no pude encontrar ningún paquete. Esta máquina está en producción, así que no quiero perder el tiempo compilando o instalando demasiado ... (nmap, netcat de la fuente ...)

¿Alguna forma simple de hacer esto?

skinp
fuente

Respuestas:

16

Hacer ping a un puerto UDP es un poco complicado, ya que no hay conexiones , per se. Si no tiene control sobre el host remoto, es posible que nunca sepa realmente si sus datagramas UDP realmente se están recibiendo. Asumo que ya sabes si el host remoto es accesible, a través de ping, traceroute, mtr, etc (Si no es así, compruebe que la primera!)

A continuación, como no tiene netcat, necesitará alguna forma de generar paquetes UDP.

El bashshell envía paquetes UDP cuando redirige los datos al dispositivo especial /dev/udp/host/port. Por ejemplo:

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

Python, por supuesto, también es totalmente capaz de UDP, por ejemplo

#!/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))

Independientemente de cómo logre generar su paquete UDP "ping", querrá saber si el destino lo recibió. Si el puerto de destino está abierto (es decir, un servicio está escuchando en el puerto dado), entonces lo que suceda será definido por la aplicación. Con suerte, notará algún comportamiento o indicación del sistema remoto.

Si el puerto de destino está cerrado (es decir, ningún servicio está escuchando en ese puerto), entonces debería recibir un paquete de error ICMP en respuesta. Use su sniffer de red de nivel de cable favorito para vigilarlo. O tal vez su sistema HP-UX registra errores ICMP en alguna parte (lo siento, no tengo experiencia con HP-UX).

Desafortunadamente, si el objetivo tiene un cortafuegos, es posible que no obtenga una respuesta cuando el puerto objetivo está cerrado. La única forma segura de saber si el host remoto responde es ejecutar su aplicación dependiente de datos UDP y observar el tráfico de la red.

Steven Monday
fuente
10

Puedes usar netcat. En OSX, este es mi comando:

$ 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
fuente
Perfecto, ¡nc funciona para todo!
Shoaib Khan