Przechwytywanie ruchu sieciowego w systemie Windows
O co chodzi?
Często mi się to zdarza… coś jest dziwne lub nie działa tak, jak powinno, i pojawia się pytanie: “Co się dzieje? Dlaczego klient lub serwer tak się zachowuje?” Często są to problemy związane z siecią.
Pewien badacz bezpieczeństwa powiedział mi kiedyś: “Jeśli chcesz zrozumieć, jak działa system, musisz zrozumieć ruch sieciowy. Prawie każdy problem można zdiagnozować na poziomie sieci.” Z mojego doświadczenia: okazuje się, że to prawda. 🥳
Niestety, moje doświadczenie pokazuje również, że wiele osób nie wie, jak przechwytywać ruch sieciowy w systemie Windows, a jedynym rozwiązaniem jest “zainstalujmy Wireshark”.
Cóż, nawet jeśli Wireshark to świetne narzędzie, nie jest to jedyne rozwiązanie i prawdopodobnie nie najlepsze rozwiązanie do szybkiego i jednorazowego przechwytywania. Zdecydowanie istnieją lepsze i prawdopodobnie szybsze rozwiązania, szczególnie jeśli chodzi o Twoje dobrze zabezpieczone serwery.

Rozważania na temat sytuacji
Ponownie, Wireshark to potężne narzędzie i mniej więcej, de facto standardowy analizator protokołów sieciowych. Na pewno będziesz go używać do analizy tego, co zostało przechwycone. Ale wadą Wireshark jest:
- Nie jest w stanie przechwytywać bez zainstalowania dodatkowego komponentu obok samego produktu: sterownika sieciowego (WinPcap lub Npcap).
- Jest to żywe i złożone narzędzie z wieloma binariami i potencjalnymi lukami w zabezpieczeniach.
- Każda instalacja na serwerze to potencjalny wektor ataku i przyczynia się do “śnieżynkowania” Twoich serwerów.
Prawdopodobnie nie jest to narzędzie, które chcesz mieć na serwerze produkcyjnym, szczególnie jeśli chcesz tylko przechwycić trochę ruchu do szybkiej analizy.
Zdecydowanie umieść je na swoim stanowisku roboczym, aby analizować to, co zostało przechwycone. Nie musisz nawet mieć uprawnień administratora, aby analizować za pomocą Wireshark! Wireshark działa doskonale jako instalacja przenośna bez żadnej instalacji systemowej.
Więc jakie są alternatywy?
Istnieje kilka alternatyw, aby wykonać tę pracę w systemie Windows. A najlepsze jest to, że nie musisz nic instalować na komputerze. Istnieją wbudowane narzędzia w systemie Windows, które wykonają tę pracę. …i są całkiem potężne. W połączeniu z PowerShell i możliwością PSRemoting łatwo to skalować.
1. netsh trace - Stare, ale złote
Polecenie netsh trace jest wbudowanym narzędziem w systemie Windows, które pozwala na przechwytywanie ruchu sieciowego bez potrzeby dodatkowego oprogramowania. Wykorzystuje Windows Event Tracing for Windows (ETW) do przechwytywania i rejestrowania zdarzeń sieciowych.
W zasadzie to netsh trace start i netsh trace stop, aby rozpocząć i zakończyć przechwytywanie, ale jest też netsh trace show, aby pokazać aktualny stan i netsh trace convert, aby przekonwertować przechwycone dane na bardziej czytelny format.
Oto szybki przegląd dostępnych poleceń w netsh trace:
Dostępne polecenia:
Polecenia w tym kontekście:
? - Wyświetla listę poleceń.
convert - Konwertuje plik śladu na raport HTML.
correlate - Normalizuje lub filtruje plik śladu do nowego pliku wyjściowego.
diagnose - Rozpoczyna sesję diagnostyczną.
dump - Wyświetla skrypt konfiguracyjny.
export - Eksportuje scenariusz do profilu WPR.
help - Wyświetla listę poleceń.
merge - Łączy pliki śladu i dodaje metadane symboli.
postreset -
show - Wyświetla interfejsy, dostawców i stan śledzenia.
start - Rozpoczyna śledzenie.
stop - Zatrzymuje śledzenie.
Aby wyświetlić pomoc dla polecenia, wpisz polecenie, a następnie spację i
wpisz ?.
Teraz skupmy się na poleceniach start i stop, które będziesz używać do przechwytywania ruchu sieciowego. Nazewnictwo jest dość oczywiste, myślę. Aby rozpocząć przechwytywanie sieci, musisz określić kilka dodatkowych parametrów. W zasadzie musisz tylko określić, że chcesz przechwytywać ruch. To po prostu parametr capture=yes.
Nawet jeśli to wszystko, czego potrzebujesz jako absolutne minimum, istnieje jeszcze jeden parametr, który jest zalecany dla efektywności. Jeśli interesuje Cię tylko przechwytywanie ruchu sieciowego, możesz wyłączyć generowanie raportów przez netsh za pomocą report=disabled. To przyspieszy proces przechwytywania i zmniejszy rozmiar przechwyconego pliku, ponieważ nie będzie zawierał dodatkowych danych raportowych.
Pozostałe parametry mogą być używane do dostosowywania procesu przechwytywania zgodnie z Twoimi potrzebami. Oczywiście możesz określić, gdzie zapisać ślad i co przechwycić, ale nie jest to obowiązkowe.
Ponieważ przechwytywanie ruchu sieciowego jest operacją systemową i wpływa na wszystkie procesy (i wszystkich użytkowników) w systemie, musisz uruchomić polecenie netsh trace z uprawnieniami administratora.
Oto podstawowe polecenie do rozpoczęcia przechwytywania ruchu sieciowego za pomocą netsh trace:
# Przechwytywanie ruchu sieciowego na interfejsie "Ethernet" i zapisanie go do pliku
netsh trace start capture=yes report=disabled
gdy tylko masz to, czego potrzebujesz, możesz zatrzymać przechwytywanie za pomocą następującego polecenia:
# Zatrzymaj przechwytywanie ruchu sieciowego
netsh trace stop

