我正在尝试帮助朋友解决这个问题,所以我不知道所有的细节,但我想我会在这里发帖看看任何可能性。
我们有一个自定义应用程序,它使用客户端和服务器之间的单个 TCP 端口进行通信,并希望它在本地和远程均可访问。奇怪的是,当客户端在远程(互联网)时,它可以工作,但在本地则不行。端口转发设置在路由器中,路由器是 Cisco E800,运行端口扫描表明相关 TCP 端口对内部网络和互联网都开放,但是,应用程序不会在本地连接。它确实可以远程连接,因此我们知道服务器软件设置正确等。连接两端的操作系统都是 Windows 7,并且 Windows 防火墙已关闭。
我们还有什么可以尝试或测试来确定问题所在吗?我已经运行了端口发现扫描并在服务器上运行了 netstat。它显示远程连接为“已建立”,另一个具有机器名称的连接在相关端口上显示为“正在监听”。
抱歉,我无法提供更详细的信息,这个问题没有任何意义。
编辑:由于看起来一切都设置正确,正确的端口已打开等,而且我们还知道服务器运行正常,因为它在远程位置工作,也许是时候尝试某种数据包嗅探/监控了,这样我们就可以查看该端口上发生了什么...有没有简单的方法可以做到这一点?通过这种方式,我们可以看到是否正在进行尝试,本地请求和远程请求之间是否存在任何差异,等等。
答案1
在该路由器上,您要查找的设置是
过滤互联网 NAT 重定向
将其关闭。该选项可防止您使用外部地址从内部连接到内部。
关闭它允许 NAT 发夹,因此它将使用来自 LAN 外部和内部的公共地址进行连接。
答案2
应用程序应该监听0.0.0.0
以太网 IP 和环回 IP(127.0.0.1
)。
事实上,只显示一个监听端口并且是主机名,这意味着应用程序只在监听以太网 IP。
检查应用程序配置并将监听 IP 更改为0.0.0.0
,然后重新启动应用程序。运行 netstat -an 并检查更改是否已应用。
如果您现在确实想更改应用程序配置,那么您必须仅使用以太网 IP 地址,并且切勿尝试使用localhost
或127.0.0.1
答案3
如果您与服务器位于同一台机器上,则尝试连接到时可能无法连接localhost
。使用netstat
来确定服务器正在监听哪些地址。假设服务器在端口 12345 上,则此命令应该有效:
netstat -an | grep 12345 | grep LISTEN
如果它没有监听 127.0.0.0、0.0.0.0 或 *,则需要连接到它正在监听的地址。您的主机条目可能将服务器名称与地址 127.0.0.1 一起列出,因此如果您尝试通过名称进行连接,则可以使用该地址。