Я написал скрипт 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 '^]'.