Przechwycony ruch jest zapisywany w pliku .etl, który można później analizować. Jeśli chcesz mieć niestandardową nazwę pliku i lokalizację dla przechwyconych danych, możesz to określić za pomocą parametru tracefile.
# Przechwytywanie ruchu sieciowego i zapisanie go do konkretnego pliku
netsh trace start capture=yes report=disabled tracefile=C:\Administration\Logs\MyTraceFile.etl
Teraz, gdy przechwyciliśmy ruch, musimy go przeanalizować...
Otwieranie pliku etl w Wireshark wymaga - niestety - dodatkowego kroku. Ale, zostań ze mną, to nie jest takie trudne i nadal nie wymaga instalacji:
Po prostu użyj etl2pcapng, bardzo małego narzędzia dostarczonego przez Microsoft, a będziesz gotowy do działania. Konwertuje plik etl na plik pcapng, który można łatwo otworzyć w Wireshark do analizy.
# Konwertuj plik .etl na format .pcapng
etl2pcapng nettrace.etl nettrace.pcapng
Oczywiście, nazwa pliku w poleceniu może być pełną ścieżką, w tym literą dysku i katalogami. To tylko szybki przykład.

Utworzony plik etl można usunąć po konwersji, jeśli nie jest już potrzebny. Plik pcapng to ten, którego będziesz używać do analizy w Wireshark.
Oprócz tego, że nie musisz instalować nic na systemie, korzystając z tej metody, masz również zaletę posiadania bardziej szczegółowego przechwytywania, ponieważ netsh trace przechwytuje więcej niż tylko ruch sieciowy. Przechwytuje również dodatkowe informacje o systemie i procesach, co może być bardzo przydatne do rozwiązywania problemów i analizy:

