2014-02-13 2 views
0

У меня есть некоторые программы, работающие на порт 50885 на компьютере за NAT-Получить NAT переведенного IP и порт некоторых локального порта

Как я могу получить доступ к этому порту из интернета? Я могу инициировать что-то с компьютера, поскольку я должен запустить приложение.

Если я правильно понял: с моим местным адресом: порт, скажем: 192.168.0.10:50885 Если что-то происходит через NAT, инициированный компьютером, тогда должна быть какая-то переадресация портов, созданная автоматически, и там должен быть своего рода публично IP: PORT, который должен постучать по порту 50885 на компьютере за NAT. Я прав?

Если да, не могли бы вы спросить серверный скрипт, как в php, Эй, скажите мне, что это публично IP & Порт?

Я немного смущен насчет переадресации портов.

+0

Что вы подразумеваете под «за NAT» (NAT - это действие, а не устройство)? У вас есть маршрутизатор с настройкой перевода порта/адреса? На ваш вопрос об обнаружении этой конфигурации - с этого локального хоста, это невозможно. – admdrew

+0

Да, я имею в виду за маршрутизатором –

+0

Эта конфигурация NAT известна только маршрутизатору. Предположим, ваш маршрутизатор настроен на перевод всего входящего трафика порта 50885 на ваш общедоступный IP-адрес (пример: 12.34.56.78), чтобы перейти на ваш внутренний хост, 192.168.0.10.С внешней точки зрения отправитель знает/заботится о том, что ему нужно использовать в качестве пункта назначения (12.34.56.78:50885). С внутренней точки зрения ваш хост (192.168.0.10) просто получает трафик на 50885; поскольку маршрутизатор уже перевел трафик, ваш внутренний узел не знает/не заботится об общедоступном IP-адресе, который был исходным пунктом назначения от внешнего отправителя. – admdrew

ответ

0

Да, вам нужно будет запросить внешний скрипт для получения общедоступной информации с другой стороны маршрутизатора. Существует множество веб-сайтов для получения IP-адресов (http://whatismyip.com, http://iplookup.flashfxp.com и т. Д.), Но я никогда не видел того, который сообщает об IP и портах, они обычно сообщают только IP. Большинство NAT используют отношения 1 к 1 на портах, хотя они могут использовать разные порты. Если у вас есть собственный веб-сайт (или есть знакомый, который делает это), было бы не очень сложно написать собственный скрипт для извлечения публичного порта.

Если вы подключаете OUTBOUND TCP от вашего ПК локальной сети через маршрутизатор к внешней стороне, тогда маршрутизатор генерирует и отслеживает всю необходимую информацию поиска NAT автоматически, чтобы затем пересылать трафик туда и обратно для этого соединения.

Если вы внесли INBOUND TCP-соединение извне через маршрутизатор на ваш компьютер локальной сети, информация об обнаружении NAT не будет установлена ​​автоматически. Маршрутизатору необходимо сообщить заранее, с помощью правила Port Forwarding, который частный LAN IP: порт для прямого входящего соединения, когда он получает новое клиентское соединение в определенном общедоступном IP-порту. Если ваш маршрутизатор поддерживает uPNP (и если он включен), то ваше приложение может использовать API/библиотеку uPNP для программируемого создания правила переадресации портов в маршрутизаторе, когда приложение открывает прослушивающий сокет. В противном случае, если uPNP недоступен, вам необходимо настроить маршрутизатор вручную.

+0

'было бы не очень сложно написать собственный скрипт для извлечения публичного порта. Как так? Только маршрутизатор имеет истинную видимость по сравнению с переводами адресов; gleaning переведенная информация за пределами маршрутизатора может основываться только на предположениях. Даже используя такой ресурс, как whatismyip.com, вы получите общедоступный IP-адрес, который будет маршрутизироваться к вам, но технически невозможно узнать, к чему именно привязан этот IP-адрес. Подумайте о домашнем маршрутизаторе, подключенном к кабельному модему: whatismyip не поможет вам найти интерфейс маршрутизатора, подключенный к модему. – admdrew

+0

Для перевода входящего порта адресаты входящих пакетов уже были изменены маршрутизатором восходящего потока к моменту, когда цель их получит, так что цель не может знать исходный IP-адрес назначения, настроенный отправителем. Истинный 1: 1 NAT просто переведет * весь * трафик, предназначенный для настроенного «внешнего» IP внутреннего адресата, и явный перевод порта не нужен (очевидно, это действительно возможно только при управлении несколькими внешними IP-адресами, а ваш маршрутизатор поддерживает привязку более одного IP-адреса к его внешнему внешнему интерфейсу). – admdrew

+0

@admdrew: сценарий на общедоступном сервере сможет получить общий порт маршрутизатора, потому что порт, используемый маршрутизатором для соединения с сервером. Таким образом, серверный скрипт сможет запросить соединение между маршрутизатором и сервером, чтобы определить порт, который использует маршрутизатор, через 'getpeername()' или аналогичный API. Я никогда не говорил, что серверу можно определить IP-адрес LAN: порт, который находится за маршрутизатором. Но он может определить общедоступный IP: порт на самом маршрутизаторе, который затем может быть передан по соединению обратно на ПК локальной сети. –

0

В моем понимании, если вы используете socket local_ip: local_port для подключения remote1_ip: remote1_port. После NAPT-устройства local_ip: local_port становится transl_ped: transl_port. remote1 может получить translation_ip: translation_port, но я не нашел такого сервиса. В следующий раз, когда вы установили новое соединение с remote2_ip: remote2_port с тем же клиентом local_ip: local_port, будет ли transl_ip: translation_port оставаться неизменным? Обычно NAPT sever резервирует его в течение некоторого времени, скажем, 5 минут. Поэтому, если кто-то из remote3: remote3_port подключит transl_ip: translation_port в течение 5 минут (с момента последнего пакета, отправленного в transl_ip: translation_port), сервер NAPT направит трафик на local_ip: local_port. Если remote3_port = remote1_port, хотя remote1_ip! = Remote1_ip, соединение будет приниматься локальным сокетом. Если информация истекла, NAPT sever будет выделять новый translation_ip2: translation_port2.

Смежные вопросы