Назад | Перейти на главную страницу

Проверить подключение к серверу через порт UDP

Я хочу знать, может ли машина HP-UX взаимодействовать с удаленной машиной (которой я не могу управлять) на определенном порту с помощью UDP.

Я попробовал telnet, но похоже, что он не поддерживает UDP. Я бы использовал netcat, но мне не удалось найти ни одного пакета. Эта машина находится в производстве, поэтому я не хочу слишком много возиться с компилированием или установкой ... (nmap, netcat из исходников ...)

Любой простой способ сделать это?

Пинг UDP-порта довольно сложен, поскольку нет связи, как таковой. Если у вас нет контроля над удаленным хостом, возможно, вы никогда не узнаете, действительно ли принимаются ваши дейтаграммы UDP. Я предполагаю, что вы уже знаете, доступен ли удаленный хост через ping, traceroute, mtrи т. д. (Если нет, сначала проверьте это!)

Далее, поскольку у вас нет netcat, вам понадобится способ генерации UDP-пакетов.

В bash оболочка отправляет UDP-пакеты, когда вы перенаправляете данные на специальное устройство /dev/udp/host/port. Например:

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

Python, конечно, также полностью поддерживает UDP, например

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

Независимо от того, как вы умудряетесь сгенерировать свой UDP-пакет «ping», вам нужно знать, получила ли его цель. Если целевой порт открыт (т.е. служба прослушивает данный порт), то происходящее будет определяться приложением. Надеюсь, вы заметите какое-то поведение или индикацию удаленной системы.

Если целевой порт закрыт (т.е. на этом порте не прослушивается ни одна служба), то вы должен получить в ответ пакет с ошибкой ICMP. Используйте свой любимый сниффер проводных сетей, чтобы следить за этим. Или, возможно, ваша система HP-UX где-то регистрирует ошибки ICMP (извините, у меня нет опыта работы с HP-UX).

К сожалению, если цель защищена брандмауэром, вы можете не получить ответа, когда целевой порт закрыт. Единственный верный способ узнать, отвечает ли удаленный хост, - это запустить приложение, зависящее от UDP, и наблюдать за сетевым трафиком.

Ты можешь использовать netcat. В OSX это моя команда:

$ 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