# Sprawdź, co Twój Mac wysyła w ciągu 10 minut z terminala > Dziesięciominutowy, zawierający tylko narzędzia system macOS z audytem: lsof, nettop, log stream, scutil --dns, dig i tcpdump — co właściwie każdy z nich pokazuje, dokładne polecenia i czego żadne z nich nie może ci powiedzieć. HisnLabs Security & Research Team · Published 2026-09-14 Canonical: https://hisnlabs.com/pl/blog/audit-mac-network-terminal Nie musisz niczego instalować, aby uzyskać prawdziwy, aktualny obraz tego, z czym rozmawia Twój Mac. Każde narzędzie w tym laboratorium jest dostarczane z systemem macOS. Żaden z nich nie wymaga powierzania ruchu osobom trzecim, a przejrzenie wszystkich sześciu zajmuje około dziesięciu minut, gdy znasz polecenia. To, czego nie zrobią, a to ma znaczenie, to powiedzenie Ci, które z tych połączeń są w porządku, a które nie – do tego nadal potrzebny jest kontekst, a na koniec będziemy szczerze mówić o tym, gdzie kończą się te narzędzia. ## 1. lsof — każde otwarte połączenie, w tej chwili W systemie Unix gniazdo sieciowe jest plikiem, a `lsof` (lista otwartych plików) wyświetla je. Strona podręcznika systemu macOS opisuje `-i` jako wybieranie plików, których adres internetowy odpowiada podanej specyfikacji — bez podania żadnego, dla każdego gniazda internetowego. Dodaj `-n`, aby pominąć rozpoznawanie adresów na nazwy hostów i `-P`, aby pominąć rozpoznawanie portów na nazwy usług; oba sprawiają, że polecenie jest szybsze, a wynik dokładny, a nie przybliżony. *Terminal — każde otwarte gniazdo sieciowe* ```console $ sudo lsof -i -n -P # example output, trimmed to a few representative lines COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME Mail 612 alice 9u IPv4 0x... 0t0 TCP 192.168.1.10:54321->17.57.145.13:993 (ESTABLISHED) Slack 980 alice 22u IPv4 0x... 0t0 TCP 192.168.1.10:54400->35.186.224.25:443 (ESTABLISHED) mDNSResp 88 root 4u IPv4 0x... 0t0 UDP *:5353 ``` Przeczytaj od lewej do prawej: nazwę procesu i PID, adres lokalny i port, `->` oraz adres i port zdalny oraz stan połączenia. `ESTABLISHED` oznacza aktywne, dwukierunkowe połączenie w tej chwili. Uruchom bez `sudo`, nadal będziesz widzieć swoje własne procesy; potrzebują tego te, których właścicielem jest root. Czego to nie może ci powiedzieć: `lsof` to migawka chwili naciśnięcia Enter. Połączenia, które się otworzyło, wysłało kilka kilobajtów i zamknęło pół sekundy przed uruchomieniem polecenia, po prostu nie ma — musisz je uruchamiać wielokrotnie lub przejść do następnego narzędzia, aby to złapać. ## 2. nettop — ten sam widok, ale na żywo nettop to żywa wersja tego samego pomysłu. Strona podręcznika opisuje go jako wyświetlający „listę gniazd lub tras” z okresowo aktualizowanymi statystykami. `-m route` przełącza go z listy gniazd na listę widoku tablicy routingu; `-m tcp` lub `-m udp` ograniczają go do jednego protokołu. *Terminal — połączenia na żywo, odświeżane co sekundę* ```console $ nettop -m route # interactive; press q to quit, or use -l N to print N samples and exit # example output, trimmed time interface state bytes_in bytes_out 23:41:02.123 Mail.612 en0 Established 4.2K 1.1K 23:41:02.123 Slack.980 en0 Established 18.6K 6.4K ``` Dodaj `-l 5`, aby pobrać pięć próbek i wyjść, zamiast przeprowadzać interaktywną sesję, co jest przydatne, jeśli chcesz gdzieś przesłać dane wyjściowe. nettop naprawia problem migawki lsof — możesz oglądać pojawienie się połączenia, przesyłanie danych i zamykanie — ale dziedziczy ten sam pułap: nazwę procesu i PID, nic o tym, kto podpisał plik binarny i brak pamięci po zamknięciu terminala. ## 3. strumień logów — co sam system mówi o sieci macOS prowadzi ujednolicony, uporządkowany dziennik tego, co robi każdy proces, a `log stream` pozwala oglądać go na żywo, filtrowany. Strona podręcznika opisuje `--predicate` jako filtrowanie wpisów przy użyciu klauzul w stylu NSPredicate względem podsystemu, kategorii, procesu i treści komunikatu. *Terminal — przesyłanie strumieniowe wpisów dziennika związanych z siecią* ```console $ log stream --predicate 'eventMessage contains "network" or subsystem == "com.apple.network"' --info # live stream; Ctrl-C to stop. Example line, trimmed: 2026-09-14 23:41:05.001 process=nesessionmanager subsystem=com.apple.network "TCP Connection ... state changed to Ready" ``` Jest to najmniej dostępne z sześciu narzędzi — jest ich dużo, a składnia predykatów wymaga uczenia się — ale jest też jedynym, które wyświetla zmiany stanu sieci na poziomie systemu i zdarzenia cyklu życia połączenia na bieżąco, prostym (w przybliżeniu) angielskim, oznaczonym przez odpowiedzialny podsystem. Traktuj to jak coś do grep, a nie czytanie wiersz po wierszu: przeprowadź go przez `grep`, aby uzyskać nazwę procesu, na której Ci zależy, lub słowo kluczowe, takie jak `"Wi-Fi"` lub `"VPN"`. ## 4. scutil --dns i dig — co tak naprawdę rozwiązuje Twój Mac Zanim nastąpi połączenie, zwykle następuje wyszukiwanie DNS. `scutil --dns`, zgodnie ze swoją stroną podręcznika, „raportuje bieżącą konfigurację DNS”: które programy rozpoznawania nazw są skonfigurowane, co jest ustawieniem domyślnym i które mają zastosowanie tylko do określonych domen (split DNS, powszechny w sieciach VPN). *Terminal — bieżąca konfiguracja programu rozpoznawania nazw DNS* ```console $ scutil --dns # example output, trimmed DNS configuration resolver #1 nameserver[0] : 192.168.1.1 if_index : 12 (en0) flags : Request A records, Request AAAA records reach : 0x00020002 (Reachable,Directly Reachable Address) ``` `dig` odpowiada bezpośrednio na jedno pytanie: do czego w tej chwili zmierza ta nazwa. Jego strona podręcznika nazywa go „elastycznym narzędziem do przesłuchiwania serwerów nazw DNS”, cenionym za „elastyczność, łatwość użycia i przejrzystość wyników”. *Terminal — rozpoznawanie pojedynczej nazwy hosta* ```console $ dig example.com +short # example output 93.184.216.34 ``` Żadne z narzędzi nie informuje, która aplikacja uruchomiła wyszukiwanie ani co wydarzyło się później — DNS podaje tylko adres, z którym aplikacja ma się połączyć (lub już się z nią połączyła). samo połączenie jest tym, co pokazuje lsof, nettop lub dziennik zapory ogniowej. ## 5. tcpdump — podstawowa prawda i ta, która wymaga sudo Wszystko powyżej oznacza stan, który system operacyjny już utrzymuje. `tcpdump` jest inny: przechwytuje pakiety bezpośrednio z interfejsu, dlatego też jego własna dokumentacja bezpośrednio określa wymagania — „Odczyt pakietów z interfejsu sieciowego może wymagać specjalnych uprawnień” — w praktyce `sudo` na macOS. Użyj `-i`, aby wybrać interfejs, `-n`, aby zachować adresy numeryczne, i wyrażenia filtrującego, takiego jak `port 53`, aby odizolować ruch DNS: *Terminal — oglądanie zapytań DNS opuszczających maszynę* ```console $ sudo tcpdump -i en0 -n port 53 # example output, trimmed 23:41:10.221331 IP 192.168.1.10.54812 > 192.168.1.1.53: 41213+ A? example.com. (30) 23:41:10.244109 IP 192.168.1.1.53 > 192.168.1.10.54812: 41213 1/0/0 A 93.184.216.34 (46) ``` > **Warning:** Wymaga to wyższych uprawnień, ponieważ odczytuje pakiety bezpośrednio z interfejsu sieciowego — ten sam poziom dostępu, który w zasadzie mógłby przechwycić znacznie więcej niż DNS, jeśli rozszerzysz filtr lub całkowicie go porzucisz. Utrzymuj wąski filtr, uruchamiaj go przez krótkie okno i zamknij terminal, gdy skończysz. Nie pozostawiaj szerokiego, niefiltrowanego przechwytywania bez nadzoru. Należy zauważyć wzorzec: zapytanie wysyłane na port 53, po którym natychmiast następuje odpowiedź. Jeśli uruchomisz `dig` w jednym terminalu, podczas gdy `tcpdump` uruchomi się w innym, możesz dokładnie obejrzeć zapytanie i odpowiedź wygenerowaną przez twoje własne polecenie — to dobry sposób, aby rzeczywiście wierzyć w to, co mówią strony podręcznika, zamiast brać je na wiarę. ## Bezpłatne siódme narzędzie: Monitor aktywności Warto wymienić jedną opcję graficzną na tej liście, ponieważ nie wszystko potrzebuje terminala. Karta Sieć w Monitorze aktywności wyświetla sumy — dane wysłane i odebrane na proces oraz wykres przepustowości na bieżąco — co jest właściwym pierwszym przystankiem w przypadku, gdy „coś przeżuwa przepustowość i nie wiem co”. Jest to także najjaśniejsza ilustracja pułapu, który dzieli każde narzędzie opisane w tym artykule: może powiedzieć, że proces pomocniczy przesunął się o dwa gigabajty w ciągu nocy i nie ma kolumny opisującej, dokąd poszły te dwa gigabajty. Wolumen i miejsce docelowe to dwa różne pytania, a macOS odpowiada na nie za pomocą dwóch różnych narzędzi. ## Łączymy te dziesięć minut 1. `sudo lsof -i -n -P` — pobierz aktualną listę otwartych gniazd, jedno przejście, trzydzieści sekund. 2. `nettop -m route -l 5` — pobierz kilka próbek na żywo, aby uchwycić wszystko, co przeoczyłeś w migawce lsof. 3. `scutil --dns` — potwierdź, jakiego resolwera faktycznie używasz, szczególnie jeśli korzystasz z VPN lub publicznej sieci Wi-Fi. 4. `dig +short` na czymkolwiek nieznanym z kroku 1, aby zobaczyć, do czego aktualnie zmierza. 5. `sudo tcpdump -i en0 -n port 53` przez sześćdziesiąt sekund, aby obserwować nieprzetworzony ruch DNS podczas wykonywania swoich zadań przez aplikacje. 6. `log stream --predicate` ze słowem kluczowym grep, jeśli coś powyżej wywołało pytanie, na które poprzednie pięć nie odpowiedziało. ## Sprawdzony przykład Powiedzmy, że krok 1 uruchamia proces o nazwie `helperd` utrzymujący otwarte połączenie z adresem, którego nie rozpoznajesz. Nie zatrzymuj się na tym. Uruchom `dig -x `, aby wyszukać wstecz — nie zawsze da to coś czytelnego, ale kiedy tak się stanie, nazwa hosta taka jak `ads.example-cdn.net` powie Ci więcej w ciągu pięciu sekund niż surowy adres IP kiedykolwiek. Uruchom `nettop -m tcp -l 3` i zobacz, czy kilka sekund później to samo połączenie jest nadal otwarte i czy bajty faktycznie się po nim przemieszczają, czy też pozostaje bezczynne. Jeśli jest nieczynny i otwiera się ponownie w ustalonych odstępach czasu, ma to raczej charakter okresowego meldowania się niż jednorazowego przelewu – warto o tym pamiętać, a nie automatycznie warto się tym przejmować, bo zwykłe sprawdzacze aktualizacji zachowują się tak samo. Następnie sprawdź `scutil --dns`, aby potwierdzić, że przelicznik, który wygenerował adres `helperd`, z którym połączony był ten, którego oczekiwałeś, zwłaszcza jeśli korzystasz z cudzej sieci Wi-Fi. Pięć poleceń, jeden proces i od „Nie rozpoznaję tego” przeszedłem do „Oto konkretnie, co wiem, a czego nie wiem na ten temat” – co jest faktycznym celem takiego audytu, czymś więcej niż oceną, czy jest dobry, czy zły. ## Czego żadne z tych narzędzi Ci nie powie Przebiegnij wszystkie sześć, a nadal będziesz mieć trzy prawdziwe luki. Po pierwsze, tożsamość wykraczająca poza nazwę procesu: nic tutaj nie sprawdza, czy plik binarny o nazwie „Mail” jest programem Apple Mail, czy czymś, co samo się zmieniło, lub czy w ogóle jest podpisany — jest to osobne wyszukiwanie za pomocą `codesign` i `spctl`. Po drugie, pamięć: po zamknięciu okna terminala zamyka się wszystko, czego się nauczyłeś; nie ma dziennika „z czym połączył się mój Mac w zeszły wtorek”, chyba że sam go zbudujesz. Po trzecie, ocena: żadne z tych narzędzi nie ma opinii na temat tego, czy oczekiwane jest połączenie. Aplikacja do robienia notatek łącząca się z adresem, którego nigdy wcześniej nie używała, wygląda dokładnie tak samo w `lsof`, jak aplikacja łącząca się ze zwykłym serwerem synchronizacji — rozróżnienie tych dwóch to rozpoznawanie wzorców, które musisz zabrać ze sobą lub narzędzie, które musi ci przynieść. ## Jaką rolę odgrywają FireAI i HisnLabs Everything in this lab is free and built into macOS, and none of it names the process behind a connection or remembers it after the terminal closes — which is the specific, narrow gap FireAI’s per-app rules and connection history are built to close. FireAI to własny produkt HisnLabs: zapora sieciowa z AI działająca bezpośrednio na Macu. Pokazuje prostym językiem każde połączenie nawiązywane przez twoje aplikacje i pozwala ci decydować, co opuszcza twojego Maca — jej AI działa lokalnie, więc twój ruch nigdy nie jest wysyłany do nas ani do nikogo innego. Zespół badań nad bezpieczeństwem HisnLabs dba o to, by te decyzje pozostały trafne: kataloguje, które domeny to zwykła telemetria, a które prawdziwa usługa, śledzi kraj i sieć stojące za połączeniem oraz trenuje lokalny model (funkcję FireAI Pilot) na rzeczywistych wzorcach ruchu — a nic z tego nie opuszcza twojego Maca. Możesz przeczytać o decyzjach technicznych, które za tym stoją, albo wypróbować FireAI przez 17 dni na [FireAI od HisnLabs](https://hisnlabs.com/fireai/pl/download). ## Sources - [SS64: lsof man page for macOS](https://ss64.com/mac/lsof.html) - [nettop(1) man page (Xcode man pages mirror)](https://keith.github.io/xcode-man-pages/nettop.1.html) - [log(1) man page (Xcode man pages mirror)](https://keith.github.io/xcode-man-pages/log.1.html) - [scutil(8) man page (Xcode man pages mirror)](https://keith.github.io/xcode-man-pages/scutil.8.html) - [dig(1) man page (Xcode man pages mirror)](https://keith.github.io/xcode-man-pages/dig.1.html) - [SS64: tcpdump man page for macOS](https://ss64.com/mac/tcpdump.html)