2009-05-05 4 views
2

У меня есть службы Windows, которые привязаны к некоторому TCP-порту, этот порт используется для IPC между моим приложением.Как узнать, какое локальное приложение подключено к моему сокету (Windows)

Есть ли способ программирования (WinAPI/WinSocket и т. Д.), Чтобы узнать, какое приложение подключено к моему порту?

В частности, в моих службах Windows я хотел бы получить PID процесса, подключенного к моему порту.

+0

Это похоже на мою проблему: http://stackoverflow.com/questions/819708/pid-from-socket-number-on-windows Ответ не такой же. – smok1

ответ

3

Если вы ищете WinAPI способ сделать то же самое, как netstat. Возможно, вам нужен следующий API: GetExtendedTcpTable

Ищите результаты с аргументом TCP_TABLE_OWNER_PID_ALL.

В результате структура MIB_TCPTABLE_OWNER_PID имеет множество структур MIB_TCPROW_OWNER_PID, которая имеет dwOwningPid, который является идентификатором процесса, который вы ищете.

+0

Это поддерживается на WinXP SP2 +. Если вы ищете совместимость более старых версий, найдите API AllocateAndGetTcpExTableFromStack. –

+0

Извините, но это были не мои вопросы, я хотел знать PID приложения, подключенного к моему порту, а не PID приложения, которое привязывается к порту. – Baget

+0

Вы не можете знать это с удаленной машины. Вы знаете только порт источника и IP. –

0

Если вы имеете в виду, что процесс использования (прослушивания или подключен с помощью) ваши порты, используйте следующую команду:

netstat -a -b -o -n

-a покажет вам все соединения (даже если они в ПРОСлУШИВАНИЕ состоянии)

-b покажет вам исполняемый файл приложения, использующие этот порт

-o покажет вам PID приложения

-n не будет делать Dns переводы (вы, наверное, не нужно это для зная о применении), не необходимые

+0

Спасибо за ответ, но мне нужен способ программирования для этого. – Baget