Как заставить netcat принимать подключения из-за пределов локальной сети?

Я использую 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 для установки адреса шлюза, я получаю такое же поведение. Правильно ли я использую этот параметр командной строки? Любое понимание того, что я делаю неправильно?


person Chris    schedule 31.03.2010    source источник


Ответы (3)


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

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

netcat -vv -l 0.0.0.0 6666

person Kent    schedule 31.03.2010
comment
Спасибо за Ваш ответ. Я не думаю, что это так, поскольку netcat с радостью принимает подключения от других компьютеров в моей сети. Кроме того, когда он запускается, он отображает прослушивание [любого] 6666 .... Я попробовал ваше предложение (с -p перед портом, иначе он выбирает случайный порт) и получил 0.0.0.0: обратный поиск хоста не удалось: Неизвестный хост :( - person Chris; 31.03.2010
comment
Работает и на Cygwin (nc) - person golimar; 19.10.2017
comment
Отлично :) Работает для меня - person dimba; 09.10.2018

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

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

person Chris    schedule 31.03.2010
comment
Ха. Не волнуйтесь. Я задал аналогичный вопрос на SF, и они подумали, что это слишком ново. Я не мог сказать, что такое шпилька (и люди продолжали ссылаться на шпильку NAT и говорить мне о RTFM), пока я не прочитал этот ответ. Спасибо. - person isomorphismes; 28.08.2014
comment
Это сработало и для меня. Я не использовал 0.0.0.0. Как вы сказали, только порт на целевой машине. Спасибо! - person Dino Velić; 14.01.2015

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

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

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

person Antonio Bardazzi    schedule 05.07.2016
comment
Невозможно использовать одновременно -l и -s. - person benedikt; 07.10.2016
comment
@benedikt: некоторые версии nc могут, некоторые нет. nc.traditional в Debian можно: nc -l -s 192.168.18.100 -p 6666 Вместо этого /bin/nc.openbsd в Ubuntu нельзя: nc -l -s 192.168.244.163 -p 6666 nc: cannot use -s and -l - person Antonio Bardazzi; 10.10.2016
comment
Спасибо за разъяснения - person benedikt; 10.10.2016