GetExtendedUdpTable и удаленный IP-адрес
Вопрос
У меня есть код С#, который сопоставляет процессы с IP-адресами. По сути, я пытаюсь написать какое-то программное обеспечение, которое будет просматривать процесс и давать мне IP-адрес, чтобы я мог написать монитор, который позволит друзьям находить в играх.
Хотя при запуске моего приложения оно обнаруживает, что игровой процесс имеет UDP-соединение, но я не могу получить IP-адрес.
Я запустил анализатор пакетов, и 78.111.229.123:32000 появляется на маршрутизаторе/шлюзе, но не отображается в моем приложении.
Есть идеи, как мне начать работу?
Решение
Как вы настраиваете сокет в игровом приложении?Можете ли вы опубликовать пример кода настройки сокета?
Используете ли вы подстановочный адрес и порт при создании сокета?Я предполагаю, что если ваше игровое приложение не привязано явно к определенному IP-адресу и порту, это может быть источником вашей проблемы.
Другой вопрос:вы пытаетесь определить локальный IP-адрес, удаленный IP-адрес или и то, и другое?
Если вы пытаетесь определить удаленный IP-адрес, это может оказаться невозможным, если только игровое приложение не использует так называемый подключенные UDP-сокеты.Здесь клиентское приложение вызывает соединение с сокетом UDP, чтобы создать связь между локальным и удаленным сокетами в базовой ОС.Это имеет определенные преимущества и недостатки, перечисленные в приведенной выше ссылке.
Редактировать
Взгляните на этот пост SO: PID из номера сокета в Windows?
Это в значительной степени подтверждает то, что я думал: если игра не использует подключенные сокеты UDP, то единственный способ получить удаленный адрес — это перехват пакетов.
Запускай игру и беги netstat -ap UDP
- если вы увидите, что в списке нет удаленных адресов, это подтвердит вышеуказанное подозрение.