GetExtendedTcpTable и GetExtendedUdpTable

Тема в разделе "WASM.WIN32", создана пользователем CrawlUp, 17 дек 2018.

  1. CrawlUp

    CrawlUp Member

    Публикаций:
    0
    Регистрация:
    1 фев 2018
    Сообщения:
    90
    В попытках разобраться с сетевым программирование задумал написать программу которая смогла бы отслеживать обмен пакетами определённые процессы. Хотя теперь я уже совсем не уверен что выбрал себе задачу поплечу... но всё же, нашёл функции по моему мнению подходящие для получения данных о сетевой активности процесса, они в заголовке. И когда добрался до вывода информации на экран, которую предоставляют эти функции, понял, что они показывают совсем не то что показывает например системный монитор, или TCPview.

    Что бы избавить людей от копания в MSDN они выводят состояние, адреса, порты, и самое главное PID процесса к которому это всё привязано. Но что-то не клеится, вот скриншот.[​IMG]

    Может есть какие-то более подходящие функции для этих целей, или надо налаживать как то взаимодействие с драйвером. Если да то с каким и как. О создании своего драйвера можно забыть, я так и не смог разобраться как его можно легально подгружать в систему, только если в тестовом режиме.
     
  2. q2e74

    q2e74 Active Member

    Публикаций:
    0
    Регистрация:
    18 окт 2018
    Сообщения:
    989
    А через wireshark то байты совпадают с теми что по адресам да регистрам падают? Все программы интерпретируют байты, вы может всё правильно делаете, да на пол дороге дело бросаете? нет?

    в эту ветку загляните
    https://wasm.in/threads/poluchit-pid-processa-zabindivshego-udp-tcp-port.23451/
     
  3. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.956
    17094=42C6h
    50754=C642h
    Совпадает, просто биг эндиан с литтл эндианом путаешь.
     
    CrawlUp нравится это.
  4. CrawlUp

    CrawlUp Member

    Публикаций:
    0
    Регистрация:
    1 фев 2018
    Сообщения:
    90
    Не в бровь, а в глаз... спасибо.

    Ну раз пошла такая пьянка... может решим ещё одну непосильную проблему. [​IMG]

    В столбце Path отображается путь, этот путь получается с помощью OpenProcess ->GetProcessImageFileName. Легального получения пути без дескриптора процесса я найти не смог, все функции требуют handle, OpenProcess выдаёт handle далеко не для всех процессов, даже если запускать программу от имени администратора. С помощью createtoolhelp32snapshot можно посмотреть модули входящие в процесс, но это не путь. Также путь можно посмотреть в структуре TEB но для доступа к ней опять же нужен handle процесса.
    Возможно есть какая нибудь легальная возможность получить адрес структуры EPROCESS и переходя по двусвязному списку выудить все пути.
     
  5. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.956
    TcpView берет список GetExtendedTcpTable с классом TCP_TABLE_OWNER_MODULE_ALL, который возвращает MIB_TCPTABLE_OWNER_MODULE, где есть dwOwningPid (The PID of the process that issued a context bind for this TCP connection). По PID'у делает OpenProcess c PROCESS_VM_READ|PROCESS_QUERY_INFORMATION (для этого по-моему админ не нужен) и по получившемуся хендлу QueryFullProcessImageNameA.
     
  6. CrawlUp

    CrawlUp Member

    Публикаций:
    0
    Регистрация:
    1 фев 2018
    Сообщения:
    90
    OpenProcess не в состоянии открыть все процессы даже с этими флагами, на системных процессах возвращает 0.
     
  7. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.956
    у меня он только процесс System не открывает с этими флагами, процессы созданные "СИСТЕМА" открываются нормально им.
    --- Сообщение объединено, 17 дек 2018 ---
    TcpView там параллельно CreateToolhelp32Snapshot делает с TH32CS_SNAPPROCESS. Можно оттуда хотя бы краткое имя брать, если полное не получится.
     
    Последнее редактирование: 17 дек 2018