netcat: проверка доступности связки ip:port
моему серверу выделено несколько ip-адресов. они добавлены к внешнему интерфейсу (в примере фигурируют интерфейс eth0 и адреса 192.168.2.120 и 192.168.2.188, которые, конечно, не относятся к публичным, но это же только пример):
$ ip a l dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:fd:45:fd:10:4c brd ff:ff:ff:ff:ff:ff
inet 192.168.2.120/24 brd 192.168.2.255 scope global eth0
valid_lft forever preferred_lft forever
inet 192.168.2.188/24 scope global secondary eth0
valid_lft forever preferred_lft forever
как мне с помощью программы nc (netcat) проверить одновременную доступность какого-нибудь порта на каждом из адресов?
Ответы (1 шт):
- указать прослушиваемый адрес можно с помощью опции
-s адрес. - указать прослушиваемый порт можно с помощью опции
-p порт
для примера возьмём порт 1024 (порты с меньшими номерами требуют повышенных привилегий — надо будет запускать программу nc от имени пользователя root).
запустите на сервере для каждой пары ip:port такую примерно команду:
$ while :; do echo "ip: 192.168.2.188 port:1024" | nc -q 1 -l -s 192.168.2.188 -p 1024 >/dev/null 2>&1 || break; done &
понятно, что в команде echo и в параметрах nc должны фигурировать одни и те же ip-адреса и порты, чтобы ответы можно было отличить.
а теперь из внешнего (для сервера) мира с помощью той же программы nc проверьте, что получаете ответ от сервера:
$ nc 192.168.2.188 1024
ip: 192.168.2.188 port:1024
и так для каждой пары ip:port. если получаете что-нибудь вроде:
(UNKNOWN) [192.168.2.188] 1024 (?) : Connection refused
то значит доступа (по крайней мере от вашего локального компьютера до сервера) к данному ip-адресу и на указанном порту — нет.
проверять можно и с помощью http-клиента («браузера»). для этого надо добавить немного http-информации в команду echo, приведя её примерно к такому виду:
echo -e "HTTP/1.1 200 OK\n\nip: 192.168.2.188 port:1024"
тогда по ссылке http://192.168.2.188:1024 должно отобразиться то же самое сообщение от запущенной на сервере программы nc.
но это подойдёт не для всех портов — например, открывать соединение на 25-м порту протестированные мной http-клиенты firefox и chromium отказались наотрез.
убить запущенные не сервере процессы nc можно с помощью команды:
$ kill номер.процесса
увидеть номера процессов, содержащих в имени nc (и переданные процессам параметры), можно так:
$ pgrep -a nc