Ten proces działa całkiem dobrze na każdym systemie Windows od Windows 7 i Windows Server 2008 R2. Biorąc pod uwagę, że to całkiem dobre wbudowane rozwiązanie, aby uzyskać to, czego chcesz.
Ponownie, wszystko to działa bez instalowania czegokolwiek na systemie, co jest ogromną zaletą, szczególnie na serwerach produkcyjnych. Możesz po prostu uruchomić polecenia, przechwycić ruch i analizować go na swoim stanowisku roboczym z Wireshark bez żadnej instalacji na samym serwerze.
Jest znacznie więcej parametrów i opcji dostępnych dla netsh trace, które pozwalają dostosować proces przechwytywania zgodnie z Twoimi potrzebami. Na przykład możesz określić
- filtry protokołów
- filtry typów Ethernet
- filtry adresów IP
- konkretne interfejsy do przechwytywania
- i wiele więcej
Możesz zobaczyć wszystkie dostępne opcje, uruchamiając netsh trace show CaptureFilterHelp. To da Ci szczegółową listę wszystkich dostępnych filtrów i opcji, które możesz wykorzystać do dostosowania swojego przechwytywania.
Moje osobiste ulubione to:
# Aby przechwytywać tylko ruch IPv4:
Ethernet.Type=IPv4
# Aby przechwytywać tylko TCP/UDP lub oba:
Protocol=TCP
Protocol=UDP
Protocol=(TCP,UDP)
# Ogranicz przechwytywanie do konkretnych adresów IP:
IPv4.SourceAddress=<adres IPv4>
IPv4.DestinationAddress=<adres IPv4>
IPv4.Address=(<adres IPv4>,<adres IPv4>)
Dzięki tym opcjom powinieneś być przygotowany do skutecznego przechwytywania najbardziej istotnego ruchu do swojej analizy i rozwiązywania problemów. Możesz łączyć filtry, aby przechwytywać tylko ruch, który jest istotny dla Twojego konkretnego przypadku użycia, co może pomóc Ci skupić się na ważnych danych i zredukować szum w Twoim przechwytywaniu.
Możesz znaleźć kilka przykładów w sekcji praktyczne przykłady poniżej.
2. pktmon - Nowy gracz na rynku
Pktmon to nowsze wbudowane narzędzie w systemie Windows 10 / Windows Server 2019 i nowszych, które zapewnia bardziej wygodne możliwości monitorowania pakietów.
Jest to również narzędzie wiersza poleceń, które pozwala na przechwytywanie ruchu, ale jest bardziej skoncentrowane na monitorowaniu pakietów niż netsh trace i oferuje nieco bardziej przyjazny interfejs do zarządzania filtrami pakietów i przechwytywaniem ruchu. Składnia jest nieco inna, ale w zasadzie taka sama. Jeśli znasz netsh trace, powinieneś czuć się komfortowo, używając go. Oto szybki przegląd dostępnych poleceń w pktmon:
pktmon <polecenie> [OPCJE | pomoc]
Zaawansowane przechwytywanie pakietów i zbieranie zdarzeń.
Polecenia
filter Zarządzaj filtrami pakietów.
list Wyświetl komponenty przetwarzania pakietów.
start Rozpocznij przechwytywanie pakietów, liczniki i zbieranie zdarzeń.
stop Zatrzymaj zbieranie danych.
status Zapytaj o bieżący status.
unload Załaduj sterownik PktMon.
liczniki Wyświetl bieżące liczniki pakietów.
reset Zresetuj liczniki pakietów do zera.
etl2txt Konwertuj plik dziennika na format tekstowy.
etl2pcap Konwertuj plik dziennika na format pcapng.
hex2pkt Dekoduj pakiet w formacie szesnastkowym.
help Pokaż tekst pomocy dla konkretnego polecenia.
Przykład: pktmon start help
Ponieważ wykorzystuje również Windows Event Tracing for Windows (ETW) do przechwytywania zdarzeń sieciowych, generuje również pliki etl. Oto szybki przykład, jak to wykorzystać:
# Rozpocznij przechwytywanie pakietów i zapisz wynik do pliku
pktmon start --capture pktmon.etl
# Zatrzymaj przechwytywanie
pktmon stop
Jak możesz zauważyć, nawet jeśli składnia jest nieco inna niż w netsh trace, jest dość podobna. Możesz pominąć parametr raportowania, który jest potrzebny w jego starszym odpowiedniku. To sprawia, że wywołanie jest nieco krótsze.

