Chcę uzyskać listę usług okien i ich portów w języku C#. Jestem w stanie uzyskać wszystkie usługi okna przy użyciu ServiceController
, ale nie mogę uzyskać portów tych usług.Jak mogę otworzyć porty przez usługę Windows?
Odpowiedz
Proszę sprawdzić this question on stackoverlow. Nie jest dokładnie taki sam, jak pytasz, ale wskazuje na użyteczną funkcję o nazwie GetExtendedTcpTable available through PInvoke, która może zrobić to, czego potrzebujesz. Sprawdź także this one.
Odpowiedzi na podobne pytania zawsze proponują użycie Iphlpapi, ale nie jest jasne, jak można uzyskać RpcSs (nazwa usługi) w tym pliku netstat -ban kopii kopii: TCP 0.0.0.0:135 0.0.0.0:0 SŁUCHAJĄCA RpcSs [svchost.exe]
Albo Harmonogram tutaj:
TCP [::]: 49.154 [::]: 0 ODBIORU Harmonogram [svchost.exe]
Spojrzałem za rozwiązanie tego i nie płetwa d coś (-łatwo). Netstat wywołuje pewne nieudokumentowane funkcje w Iphlpapi, ale nie jest jasne, czy pobiera nazwę usługi od Iphlpapi, czy w jakiś sposób używa pid z Iphlpapi i używa czegoś innego, aby uzyskać nazwę usługi. Nie mam ochoty spędzać czasu z debuggerem, aby odpowiedzieć na to pytanie, ponieważ:
Jednak najlepiej byłoby nie chcieć korzystać z podejścia pollingowego z C#. Bardziej odpowiednie byłoby stosowanie ETW. Myślę, że brak przykładów użycia go z C# jest, ponieważ jest trochę narzutów, aby zacząć z nim i przykłady wokół mogą być specyficzne dla innego typu scenariuszy śledzenia/monitorowania.
Podsumowanie: Jeśli nie masz czasu na wdrożenie, po prostu zapisanie wyniku netstat wydaje się być "rozwiązaniem". Idealnie chciałbym znaleźć prosty w użyciu przykład C# do monitorowania jakichkolwiek połączeń sieciowych i ustalenia, jakie usługi lub procesy obsłużyły/zainicjowały je wraz z możliwymi zmianami firewalla. Wierzę, że robienie obu jest możliwe przy ETW, ale dla moich aktualnych potrzeb trudno uzasadnić nieznaną ilość czasu potrzebnego, aby to zadziałało. Na co najmniej zorientowałem się, że "dostawcy zapytań loga" wymieniają dostawców, to musisz zrobić coś, aby włączyć dostawcę (i obsługę sterowników do śledzenia w niektórych przypadkach, np. Przechwytywanie pakietów). Jest projekt C# do korzystania z ETW. Ale nie jest wcale jasne, ile wysiłku będzie polegało na odtworzeniu wyjścia netstat za pomocą ETW.
Po długim rozejrzeniu się stwierdziłem, że w strukturze MIB_TCPROW_OWNER_MODULE istnieje nieudokumentowane "OwningModuleInfo".
Następnie poszukuje że znalazłem ten komentarz:
Weird issue regarding GetOwnerModuleFromTcpEntry when targeting x64
„doszedłem do wniosku, że pierwszy element w tablicy to indeks usługi na liście usług działa .. . "
Tak więc odpowiedź na to pytanie polegałaby na użyciu tego, aby uzyskać informacje o nazwie, które pokazuje netstat -b (nazwa usługi i adres + port), filtrowanie żądanej usługi. Znalazłem tę bibliotekę https://github.com/Loriowar/IpHlpApidotnet, która ma już zestaw powiązanych kodów z wyjątkiem tej funkcji.
Inne przydatne linki:
Marshalling Struct with Array of Struct Member
https://msdn.microsoft.com/en-us/library/windows/desktop/aa366911(v=vs.85).aspx
masz na myśli portów TCP/UDP? –
Tak, porty TCP/UDP –