Вопрос

У меня есть код С#, который сопоставляет процессы с IP-адресами. По сути, я пытаюсь написать какое-то программное обеспечение, которое будет просматривать процесс и давать мне IP-адрес, чтобы я мог написать монитор, который позволит друзьям находить в играх.

Хотя при запуске моего приложения оно обнаруживает, что игровой процесс имеет UDP-соединение, но я не могу получить IP-адрес.

Я запустил анализатор пакетов, и 78.111.229.123:32000 появляется на маршрутизаторе/шлюзе, но не отображается в моем приложении.

Есть идеи, как мне начать работу?

Это было полезно?

Решение

Как вы настраиваете сокет в игровом приложении?Можете ли вы опубликовать пример кода настройки сокета?

Используете ли вы подстановочный адрес и порт при создании сокета?Я предполагаю, что если ваше игровое приложение не привязано явно к определенному IP-адресу и порту, это может быть источником вашей проблемы.

Другой вопрос:вы пытаетесь определить локальный IP-адрес, удаленный IP-адрес или и то, и другое?

Если вы пытаетесь определить удаленный IP-адрес, это может оказаться невозможным, если только игровое приложение не использует так называемый подключенные UDP-сокеты.Здесь клиентское приложение вызывает соединение с сокетом UDP, чтобы создать связь между локальным и удаленным сокетами в базовой ОС.Это имеет определенные преимущества и недостатки, перечисленные в приведенной выше ссылке.

Редактировать

Взгляните на этот пост SO: PID из номера сокета в Windows?

Это в значительной степени подтверждает то, что я думал: если игра не использует подключенные сокеты UDP, то единственный способ получить удаленный адрес — это перехват пакетов.

Запускай игру и беги netstat -ap UDP - если вы увидите, что в списке нет удаленных адресов, это подтвердит вышеуказанное подозрение.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top