Oto prawdziwa zaleta pktmon: w przeciwieństwie do klasycznego netsh trace, przechwycone dane można bezpośrednio przekonwertować na plik .pcapng, korzystając z wbudowanej funkcji pktmon. Oznacza to, że w aktualnym systemie operacyjnym nie musisz nawet używać dodatkowego narzędzia etl2pcapng do konwersji.
Możesz bezpośrednio przekonwertować przechwycone dane na plik .pcapng do analizy w Wireshark:
# Konwertuj plik .etl na format .pcapng
pktmon etl2pcap pktmon.etl
Utworzony plik etl można usunąć po konwersji, jeśli nie jest już potrzebny. plik pcapng to ten, którego użyjesz do analizy w Wireshark. Ponieważ plik pcapng zawiera tylko dane o ruchu, a nie tak wiele dodatkowych informacji o systemie i procesach, jest lżejszy niż plik etl. Ale w przypadku dłuższego przechwytywania lub dużego ruchu, może być nadal dość duży.

Jak wspomniano w przypadku netsh trace, pktmon również oferuje wiele opcji filtrów. Ponownie, możesz określić filtry protokołów, adresy IP i wiele więcej, aby ograniczyć swoje przechwytywanie. Możesz zobaczyć wszystkie dostępne opcje, uruchamiając pktmon filter add help. To da ci szczegółową listę wszystkich dostępnych filtrów i opcji, które możesz wykorzystać do dostosowania swojego przechwytywania. Główna różnica polega na tym, że musisz dodać filtry przed rozpoczęciem przechwytywania, co jest prawdziwą różnicą w porównaniu do netsh trace, gdzie możesz określić filtry bezpośrednio w poleceniu startowym. Ale może to nie być tak dużym problemem, gdy robisz to za pomocą skryptów. Moim zdaniem ułatwia to czytelność polecenia, ponieważ nie masz wielu parametrów w poleceniu startowym, ale jest to bardziej oddzielone i uporządkowane.
Oto kilka przykładów filtrów, które możesz użyć z pktmon:
# Aby przechwytywać tylko ruch IPv4:
pktmon filter add -p IPv4
# Aby przechwytywać tylko TCP/UDP lub oba:
pktmon filter add -p TCP
pktmon filter add -p UDP
# Ogranicz przechwytywanie do konkretnych adresów IP:
pktmon filter add -a IPv4.SourceAddress <adres IPv4>
pktmon filter add -a IPv4.DestinationAddress <adres IPv4>
pktmon filter add -a IPv4.Address <adres IPv4>
Fakt, że możesz wielokrotnie wykonywać polecenia dodawania filtrów, aby dodać wiele filtrów, może być bardzo przydatny, ponieważ pozwala ci budować konfigurację filtrów krok po kroku i utrzymywać ją w bardziej zorganizowanej formie. Możesz również wyświetlić aktualnie skonfigurowane filtry za pomocą pktmon filter list, aby zobaczyć, które filtry są obecnie aktywne przed rozpoczęciem przechwytywania.
3. Get-NetEventSession - natywny sposób PowerShell
Jeśli jesteś zapalonym użytkownikiem PowerShell, oto inny sposób na przechwytywanie ruchu sieciowego za pomocą polecenia Get-NetEventSession, które jest częścią modułu NetEventPacketCapture. To polecenie pozwala ci tworzyć i zarządzać sesjami zdarzeń sieciowych, które mogą być używane do przechwytywania ruchu sieciowego. Chociaż wymaga to nieco więcej tekstu, PowerShell ma możliwości, które są dość interesujące:
- Wbudowane uzupełnianie tabulatora dla parametrów
- Zdalne wykonywanie PowerShell za pomocą wbudowanych parametrów -CimSession w poleceniach
# Utwórz nową sesję zdarzeń sieciowych
$session = New-NetEventSession -Name "MySession" -LocalFilePath "C:\path\to\capture.etl"
# Dodaj dostawcę do przechwytywania ruchu sieciowego (np. Microsoft-Windows-Kernel-Network)
Add-NetEventProvider -SessionName $session.Name -Name "Microsoft-Windows-Kernel-Network"
# Sprawdź utworzoną sesję
$session
# Rozpocznij sesję, aby rozpocząć przechwytywanie ruchu
$session | Start-NetEventSession
# Zatrzymaj sesję, aby zakończyć przechwytywanie
$session | Stop-NetEventSession
W taki sam sposób jak narzędzia wiersza poleceń, przechwycony ruch jest zapisywany w pliku .etl, który można analizować po konwersji na format .pcapng za pomocą etl2pcapng lub pktmon. Nie będę tego ponownie opisywał, ponieważ jest to ten sam proces, co opisano powyżej.

