Я написал сценарий Python для прослушивания на порту 2626 и выполнил сценарий.
доказательство того, что localhost прослушивает
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
В чем может быть причина, по которой telnet на порту 2626 отказывается от соединений с удаленных компьютеров и как я могу это исправить?
127.0.0.1:2626
из вывода netstat указывает, что ваш скрипт на Python принимает соединения только на 127.0.0.1
. Если вы хотите иметь возможность принимать соединения с любого адреса, пусть он принимает соединения на 0.0.0.0
Этот вывод показывает, что ваша программа прослушивает только 127.0.0.1
. Прослушивающие сокеты (открытые порты) либо привязаны к определенному интерфейсу, как в этом случае, либо ко всем интерфейсам (в этом случае вы увидите 0.0.0.0
как обозначение «любого адреса»). Последствия привязки только к 127.0.0.1
состоят в том, что только подключения через этот интерфейс будут идти к слушающему сокету и, следовательно, к вашей программе. Если вы используете библиотеку socket
в python, либо связывайте свой внешний 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 '^]'.