Как заставить netcat принимать соединения извне локальной сети? - PullRequest
27 голосов
/ 31 марта 2010

Я использую netcat в качестве бэкэнда для перемещения данных назад и вперед для программы, которую я создаю. Я протестировал свою программу в локальной сети, и, как только она заработала, я подумал, что нужно просто переадресовать порт с моего маршрутизатора, чтобы моя программа работала через Интернет. Увы! Похоже, что это не так.

Если я запускаю прослушивание netcat через порт 6666 с:

nc -vv -l -p 6666,

затем перейдите на 127.0.0.1:6666 в браузере, как и ожидалось, я вижу, что HTTP-запрос GET приходит через netcat (а мой браузер сидит в ожидании напрасно). Однако, если я перейду к my.external.ip.address:6666, ничего не произойдет, и в браузере появится сообщение «Не удалось подключиться к my.external.ip.address:6666».

Я знаю, что порт правильно перенаправлен, так как www.canyouseeme.org говорит, что порт 6666 открыт (а когда netcat не прослушивает, он закрыт).

Если я запускаю netcat с -g my.adslmodem's.local.address для установки адреса шлюза, я получаю такое же поведение. Я правильно использую эту опцию командной строки? Любое понимание того, что я делаю неправильно?

Ответы [ 3 ]

26 голосов
/ 31 марта 2010

Вы должны слушать на общедоступном интерфейсе. В настоящее время вы слушаете локальный хост, к которому никто за пределами вашего компьютера не может подключиться.

Ваш учет может отличаться, но с моей реализацией netcat Я должен использовать эту командную строку для прослушивания всех открытых интерфейсов.

netcat -vv -l 0.0.0.0 6666

14 голосов
/ 31 марта 2010

Оказывается, нет проблем. Это выглядит так только потому, что мой маршрутизатор не разрешает шпильки. То есть, хотя я правильно настроил его, маршрутизатор не установил соединение, когда и источник, и пункт назначения находятся за NAT. Просто ncat -l -p 6666 работает нормально, если запрос приходит из-за пределов локальной сети. Чтобы проверить это, я зашел на my.external.ip.address:6666 с моего мобильного телефона 3G и, конечно же, поступил HTTP-запрос:)

Этот ответ пришел от: вопрос о сбое сервера , и именно здесь я должен был задать этот вопрос. Извиняюсь за это.

8 голосов
/ 05 июля 2016

Чтобы указать адрес для прослушивания:

nc -l -s <LISTENING_IP_ADDR> -p <LISTENING_PORT>

Проверено на Debian Jessie с netcat-traditional-1.10-41

...