Muszę szczerze przyznać, że to nie jest mój ulubiony sposób na przechwytywanie ruchu sieciowego, ponieważ jest nieco skomplikowane radzenie sobie z różnymi poleceniami i podstawowymi koncepcjami sesji zdarzeń sieciowych i dostawców. Ale jeśli chcesz pozostać w pełni w świecie PowerShell, to wciąż jest to wbudowany i potężny sposób na przechwytywanie ruchu.
W sekcji przykładu praktycznego poniżej znajdziesz przykład, w którym wykorzystałem możliwości zdalnego wykonywania PowerShell do przechwytywania ruchu sieciowego na zdalnym systemie w połączeniu z narzędziami wiersza poleceń z powyżej. To dość potężna kombinacja i moim zdaniem nie ma nic przeciwko używaniu narzędzi wiersza poleceń w połączeniu z PowerShell. Jak to często bywa… używaj tego, co najlepiej pasuje do ciebie i twojego przypadku użycia. Nie ma uniwersalnego rozwiązania.
Chociaż, oczywiście, ❤️ PowerShell ❤️ jest dość bliskie uniwersalnemu rozwiązaniu. 😁
4. Sposób GUI: Monitor wydajności
Jeśli wolisz klasyczny interfejs graficzny oparty na MMC w systemie Windows, możesz również użyć wbudowanego Monitora wydajności (PerfMon). PerfMon pozwala ci tworzyć zestawy zbierania danych, które mogą przechwytywać różne metryki wydajności, w tym ruch sieciowy.

Efektywnie, wszystkie wymienione powyżej narzędzia opierają się na tej samej podstawowej technologii, jaką jest Windows Event Tracing for Windows (ETW), i po prostu oferują różne interfejsy oraz różne możliwości przechwytywania zdarzeń. Monitor wydajności to po prostu interfejs oparty na GUI dla ETW.
Aby przechwytywać ruch sieciowy za pomocą Monitora wydajności, możesz postępować zgodnie z tymi krokami:
- Otwórz Monitor wydajności, wpisując
perfmonw menu Start i naciskając Enter. - W lewym panelu rozwiń “Zestawy zbierania danych” i kliknij prawym przyciskiem myszy na “Zdefiniowane przez użytkownika”. Wybierz “Nowy” > “Zestaw zbierania danych”.
- Nadaj swojemu zestawowi zbierania danych nazwę (np. “PrzechwytywanieRuchuSieciowego”) i wybierz “Utwórz ręcznie (zaawansowane)”. Kliknij “Dalej”.
- W kroku “Utwórz zbieracze danych” wybierz “Licznik wydajności” i kliknij “Dalej”.
- Kliknij “Dodaj”, aby dodać liczniki wydajności. W oknie dialogowym “Dodaj liczniki” rozwiń “Interfejs sieciowy” i wybierz liczniki, które chcesz przechwycić (np. “Bajty całkowite/sec”, “Pakiety/sec”). Kliknij “Dodaj”, a następnie “OK”.
- Kliknij “Dalej” i określ lokalizację, w której chcesz zapisać przechwycone dane. Kliknij “Dalej”, a następnie “Zakończ”, aby utworzyć zestaw zbierania danych.
- Aby rozpocząć przechwytywanie ruchu sieciowego, kliknij prawym przyciskiem myszy na nowo utworzony zestaw zbierania danych (np. “PrzechwytywanieRuchuSieciowego”) i wybierz “Rozpocznij”. Liczniki wydajności rozpoczną zbieranie danych.
- Aby zatrzymać przechwytywanie, kliknij ponownie prawym przyciskiem myszy na zestaw zbierania danych i wybierz “Zatrzymaj”. Przechwycone dane zostaną zapisane w określonej lokalizacji.

