Я хочу знать, может ли машина 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