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

Как проверить, существует ли маршрут между двумя хостами для определенного порта?

Как проверить, существует ли маршрут между двумя хостами для определенного порта (например, 1433).

с помощью 'ip route get ADDRESS' вы можете проверить маршрут настроен в вашей системе, то есть первый переход:

$ ip route get 192.168.10.10
192.168.10.10 via 192.168.10.1 dev eth0  src 192.168.10.11 
    cache 

чтобы проверить подключение порта, простой telnet должен:

$ telnet 192.168.10.10 1433
...

удачи!

Fisrt, ты должен это знать, route действие происходит в Сетевой уровень, пока port определяется в Транспортный уровень. Таким образом, наличие маршрута между двумя хостами не означает, что вы можете достичь порта на хосте.

Представьте, что два хозяина - это два дома, порт - ворота дома, маршрут - дорога. Вы можете построить много дорог между домами. Но когда вы подходите к дому, если ворота дома закрыты, вы не можете войти.

ОБНОВИТЬ

Для комментария к вопросу вы можете использовать такую ​​команду, как:

Чтобы проверить, существует ли маршрут:

  • маршрут
  • трассировка

Чтобы проверить открытый порт:

  • телнет
  • netcat

Прочтите его man-страницу и попробуйте использовать.

Мне очень нравится mtr http://www.bitwizard.nl/mtr/. Также есть версия для Windows по адресу http://winmtr.net/Взаимодействие с другими людьми

Как отмечали другие, наличие маршрута не обязательно означает, что у вас есть возможность подключения. Если это то, что вы хотите проверить, netcat предлагает -z возможность сканирования, чтобы увидеть, открыт ли порт. (Вы также можете указать тайм-аут с помощью -w если у вас может не быть маршрута; тайм-аут по умолчанию обычно составляет пару минут.)

$ nc -z 127.0.0.1 22; echo $?
0
$ nc -z 127.0.0.1 11; echo $?
1

Вы можете использовать код выхода, чтобы что-то сделать (или нет) в зависимости от того, продемонстрировали ли вы подключение к этому адресу и порту:

if nc -z 127.0.0.1 22; then
    echo "SSH server is available."
else
    echo "Cannot connect to SSH server."
fi

В -v опция сделает вывод более подробным, и это можно использовать для сканировать диапазон портов:

$ nc -vz 127.0.0.1 22-25
Connection to 127.0.0.1 22 port [tcp/ssh] succeeded!
nc: connect to 127.0.0.1 port 23 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 24 (tcp) failed: Connection refused
Connection to 127.0.0.1 25 port [tcp/smtp] succeeded!
$ echo $?
0

Как показано выше, в режиме многопортового сканирования код выхода будет истинным (0), если какой-либо из портов удалось подключиться, или ложным в противном случае.

Есть несколько разных версий netcat; в приведенных выше примерах используется netcat-openbsd пакет из Debian 9, который является переработкой "традиционного" netcat (netcat-traditional пакет). По этим параметрам и кодам выхода традиционная версия практически аналогична. Если у вас возникли проблемы с параметрами командной строки netcat и кодами выхода, проверьте, какую версию вы используете; ls -l /bin/nc* может дать некоторое представление.