我在端口8000上设置了一个本地运行的简单HTTP java服务器。当请求到来时,它只是打印一条消息“Hello world”。当我尝试通过运行http://localhost:8000/test从浏览器ping它时,我打印了我的消息。
我希望从另一台非本地计算机获得相同的结果。当我尝试使用我的公共IP时,可以说http:/43.xxx.xxx.xxx:8000 / test(即使是在同一台机器上)我得到一个ERR_CONNECTION_REFUSED。
我可能怀疑这与防火墙有关。任何人都可以指导我一点因为我缺乏经验吗?
提前致谢
答案 0 :(得分:1)
您没有指定服务器/防火墙正在运行的主机操作系统,因此我将保留此通用...
在不知道您的应用程序的情况下,当第一个SYN数据包显示时,服务器正在发送重置(RST数据包),表明端口(在该接口上[您的外部])已关闭。如果您无法访问要测试的远程计算机,则可以从此处(https://mxtoolbox.com/PortScan.aspx)进行快速端口扫描。可能性是,TCP / 8000不会打开。
如果它实际上已关闭,您将必须查看主机操作系统正在运行的防火墙,并了解如何允许TCP / 8000到您的主机。在主要的防火墙供应商中,您的规则看起来与此类似:
Source: Any
Destination: Your Public IP Address
Service: TCP/8000
Action: Allow
Logging: Full
话虽这么说,你提到这是一台PC,所以看看“iptables”(如果你正在运行* nix)或Windows防火墙(如果你正在运行Windows)添加防火墙规则(不幸的是我刚加入了不能提问/评论,但)。
如果你真的想知道正在发送什么数据包,请在外部接口上运行tcpdump(假设你说的是eth1)(假设你的远程IP是1.2.3.4而你的家庭公共IP是4.5.6.7):
tcpdump -nn -vvv -e -s 0 -X -c 100 -i eth1 host 1.2.3.4 and host 4.5.6.7和端口8000
如果有防火墙拒绝(不丢弃)到端口的TCP流,那么您正在寻找成功进行TCP协商或SYN / RST的SYN / SYN-ACK / ACK。
在主机操作系统防火墙上打开端口后,请查看应用程序以确保其配置正确。如果这是一个标准的Web服务器,您可以查看“允许来自”指令的配置文件,以确保每个人都可以访问该站点。如果这是您创建的自定义应用程序,则必须自行检查。
答案 1 :(得分:0)
我终于解决了我的问题。我需要在我的路由器中打开一个转发端口,将我的本地IP地址映射到公共端口。我的路由器是TP Link所以我这样做了:
http://www.tp-link.com/us/faq-72.html
另外为了让它每次都能正常工作而不必每次重新配置到路由器(因为我得到一个新的本地IP),我都按照本指南为我的服务器创建了一个静态本地IP:
http://www.tp-link.com/us/faq-182.html
感谢所有回复。