![如何检查两个主机之间是否存在特定端口的路由?](https://linux22.com/image/615977/%E5%A6%82%E4%BD%95%E6%A3%80%E6%9F%A5%E4%B8%A4%E4%B8%AA%E4%B8%BB%E6%9C%BA%E4%B9%8B%E9%97%B4%E6%98%AF%E5%90%A6%E5%AD%98%E5%9C%A8%E7%89%B9%E5%AE%9A%E7%AB%AF%E5%8F%A3%E7%9A%84%E8%B7%AF%E7%94%B1%EF%BC%9F.png)
如何检查两台主机之间是否有到特定端口(例如 1433)的路由。
答案1
使用 '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
...
祝你好运!
答案2
首先,你必须知道,route
动作发生在网络层,而port
定义为传输层。因此,如果两个主机之间存在路由并不意味着您可以到达主机中的端口。
想象两个主人是两栋房子,口是房子的大门,路线是道路。你可以在房子之间建造许多道路。但是当你到达一所房子时,如果房子的大门关闭,你就无法进入。
更新
对于您的评论问题,您可以使用一些命令,例如:
检查路线是否存在:
- 路线
- 路由追踪
检查开放端口:
- 远程登录
- 网猫
阅读其手册页并尝试使用。
答案3
正如其他人提到的,有路线并不一定意味着你有连接。如果你要测试的是这个,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*
可能会提供一些见解。
答案4
我真的很喜欢地铁http://www.bitwizard.nl/mtr/。还有一个 Windows 版本http://winmtr.net/