我有一台虚拟化的 CentOS 机器,其中有一个软件正在监听端口 8080。我已关闭 SELinux 并刷新了所有 iptables(因此现在没有设置规则)。我已检查netstat -nap | grep 8080
该端口是否确实打开,结果确实如此。IP 地址是 192.168.1.3。
从我的另一台机器,我想用程序连接到该端口,但失败了。运行时nmap -p 8080 192.168.1.3
它说端口已关闭!
当我使用 Wireshark 检查时,我可以看到连接的计算机正在发送 SYN 数据包,但响应的计算机(IP 为 192.168.1.3)以 SYN/RESET 响应并中断连接,而不是以 SYN/ACK 响应,从而继续传输。序列号是正确的,发送计算机发送 0,接收计算机接收 1。
奇怪的是,Nmap 可以从客户端计算机检测到其他端口已打开,但 8080 端口却没有。
这是什么问题?
编辑:
好吧,我现在不知道该相信什么。这是我发现的:
在“服务器机器”(我们这样称呼它)上监听 8080 的程序是用 Java 构建的定制 Web 服务(使用第三方库,如 EclipseLink 等)。在“服务器机器”上执行时nmap localhost
,它可以发现端口打开。在nmap 192.168.1.3
“客户端机器”上执行时,它会发现端口已关闭(如上所述)。
还有新发现:我刚刚制作了一个简单的 Java 应用程序,它只使用 ServerSocket 类来监听 8080,然后可以从“客户端机器”发现该端口。那么,这是 Web 服务应用程序的问题吗?为什么在运行 Web 服务时可以从“服务器机器”(扫描自身时,localhost)发现端口,但不能从“客户端机器”发现端口?为什么在运行监听 8080 的简单 Java 应用程序时,可以从两台机器发现端口 8080?
netstat -ntpl
tcp 0 0 ::ffff:127.0.0.1:8080 :::* LISTEN 3481/java
编辑2:
我真笨!现在我明白了,::ffff:127.0.0.1:8080
这意味着该程序只能从本地主机访问!:-D
我要在哪里进行更改才能让它监听所有主机?
答案1
8080 端口可能绑定在其他地方吗?
在主机上?
无论如何,向您展示网络配置、桥接中的虚拟机?
答案2
如果是旧版本的 centos,则可能是“/etc/hosts.{allow,deny}”的问题,但如果有 iptables,则可能不会使用这些文件。请检查这些文件是否存在。