Skip to content

在受限环境排查网络问题

Posted on:2023年11月22日 at 05:25
  |   4 min read   |  

为了降低风险,我们通常在生产环境中有限制的权限。

在这些环境中,我们通常无法使用常用的网络故障排除工具,如 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