Кто-нибудь знает, как получить PID процесса, забиндившего данный UDP/TCP порт? Все, что нарыл - это винапишная GetUdpTable(...) / GetTcpTable(...). Но в MIB_[UDP|TCP]TABLE просто перечислены занятые порты без привязки к процессам.
точне iphlpapi.dll -> tcpip.sys либо iphlpapi.dll -> nsi.dll -> nsiproxy.sys какие апи юзать, смотри в импорте netstat.exe
Вот моя программа, там как раз есть ф-ция получения портов и PID. http://www.gfs-team.ru/release/download/272
По-хорошему это делается так: GetExtendedTcpTable() GetExtendedUdpTable() Но это будет работать только начиная с Windows XP со вторым пакетом обновлений. На более ранних версиях доступны следующие функции: AllocateAndGetTcpExTableFromStack() AllocateAndGetUdpExTableFromStack() На данный момент считаются устаревшими и не поддерживаются. Пример их использования см. выше пост №5 и ещё здесь.
В яблочко! GetExtendedTcpTable ( pTcpTable, ..., AF_INET, TCP_TABLE_OWNER_PID_LISTENER, ...) : MIB_TCPTABLE_OWNER_PID -> pTcpTable, MIB_TCPROW_OWNER_PID (- MIB_TCPTABLE_OWNER_PID, где typedef struct { DWORD dwState; DWORD dwLocalAddr; DWORD dwLocalPort; // <----------<<< то, что мне надо DWORD dwRemoteAddr; DWORD dwRemotePort; DWORD dwOwningPid; // <---------<<< то, что мне надо } MIB_TCPROW_OWNER_PI //-------------------------------[вопрос решен]------------------------------ ПС: раз пошла такая пьянка, может кто-нибудь объяснит, как различные сетевые мониторы, определяют ОС удаленного узла, какие приложения какие порты слушают, номера открытых/закрытых портов, если пациент роутер - модель роутера, и т.д.? Nmap иногда выдает целый набор вариантов. Значит ли это что методы определения оси и т.п. сугубо эвристические?