Есть ли идентификатор сети для хоста в локальной сети?
Маршрутизатор выставляет себя снаружи по IP как 66.249.89.104
и многие хосты могут подключиться к нему, чтобы сформировать локальную сеть.
Мой вопрос:
Есть ли способ идентифицировать конкретный хост в этой локальной сети?
Все, что я попробовал, это какая-то догадка, которая без сомнения провалилась:
ping host_lan_ip@66.249.89.104
Ping request could not find host host_lan_ip@66.249.89.104. Please check the name and try again.
Я думаю, что поскольку каждый хост в локальной сети может получать свои пакеты извне маршрутизатора, ОБЯЗАТЕЛЬНО должен быть способ идентифицировать каждый хост, но что это?
ОБНОВЛЕНИЕ Как добиться перенаправления портов, кроме как настроить его в маршрутизаторе?
ОБНОВИТЬ
Теперь я думаю, что UPnP - это путь, но есть ли рабочий образец для этого?
1 ответ
Вы не можете инициировать соединение с маршрутизатором. Внутренний хост должен начать с переадресации порта на себя, а затем прослушивать этот порт.
UPnP - это способ настроить порт вперед. Затем вам нужно решить проблему с каким портом, если вы хотите общаться с несколькими клиентами за одним и тем же NAT, они не могут все использовать один и тот же порт, поэтому вам нужен какой-то способ узнать, какой клиент использует какой порт. Центральный способ, на котором клиенты могут перечислять себя, обычно является способом сделать это (как игровые серверы, перечисленные в лобби, главный сервер отслеживает IP/ порт, так что все остальные могут подключиться)
Быстрый поиск в Google обнаружил библиотеку C++ UPnP, которую, возможно, стоит попробовать:
http://www.koders.com/cpp/fid2A3FF8255A7B67758E80E0423AA46F9DD8FD734A.aspx?s=setwindowshookex
и Windows UPnP API:
http://msdn.microsoft.com/en-us/library/aa382303%28VS.85%29.aspx