我有一个在 Windows 上运行的应用程序。
该应用程序侦听端口 54000。
我可以从本地计算机连接到该应用程序,并且它运行良好:
telnet 127.0.0.1 54000
现在,我尝试从远程连接到此应用程序。我首先为应用程序添加入站规则,然后为端口添加入站规则,最后我禁用了专用网络的防火墙(我确保我的网络设置为专用网络),因为以上方法均不起作用。
当我尝试远程使用 telnet 连接时,我得到:
telnet 192.168.1.227 54000
Connecting To 192.168.1.227...Could not open connection to the host, on port 54000: Connect failed
当我尝试 ping 它时,ping 成功。
在本地机器上我检查端口是否打开,以确保:
PS C:\Windows\system32> Get-Process -Id (Get-NetTCPConnection -LocalPort 54000).OwningProcess
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
921 52 125336 120816 7.47 7008 1 myApp
我在本地机器上下载了 Wireshark 来查看发生了什么。
9345 141.851696 192.168.1.93 192.168.1.227 TCP 62 65153 → 54000 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 SACK_PERM=1
9346 141.851793 192.168.1.227 192.168.1.93 TCP 54 54000 → 65153 [RST, ACK] Seq=1 Ack=1 Win=0 Len=0
如您所见,响应是 TCP RST,这意味着应用程序或系统不想对话。
我想知道是谁发送了 TCP RST 系统或应用程序?
问题可能出在应用程序本身吗?例如,它可以回答本地主机但不能回答其他主机?
关于如何进一步调查此问题,有什么想法吗?
答案1
如果您可以从本地主机连接到应用程序,但不能从远程主机连接到应用程序,则请确保:
1. 在防火墙中添加允许连接到所选端口或应用程序的入站规则。2
. 确保应用程序在正确的接口上侦听。
这可以通过在 cmd 中运行来检查:
netstat -a -n
选项:
-a 显示所有活动的 TCP 连接以及计算机正在侦听的 TCP 和 UDP 端口。
-n 显示活动的 TCP 连接,但地址和端口号以数字表示,并且不尝试确定名称。
搜索应用程序应该使用的端口并检查本地地址:
Proto Local Address Foreign Address State
...
TCP 127.0.0.1:54000 0.0.0.0:0 LISTENING
...
本地地址是应用程序监听的接口。如果将其设置为 127.0.0.1,它将仅接受来自本地主机的连接。
在应用程序中找到一种方法来将其更改为监听任何接口(0.0.0.0)或选定的接口。