Я использую 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
работает нормально, если запрос приходит из-за пределов LAN. Чтобы проверить это, я перешел на my.external.ip.address:6666
с моим мобильным телефоном 3G и, конечно же, HTTP-запрос пришел :)
Итак, если вы сканируете свою систему из системы за пределами вашей сети, в то время как netcat слушает 6666, внешняя система видит, что у нее что-то работает. Но когда вы пытаетесь изнутри своей сети подключиться к внешнему IP-адресу, чтобы направить его обратно, выдает ошибку, а netcat не показывает никаких подключений? Я почти подозреваю, что у вас проблема с маршрутизацией при попытке перейти с вашего локального компьютера на маршрутизатор и обратно, возможно, проблема с NAT на вашем оборудовании. Какое устройство вы используете? Возможно, вы захотите проверить, так ли это, попытавшись подключиться к этому порту (или попросить друга попробовать его) из-за пределов вашей сети и посмотреть, будет ли результат таким же.