Получить соединения COM / DCOM?

Я хотел бы выяснить, с какого IP-адреса подключается DCOM-клиент. У меня есть сервер OPC, и из контекста кода COM / DCOM нет способа получить IP-адрес клиента, который я могу найти. Эта статья, похоже, подтверждает, что (http://blogs.msdn.com/b/sanpil/archive/2004/03/01/82302.aspx).

Я попытался использовать библиотеку C ++, которую использует netstat (iphlpapi.lib, GetExtendedTcpTable), чтобы получить открытые соединения, но безуспешно. Похоже, что для COM / DCOM по умолчанию используется UDP.

Единственное, что я могу придумать, это использовать WireShark pcap, чтобы попытаться захватить входящий трафик на порт 135?

Есть ли у кого-нибудь умные идеи?


person arons    schedule 14.08.2014    source источник


Ответы (1)


Сказано, что «использование DCOM через брандмауэры становится проблематичным, потому что он динамически выделяет один порт для каждого процесса (настраивается через реестр) и требует, чтобы были открыты UPD и TCP-порты 135–139».

person wshcdr    schedule 14.08.2014
comment
Да, проблема в том, что я не верю, что вы можете связать порт с конкретным процессом. Это все закопано в оконной хлам. Хотя я могу разобраться в этом. В настоящее время я тестировал только COM (локальный), который может использовать другую технику. Если это так, то единственное, что я могу сделать (я думаю), - это обнюхать трафик на диапазоне портов и попытаться выяснить это на основе содержимого сообщений. Вроде много работы ... - person arons; 14.08.2014
comment
Поэтому я не могу сопоставить его с идентификатором процесса, но этого достаточно для моих нужд. Я ищу исходящие / входящие TCP / IP-соединения на порту 135 и сообщаю об удаленном IP-адресе. Это означает, что я не могу получить IP-адрес в 100% случаев (вернуть несколько, если существует более одного соединения DCOM, и ни одного, если это локальное соединение ИЛИ с использованием UDP), но этого достаточно для моего приложения. - person arons; 15.08.2014