Я использую 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
для установки адреса шлюза я получаю то же поведение. Я использую этот параметр командной строки правильно? Понимание относительно того, что я делаю неправильно?
Оказалось, что проблемы нет. Это только кажется так, потому что мой маршрутизатор не разрешает шпилечные соединения. То есть, даже если я все правильно настроил, маршрутизатор не будет устанавливать соединение, когда и источник, и получатель находятся за NAT. Просто ncat -l -p 6666
работает нормально, пока запрос приходит из-за пределов локальной сети. Чтобы проверить это, я зашел на my.external.ip.address:6666
с моего 3G мобильного телефона и, конечно, HTTP запрос прошел :)
Этот ответ пришел из: a serverfault question, где я должен был задать этот вопрос в первую очередь. Приношу свои извинения за это.
Вы должны слушать на общедоступном интерфейсе. В настоящее время вы слушаете на localhost, где никто за пределами вашего компьютера не может подключиться.
Ваш опыт может отличаться, но с моей реализацией netcat я должен использовать эту командную строку для прослушивания всех публичных интерфейсов.
netcat -vv -l 0.0.0.0 6666