我想知道是否有人能帮我解决这个难题。我们有一个设备与我们的服务器通信但没有发回任何数据。
我可以 ping 通该 IP 地址,并且 ping 成功,但是当我在机器上执行 netstat 时,没有列出 IP 地址。
为什么会这样?为什么 IP 地址可以 ping 通但无法连接?还有其他工具可以帮助我诊断此问题吗?
更新:
抱歉使用下面的评论。我不知道我可以编辑自己的帖子!!
EightBitTony,我想我明白你说的“netstat -a 显示连接的机器,而不仅仅是任何地方每台机器的 IP 地址”的意思。
该外站设备的唯一工作是上线并向我们的服务器发送数据。该设备的 IP 地址为:10.113.201.155,它应连接的端口号为:6102。
当我执行 netstat 时,我期望它连接到这个端口号(6102),但事实并非如此。6102 是服务器软件监听的端口。
这个外站已经两天没有发回任何数据了,这是我们遇到的问题,但它可以 ping 通,表明它在线。不幸的是,这个设备不在办公室里,我没法简单地重置它。
我们将不得不派出一个维护团队,但我想更好地了解发生了什么以及为什么会发生这种情况。
我还有一个问题。如果外站上线但未绑定到端口 6102,它是否不会显示在 netstat 中?我想我知道答案(不)。
更新 2:
谢谢 EightBitTony。你向我完美地解释了这一点,我明白你的意思。读完你的回答后,我认为该应用程序在该机器上以某种方式出现故障,处于某种崩溃状态。
我试图“提升”您的答案,但没有足够的代表点数!!
答案1
您可以在网络路由和防火墙允许的任何地方 ping 任何 IP 地址,但这并不意味着它已连接到您的计算机,因此不会显示在 netstat 中。
Netstat 显示哪些 TCP 端口有活动连接(即已连接的机器,而不仅仅是可能或曾经连接的机器)。Ping 使用 ICMP(有时是 UDP),不依赖于 TCP 端口。
在您的情况下,听起来好像应用程序没有连接,但操作系统仍在运行,因此您可以 ping 机器(因为这是操作系统响应),但应用程序无法连接到您的服务器,因为它没有运行,或者因为它有其他问题。
如果您无法远程重新连接并登录检查应用程序,则需要派人去处理。
你还问过,
我还有一个问题。如果外站上线但没有绑定到端口 6102,它不会显示在 netstat 中吗?我想我在这里知道答案。
我们不知道这个“分站”运行的是什么操作系统或应用程序,但应用程序连接到端口,而操作系统(或者更确切地说,操作系统的组件)启动和管理网络。所以如果你应用连接后,您会看到它。但是,如果外站启动并启动网络,它将不会执行任何操作,直到正在运行的应用程序尝试执行任何操作,如果它崩溃,那么您将看不到任何内容。网络和应用程序是分开的。
最后一个例子,假设您的计算机可以连接到互联网,您可以,ping www.google.com
但这并不意味着 www.google.com 曾经尝试连接到您的计算机。
答案2
您对 netstat 使用了哪些选项?如果您想捕获 ICMP 流量,则需要添加-p icmp
到命令行中。您可能无法在 netstat 输出中看到设备的地址(EightBitTony 的答案会告诉您原因),但如果两个主机之间成功通信,则其 IP 地址应该在服务器的 ARP 缓存中;swiftarp -a
会告诉您这一点,假设两个主机位于同一子网中。
您还可以使用 Wireshark 或类似程序捕获从设备到达服务器的应用程序流量,从而获得更多有用的信息。