为了降低风险,我们通常在生产环境中有限制的权限。
在这些环境中,我们通常无法使用常用的网络故障排除工具,如 telnet
, ping
, dig
等。也可能有严格的策略阻止我们安装这些工具。
不过不用担心,因为我们可以利用一个多功能的工具包——Python。
为什么选择 Python?通常,Python 已经预装在大多数 Linux 发行版中。
要检查是否安装了 Python,只需运行命令 command -v python || echo 'NotInstalled'
,或者在某些情况下使用 command -v python3
。如果 Python 已经安装,控制台会显示 Python 可执行文件的路径。否则,它会返回“NotInstalled”这个信息。
检查端口是否开放
我们可以使用以下命令来检查目标服务器上的端口是否开放:
python -c 'import socket; socket.create_connection ( ("127.0.0.1", 15672))' && echo $?
将“127.0.0.1”替换为目标 IP,将“15672”替换为目标端口。然后在你的 shell 会话中执行它。
如果端口是开放的,控制台会打印一个“0”。如果连接被拒绝(通常意味着端口是关闭的)或者遇到 Python 异常,会显示类似以下的错误信息:
Traceback (most recent call last):
File "<string>", line 1, in <module>
ConnectionRefusedError: [Errno 111] Connection refused
但是,如果目标服务器上没有应用程序监听我们想要检查的端口怎么办?
在这种情况下,我们可以利用 Python 内置的 HTTP 服务器。在目标服务器上执行 python -m http.server 9999
(使用 Python 3.X)或者 python -m SimpleHTTPServer 9999
(使用 Python 2.X)(将 9999 替换为所需的端口)。这些命令会创建一个监听指定端口的 HTTP 服务器,作为一个基本的文件列表 Web 应用。然后我们可以使用上面提到的命令来验证网络连通性。
Serving HTTP on 0.0.0.0 port 9999 (http://0.0.0.0:9999/) ...
解析域名
我们可以使用以下命令来解析域名:
python3 -c 'import socket; print (socket.gethostbyname ("google.com"))'
将 google.com 替换为目标域名,并执行命令。
如果域名可以解析,与该域名相关联的 IP 地址会被打印出来。另一方面,如果有问题,会显示类似以下的 Python 错误信息:
Traceback (most recent call last):
File "<string>", line 1, in <module>
socket.gaierror: [Errno -2] Name or service not known
结论
Python 作为一个方便的替代方案,因为它通常已经安装在大多数 Linux 发行版中。它允许用户执行基本的网络操作,如检查端口开放和验证域名解析。
下次你遇到网络问题时,记住 Python 是一个非常有价值的工具,它可以高效和有效地解决这些问题。这种能力也是 Python 在开发者和系统管理员之间如此受欢迎的另一个原因。
相关链接
About
- 本文首发 Medium 🔗
- 由 Bing / GPT 辅助翻译回中文
- 长按关注不迷路:medium/@Stark-X 🔗, blog/@Stark-x 🔗