Хорошо, мы все знаем, как использовать PING для проверки подключения к IP-адресу. Мне нужно сделать что-то подобное, но проверить, успешен ли мой исходящий запрос на заданный IP-адрес, а также на указанный порт (в данном случае 1775). Проверку желательно выполнять из командной строки.
Как я могу проверить исходящее соединение с IP-адресом, а также с определенным портом?
Ответы (6)
Если на целевом IP/порту работает сервер, вы можете использовать Telnet. Любой ответ, кроме «не удается подключиться», будет означать, что вы смогли подключиться.
Вот небольшой сайт, который я сделал, чтобы протестировать любой исходящий порт. Сервер прослушивает все доступные порты TCP.
telnet portquiz.net XXXX
ssh [email protected]
— он должен сказать, что либо разрешение отклонено (открытый ключ), либо авторизация успешна, если вы загрузили свой открытый ключ в учетную запись github.
- person apple16; 05.08.2015
Чтобы автоматизировать замечательный сервис portquiz.net, я написал bash-скрипт:
NB_CONNECTION=10
PORT_START=1
PORT_END=1000
for (( i=$PORT_START; i<=$PORT_END; i=i+NB_CONNECTION ))
do
iEnd=$((i + NB_CONNECTION))
for (( j=$i; j<$iEnd; j++ ))
do
#(curl --connect-timeout 1 "portquiz.net:$j" &> /dev/null && echo "> $j") &
(nc -w 1 -z portquiz.net "$j" &> /dev/null && echo "> $j") &
done
wait
done
Если вы тестируете TCP/IP, дешевый способ проверить удаленный адрес/порт — подключиться к нему через telnet и посмотреть, соединяется ли он. Для таких протоколов, как HTTP (порт 80), вы даже можете вводить HTTP-команды и получать HTTP-ответы.
eg
Command IP Port
Telnet 192.168.1.1 80
Самый быстрый и эффективный способ, который я нашел для этого, — это nmap и portquiz.net, описанные здесь: http://thomasmullaly.com/2013/04/13/outgoing-port-tester/ Это сканирует 1000 наиболее часто используемых портов:
# nmap -Pn --top-ports 1000 portquiz.net
Starting Nmap 6.40 ( http://nmap.org ) at 2017-08-02 22:28 CDT
Nmap scan report for portquiz.net (178.33.250.62)
Host is up (0.072s latency).
rDNS record for 178.33.250.62: electron.positon.org
Not shown: 996 closed ports
PORT STATE SERVICE
53/tcp open domain
80/tcp open http
443/tcp open https
8080/tcp open http-proxy
Nmap done: 1 IP address (1 host up) scanned in 4.78 seconds
Чтобы отсканировать их все (заняло 6 секунд вместо 5):
# nmap -Pn -p1-65535 portquiz.net
Пример bash-скрипта @benjarobin для тестирования последовательности портов у меня не сработал, поэтому я создал этот минимальный не совсем однострочный (командный) пример, который записывает вывод открытых портов из последовательности 1- 65535 (все применимые коммуникационные порты) в локальный файл и подавляет все остальные выходные данные:
for p in $(seq 1 65535); do curl -s --connect-timeout 1 portquiz.net:$p >> ports.txt; done
К сожалению, это занимает 18,2 часа, потому что минимальное время ожидания соединения, разрешенное целыми секундами в моей старой версии curl, равно 1. Если у вас есть версия curl> = 7.32.0 (введите «curl -V»), вы можете попробуйте меньшие десятичные значения, в зависимости от того, насколько быстро вы можете подключиться к службе. Или попробуйте меньший диапазон портов, чтобы минимизировать продолжительность.
Кроме того, он будет добавлен к выходному файлу ports.txt, поэтому при многократном запуске вы можете сначала удалить файл.