本地有两台机器 - Windows 和 Linux。我正尝试在 Windows 机器上运行远程调试(使用 eclipse)到 Linux 机器(Fedora)上的 Tomcat 应用程序。我在 Linux 机器上启用了调试端口 8800,启动日志显示“正在监听 8800 处的传输 dta_socket” 现在,当我尝试将我的 Eclipse 连接到它时,我得到了“无法连接到远程虚拟机。连接被拒绝。”
这是Linux上的端口描述
lsof -i:8800
命令 PID 用户 FD 类型 设备大小/关闭节点名称
java 21930 root 4u IPv4 59436 0t0 TCP *:sunwebadmin(侦听)
网络状态-tulpn
Proto Recv-Q Send-Q 本地地址 外部地址 状态 PID/程序名称
tcp 0 0 0.0.0.0:8800 0.0.0.0:* 侦听 21930/java
当我点击该网址时http://{linux-ip}:8800 从任何一台机器上,Tomcat 日志都说 调试器连接失败:握手失败
显然端口无法访问,因此调试器无法连接。请建议应遵循哪些步骤。任何指示也会有所帮助。
答案1
我猜是防火墙的问题。要诊断,请切换到 root 或使用sudo
以下命令执行:
首先,service iptables status
将向您显示当前规则。根据防火墙规则的深奥程度,您可能需要将它们添加到主要问题中进行调试,但本质上您要寻找的是接受 TCP 端口 8800 的行,然后是拒绝所有连接的行。
例如
Table: filter
Chain INPUT (policy ACCEPT)
num target prot opt source destination
...
14 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:8800
15 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
如果您的输入链上没有 REJECT 行,那么防火墙可能已经关闭。
解决此问题的一种方法显然是关闭防火墙(service iptables stop
),尽管这违背了安装防火墙的整个目的。
如果需要添加新的防火墙规则,您有以下几种选择:
使用 Fedora 附带的优秀防火墙配置工具 (system-config-firewall),可以在 Gnome 中的系统->管理->防火墙菜单项中找到。
在命令行中,通过执行以下操作在 REJECT 规则之前插入一条新规则(使用我上面示例中的数字):。
iptables -I INPUT 15 -m state --state NEW -m tcp -p tcp --dport 8800 -j ACCEPT
请注意,这些更改不是永久性的,将不会下次重启后仍会继续存在。手动编辑
/etc/sysconfig/iptables
文件并在 REJECT 规则之前向防火墙添加规则 (-A INPUT -m state --state NEW -m tcp -p tcp --dport 8800 -j ACCEPT
)。循环防火墙服务以通过 来获取更改service iptables restart
。这些更改将要每次启动防火墙服务时都会应用。
答案2
您有可能已经在 Fedora 上安装了默认防火墙规则。
运行 /etc/init.d/iptables stop
检查这是否是问题所在
答案3
从一些基本的网络故障排除开始。尝试远程登录到端口,看看它是否真的开放
telnet IP 8800
会给你
Trying IP.ADD.RE.SS...
Connected to IP.ADD.RE.SS.
Escape character is '^]'.
如果中间有防火墙,则会拒绝数据包。
Trying IP.ADD.RE.SS...
telnet: connect to address IP.ADD.RE.SS: Connection refused
如果防火墙丢弃数据包,则会出现超时。
答案4
感谢大家提供的所有信息……抱歉这么晚才回复,但真正的问题出在 LINUX 机器上。它没有在我所在组织使用的 DNS 中注册。因此无法使用主机名访问该机器,只能通过 IP(动态)访问。
并且我还按照 Ophidian 给出的规则进行了更改。然后它就对我起作用了。
再次感谢大家,你们的意见帮助我解决了这个问题。