To szczególnie przydatna metoda, jeśli chcesz przechwytywać metryki wydajności związane z ruchem sieciowym w różnych harmonogramach i przez dłuższy czas. Nie jest to najlepsza metoda do szybkiego przechwytywania i analizy, ale może być bardzo przydatna do monitorowania i analizowania wydajności sieci w czasie.
Oprócz harmonogramowania, takie zdefiniowane zestawy zbierania danych można łatwo eksportować i importować na innych systemach, co może być bardzo przydatne do standaryzacji procesu przechwytywania na wielu serwerach lub stacjach roboczych. Jest to szczególnie przydatne, jeśli łączysz różne metryki z przechwytywaniem ruchu sieciowego, takie jak użycie CPU, użycie pamięci, I/O dysku itp., aby uzyskać bardziej kompleksowy obraz wydajności i zachowania systemu w odniesieniu do ruchu sieciowego.
Nie będę wchodził w więcej szczegółów na ten temat, ponieważ głównym celem tego wpisu na blogu jest pokazanie, jak szybko przechwytywać w konsoli.
Przykład praktyczny
Przechwytywanie tylko ruchu HTTP lub HTTPS
To może być powszechny przypadek użycia.
Niestety, o ile mi wiadomo, nie ma wbudowanej możliwości w netsh trace start do przechwytywania konkretnych portów. 😣 Filtry nie pozwalają na taką szczegółowość. Ale z pktmon możesz to łatwo zrobić. Warto wspomnieć, że jest to możliwe tylko w systemach Windows Server 2019 i Windows 10+ w wersjach późniejszych niż 1809.
Możesz użyć następującego polecenia, aby przechwytywać tylko ruch HTTP i HTTPS:
pktmon filter add "http + https" -d IPv4 -t TCP -p 80 443
pktmon start --capture --file-name https_traffic.etl
pktmon stop
pktmon filter remove
Zbieranie tylko ruchu DNS
Jeśli interesuje Cię tylko zbieranie ruchu DNS, możesz użyć następującego polecenia, aby uchwycić tylko ruch DNS:
pktmon filter add "UDP DNS" -d IPv4 -t UDP -p 53
pktmon filter add "TCP DNS" -d IPv4 -t TCP -p 53
pktmon start --capture --file-name dns_traffic.etl
pktmon stop
pktmon filter remove
Zbieranie tylko ruchu SMTP
Jeśli chcesz zbierać tylko ruch SMTP, możesz użyć następującego polecenia, aby uchwycić tylko ruch SMTP:
pktmon filter add "SMTP" -d IPv4 -t TCP -p 25
pktmon start --capture --file-name smtp_traffic.etl
pktmon stop
pktmon filter remove
To tylko kolejny szybki przykład, jak możesz wykorzystać możliwości filtrowania `pktmon`, aby uchwycić tylko określone typy ruchu.
Zbieranie za pomocą netsh trace z określonym adresem IP
Jeśli jesteś zmuszony do użycia netsh trace, z powodu starszych systemów operacyjnych lub wolisz go używać, zalecam określenie filtru IP dla adresu IP Twojego systemu. W ten sposób eliminujesz ruch rozgłoszeniowy i inny ruch, który prawdopodobnie nie jest związany z Twoim systemem.
Najpierw przygotuj filtr IP i ścieżkę pliku do zbierania:
$localIpList = (Get-NetIPAddress -AddressState Preferred -PrefixOrigin Dhcp, Manual -AddressFamily IPv4).ipaddress
$ipFilter = "($($localIpList -join ","))"
$filePath = "traffic.etl"
Następnie rozpocznij zbieranie z filtrem IP:
netsh trace start capture=yes report=disabled overwrite=yes fileMode=circular Protocol="(UDP,TCP)" tracefile="$($filePath)" IPv4.Address=$ipFilter
Sprawdź status zbierania:
netsh trace show status
Zrób swoje, a gdy skończysz, zatrzymaj zbieranie:
netsh trace stop
Dzięki temu podejściu możesz łatwo uchwycić tylko ruch, który jest istotny dla Twojego systemu, co może pomóc Ci skupić się na ważnych danych i zredukować szum w Twoim zbieraniu. Jest to szczególnie przydatne w środowiskach z dużym ruchem sieciowym, gdzie zbieranie wszystkiego skutkowałoby bardzo dużym i nieporęcznym plikiem zbierania.
Zbieranie ruchu za pomocą zdalnego PowerShell
Chciałbym przedstawić kolejny praktyczny przypadek użycia, który wielokrotnie wykorzystałem w rzeczywistości. Kiedy mówimy o większych środowiskach z wieloma serwerami, nie jest naprawdę efektywne logowanie się do każdego serwera i wykonywanie poleceń zbierania jeden po drugim.
Dokładnie w tym momencie zdalne PowerShell staje się przydatne. 🎉
Możesz połączyć możliwości zdalnego PowerShell z narzędziami wiersza poleceń z powyżej, aby łatwo zbierać ruch na dowolnej liczbie systemów. Uważam, że to dość potężne połączenie!
Oto szybki przykład, jak to zrobić:
(Dla oczywistego, możesz dostosować bloki skryptów, aby uwzględnić dodatkowe filtry lub parametry w zależności od Twojego konkretnego przypadku użycia)
# Zdefiniuj listę zdalnych serwerów, na których chcesz zbierać ruch
$remoteServers = @("Server1", "Server2", "Server3")
# Zdefiniuj podstawową ścieżkę i nazwę pliku na zdalnych serwerach
$remoteBasePath = "C:\Administration\Logs"
$remoteCaptureFileName = "traffic_http"
# Utwórz sesję do zdalnych serwerów
$sessions = New-PSSession -ComputerName $remoteServers
# Zdefiniuj blok skryptu do rozpoczęcia zbierania ruchu sieciowego za pomocą pktmon
$scriptStart = {
$filePath = "$($using:remoteBasePath)\$($using:remoteCaptureFileName)_$($env:COMPUTERNAME)_$(Get-Date -Format 'yyyy-MM-dd-HH-mm-ss').etl"
PktMon.exe filter add "HTTP" -d IPv4 -t TCP -p 80
PktMon.exe start --capture --file-name "$($filePath)"
}
# Wykonaj blok skryptu na każdym zdalnym serwerze za pomocą zdalnego PowerShell
Invoke-Command -Session $sessions -ScriptBlock $scriptStart
Teraz zrób swoje, aby uzyskać to, czego chcesz…
Możesz sprawdzić status zbierania na każdym zdalnym serwerze za pomocą następującego polecenia:
Invoke-Command -Session $sessions -ScriptBlock { PktMon.exe status }
Gdy będziesz gotowy, możesz zatrzymać zbieranie i przekonwertować zebrane dane na format .pcapng na każdym zdalnym serwerze za pomocą następującego polecenia:
$scriptStop = {
# Zatrzymaj zbieranie
PktMon.exe stop | Out-Null
# Usuń filtry (aby być czystym na następne zbieranie)
PktMon.exe filter remove | Out-Null
# Przekonwertuj plik .etl na format .pcapng
PktMon.exe etl2pcap $filePath
# Usuń oryginalny plik .etl po konwersji
Remove-Item -Path $filePath -Force
}
Invoke-Command -Session $sessions -ScriptBlock $scriptStop
Teraz masz zebrany ruch na każdym zdalnym serwerze, ale w ten sam sposób masz plik zbierania na każdym serwerze. Na szczęście PowerShell również pomaga w tej sytuacji. Możesz wykorzystać te same możliwości zdalne, aby skopiować zebrane pliki na swoją lokalną stację roboczą do analizy za pomocą Wireshark. Możesz użyć polecenia Copy-Item z parametrem -ToSession, aby skopiować pliki z zdalnych serwerów na swoją lokalną maszynę.
# Zdefiniuj lokalną ścieżkę, w której chcesz zapisać zebrane pliki
$localPath = Join-Path -Path $home -ChildPath "LocalData"
# Skopiuj zebrane pliki z każdego zdalnego serwera na lokalną maszynę
foreach ($session in $sessions) {
$remoteFilePath = "$($remoteBasePath)\$($remoteCaptureFileName)_*.pcapng"
Copy-Item -Path $remoteFilePath -Destination $localPath -FromSession $session
}
# Usuń pliki pcapng z zdalnych serwerów po skopiowaniu
Invoke-Command -Session $sessions -ScriptBlock {
Remove-Item -Path ($filePath -replace ".etl", ".pcapng") -Force
}
Gdy skończysz, usuń sesje do serwerów:
# Usuń sesje do zdalnych serwerów
Remove-PSSession -Session $sessions
Jak pokazuje ten przykład, możesz łatwo zbierać ruch sieciowy na wielu systemach, **łącząc `PowerShell` i `pktmon`**. To podejście pozwala na efektywne zarządzanie i analizowanie ruchu sieciowego w Twoim środowisku bez potrzeby ręcznej interwencji lub instalowania czegokolwiek na zdalnych serwerach. Ten przykład zakłada, że masz systemy z - mniej więcej - aktualnymi wersjami Windows. W przypadku, gdy `pktmon` nie jest dostępny na Twoich systemach, po prostu zastąp polecenia `pktmon` odpowiadającymi poleceniami `netsh trace`.
Zobacz przykłady netsh z powyżej, aby uzyskać pomysły, jak go używać. Ogólna struktura bloków skryptów pozostanie taka sama.
Podsumowanie
Zbieranie ruchu sieciowego w systemie Windows można ŁATWO zrealizować za pomocą różnych wbudowanych narzędzi, z których każde ma swoje zalety i zastosowania. Niezależnie od tego, czy preferujesz narzędzia wiersza poleceń, takie jak netsh trace i pktmon, czy interfejs graficzny, taki jak Monitor wydajności, dostępne są opcje dostosowane do różnych potrzeb i preferencji.
Dla szybkich zbiorów i analiz pktmon jest świetnym wyborem ze względu na łatwość użycia i bezpośrednie możliwości konwersji. (Jeśli korzystasz z Windows Server 2019 lub Windows 10+ w wersji późniejszej niż 1809) Na starszych systemach netsh trace może być potężnym narzędziem, które - wykonuje zadanie - również.
A dla tych, którzy preferują GUI, Monitor wydajności zapewnia kompleksowy sposób na zbieranie i analizowanie metryk wydajności sieci. Ostatecznie najlepsze narzędzie do zbierania ruchu sieciowego w systemie Windows zależy od Twoich specyficznych wymagań i poziomu szczegółowości, jakiego potrzebujesz do swojej analizy.
