我编写了一个python脚本来监听2626端口并执行了该脚本。
本地主机正在监听的证明
tcp 0 0 127.0.0.1:2626 0.0.0.0:* LISTEN
我可以使用以下命令通过 telnet 连接到 localhost 上的该端口:
:~$ telnet localhost 2626
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
但是,当我尝试从远程机器连接时,连接被拒绝。
:~$ telnet 128.251.xxx.xxx 2626
Trying 128.251.xxx.xxx...
telnet: Unable to connect to remote host: Connection refused
我甚至发出了以下命令来接受端口 2626 上的流量:
sudo iptables -A INPUT -p tcp -i eth0 --dport 2626 -j ACCEPT
端口 2626 上的 telnet 拒绝远程机器的连接的原因可能是什么?我该如何修复它?
答案1
该输出显示您的程序正在监听127.0.0.1
。监听套接字(开放端口)要么绑定到特定接口(如本例所示),要么绑定到所有接口(在这种情况下,您将看到0.0.0.0
“任何地址”的符号)。绑定到127.0.0.1
仅意味着只有通过该接口的连接才会进入监听套接字,从而进入您的程序。如果您使用的是 python 的socket
库,请在调用中绑定到您的外部 IP bind()
,或绑定到所有 IP,如下所示:
>>> import socket
>>> s = socket.socket()
>>> s.bind(('', 6666))
>>> s.listen(1)
它给出了你想要的 netstat 结果
tcp 0 0 0.0.0.0:6666 0.0.0.0:* LISTEN
确实可以从另一台机器连接
ial@roach> telnet polihale 6666
Trying 128.243.20.139...
Connected to polihale.
Escape character is '^]'.
答案2
127.0.0.1:2626
netstat 输出的结果表明你的 python 脚本只接受 上的连接。127.0.0.1
如果你希望能够接受来自任何地址的连接,请让它接受0.0.0.0