Получить PID процесса, забиндившего UDP/TCP порт

Тема в разделе "WASM.NETWORKS", создана пользователем _noobas_, 27 ноя 2009.

  1. _noobas_

    _noobas_ New Member

    Публикаций:
    0
    Регистрация:
    16 ноя 2009
    Сообщения:
    11
    Кто-нибудь знает, как получить PID процесса, забиндившего данный UDP/TCP порт?

    Все, что нарыл - это винапишная GetUdpTable(...) / GetTcpTable(...).
    Но в MIB_[UDP|TCP]TABLE просто перечислены занятые порты
    без привязки к процессам.
     
  2. ohne

    ohne New Member

    Публикаций:
    0
    Регистрация:
    28 фев 2009
    Сообщения:
    431
    iphlpapi.dll
    tcpip.sys
    nsiproxy.sys
     
  3. ohne

    ohne New Member

    Публикаций:
    0
    Регистрация:
    28 фев 2009
    Сообщения:
    431
    точне
    iphlpapi.dll -> tcpip.sys
    либо
    iphlpapi.dll -> nsi.dll -> nsiproxy.sys

    какие апи юзать, смотри в импорте netstat.exe
     
  4. _noobas_

    _noobas_ New Member

    Публикаций:
    0
    Регистрация:
    16 ноя 2009
    Сообщения:
    11
    спс, погляжу
     
  5. Luke

    Luke New Member

    Публикаций:
    0
    Регистрация:
    10 сен 2009
    Сообщения:
    11
  6. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    По-хорошему это делается так:

    GetExtendedTcpTable()
    GetExtendedUdpTable()

    Но это будет работать только начиная с Windows XP со вторым пакетом обновлений. На более ранних версиях доступны следующие функции:

    AllocateAndGetTcpExTableFromStack()
    AllocateAndGetUdpExTableFromStack()

    На данный момент считаются устаревшими и не поддерживаются. Пример их использования см. выше пост №5 и ещё здесь.
     
  7. _noobas_

    _noobas_ New Member

    Публикаций:
    0
    Регистрация:
    16 ноя 2009
    Сообщения:
    11
    В яблочко!

    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 иногда выдает целый набор вариантов. Значит ли это что методы определения оси и т.п. сугубо эвристические?
     
  8. ohne

    ohne New Member

    Публикаций:
    0
    Регистрация:
    28 фев 2009
    Сообщения:
    431
    йес
     
  9. Folk Acid

    Folk Acid New Member

    Публикаций:
    0
    Регистрация:
    23 авг 2005
    Сообщения:
    432
    Адрес:
    Ukraine
    По открытым портам. Иногда по тому какие порты reject а какие drop
     
  10. _noobas_

    _noobas_ New Member

    Публикаций:
    0
    Регистрация:
    16 ноя 2009
    Сообщения:
    11
    фак


    UDP так проанализировать не получится?
     
  11. _noobas_

    _noobas_ New Member

    Публикаций:
    0
    Регистрация:
    16 ноя 2009
    Сообщения:
    11
    И еще вопрос. Кэширует ли комутатор маки источников отфильтрованных пакетов? Кто-нибудь проверял?