通过 telnet 连接到应用程序时的 TCP RST - Windows

通过 telnet 连接到应用程序时的 TCP RST - Windows

我有一个在 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)或选定的接口。

相关内容