NETSTAT – sprawdzanie otwartych portów oraz statystyki interfejsów


 

Ostatnio na redakcyjnego maila dostaliśmy sugestię aby podczas opisywanie aplikacji zaznaczyć poprzez jaki port się ona komunikuje, nie ma sprawy, takie informacje też znajdą się w naszych artykułach. Pójdźmy jednak krok dalej i mimo, że za wędkarstwem nie przepadam, powiem, że damy Wam również wędkę :).

Jedną z komend, którą powinien znać każdy administrator jest netstat. Dzięki niemu możemy w szybki sposób wyświetlić statystyki wszelkich połączeń nawiązanych przez nasz komputer. Ponadto dostępny jest praktycznie na każdej platformie, czasami z nieco zmienionymi funkcjami i innymi przełącznikami, ale generalnie spełnia takie samo zadanie. Będę opierał się na Microsoftowej implementacji tego narzędzia. Netstat jest narzędziem dostępnym z poziomu wiersza poleceń, jeżeli jednak wolicie okienkowe programy to polecam TCPView (Sysinternals), a jeśli zamierzacie zautomatyzować lub eksportować wyniki to szczególnie przydatny będzie TCPVcon, mniejszy brat TCPView.

Jak zwykle pełną informacje o dostępnych opcjach znajdziecie po wpisanie komendy. Warto dodać, że dostępne przełączniki można pisać po jednym myślniku, nie trzeba dodawać go do każdej literki np. netstat -ano , netstat -abf. w artykule będę jednak oddzielał te opcje aby były bardziej wyraźne.

C:\>netstat /?

Statystyki interfejsu

Zanim przejdziemy do sedna i sprawdzimy co w portach piszczy, zobaczmy szybko co jeszcze może pokazać nam netstat. Jak sama nazwa wskazuje (NETwork STATistics) możemy uzyskać od niego statystyki naszych interfejsów sieciowych. Aby nieco zaoszczędzić miejsca będę przycinać niektóre wydruki.

C:\>netstat -e
Interface Statistics Received Sent
Bytes            2131864155 174655422
Unicast packets     1719130 1086250
Non-unicast packets    8095 135693
Discards                  0 0
Errors                    0 0
Unknown protocols 0

Tablica routingu

Możemy również wyświetlać informacje o lokalnej tablicy routingu, są to dokładnie te same informacji gdybyśmy użyli komendy route print

C:\>netstat -r
===========================================================================
Interface List
12…c8 60 00 75 f6 58 ……Kontroler Realtek PCIe GBE Family Controller
16…08 00 27 00 7c c5 ……VirtualBox Host-Only Ethernet Adapter
1………………………Software Loopback Interface 1
13…00 00 00 00 00 00 00 e0 Karta Microsoft ISATAP
14…00 00 00 00 00 00 00 e0 Teredo Tunneling Pseudo-Interface
17…00 00 00 00 00 00 00 e0 Karta Microsoft ISATAP #2
===========================================================================IPv4 Route Table
===========================================================================
Active Routes:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 192.168.1.1 192.168.1.10 20
127.0.0.0 255.0.0.0 On-link 127.0.0.1 306
127.0.0.1 255.255.255.255 On-link 127.0.0.1 306
127.255.255.255 255.255.255.255 On-link 127.0.0.1 306

Statystyki protokołów

A tu statystyki niektórych protokołów. Domyślnie wyświetla wszystkie – IP, IPv6, ICMP, ICMPv6, TCP, TCPv6, UDP oraz UDPv6.

C:\>netstat -sIPv4 StatisticsPackets Received             = 10654401
Received Header Errors       = 0
Received Address Errors      = 3666
Datagrams Forwarded          = 0
Unknown Protocols Received   = 109
Received Packets Discarded   = 21125
Received Packets Delivered   = 10723465
Output Requests              = 8830027
Routing Discards             = 0
Discarded Output Packets     = 55634
Output Packet No Route       = 13
Reassembly Required          = 61
Reassembly Successful        = 9
Reassembly Failures          = 0
Fragments Created            = 21708

Sprawdzanie otwartych portów

Przejdźmy teraz do sedna artykułu, czyli określania z jakich portów korzystają aplikacje. Gdy użyjemy komendy bez przełączników dostaniemy listę aktywnych połączeń wraz z adresami i portami oraz statusem połączenia. Netstat domyślnie rozwiązuje, tłumaczy zewnętrzne adresy IP na nazwy, zajmuje to jednak kilka sekund więcej dla każdego wpisu. Jeżeli zależy nam więc na czasie możemy użyć przełącznika -n aby wyniki przedstawiony były tylko w postaci liczb. Jeżeli natomiast na pełnej nazwie serwerów z którymi łączy się nasz komputer użyć musimy -f, który wymusza pobieranie pełnej nazwy domeny (FQDN).

C:\>netstat -fActive ConnectionsProto Local Address Foreign Address State
TCP 192.168.1.12:53465 fa-in-f17.1e111.net:https ESTABLISHED
TCP 192.168.1.12:53468 fa-in-f120.1e111.net:https ESTABLISHED
TCP 192.168.1.12:53472 fa-in-f189.1e111.net:https ESTABLISHED
TCP 192.168.1.12:55779 www.evernote.com:https CLOSE_WAIT
TCP 192.168.1.12:56714 www.evernote.com:https CLOSE_WAIT
TCP 192.168.1.12:57061 fa-in-f102.1e111.net:https ESTABLISHED
TCP 192.168.1.12:57062 217.96.43.45:https ESTABLISHED
TCP 192.168.1.12:57069 fra07s27-in-f4.1e111.net:https ESTABLISHED
TCP 192.168.1.12:57085 ec2-54-246-205-41.compute-1.amazonaws.com:http ESTABLISHED
TCP 192.168.1.12:57087 wa00.188.ops.jango.com:http ESTABLISHED

W przypadku gdy chcemy sprawdzić jakie programy nawiązały połączenie lub nasłuchują i na których portach najlepiej użyć poniższe polecenie. Przełącznik -a został użyty aby wyświetlić wszystkie połączenia wraz z nasłuchującymi portami i UDP.

C:\>netstat -a -n -bProto Local Address Foreign Address State
TCP 0.0.0.0:135 0.0.0.0:0 LISTENING
RpcSs
[svchost.exe]
TCP 0.0.0.0:445 0.0.0.0:0 LISTENING
Can not obtain ownership information
TCP 0.0.0.0:554 0.0.0.0:0 LISTENING
[wmpnetwk.exe]
TCP 0.0.0.0:2869 0.0.0.0:0 LISTENING
Can not obtain ownership information
TCP 0.0.0.0:5357 0.0.0.0:0 LISTENING
Can not obtain ownership information
TCP 0.0.0.0:10243 0.0.0.0:0 LISTENING
Can not obtain ownership information
TCP 0.0.0.0:49152 0.0.0.0:0 LISTENING
[wininit.exe]
TCP 192.168.1.12:49201 204.154.94.86:443 CLOSE_WAIT
[Evernote.exe]
TCP 192.168.1.12:49202 204.154.94.81:443 CLOSE_WAIT
[Evernote.exe]
TCP 192.168.1.12:49383 66.155.11.250:80 ESTABLISHED
[chrome.exe]
TCP 192.168.1.12:49384 173.194.38.111:443 ESTABLISHED
[chrome.exe]
TCP 192.168.1.12:49385 173.194.122.238:80 ESTABLISHED
[chrome.exe]
TCP 192.168.1.12:49386 23.64.233.139:80 ESTABLISHED
[chrome.exe]
TCP 192.168.1.12:49449 90.84.65.8:80 ESTABLISHED
[opera.exe]
TCP 192.168.1.12:49450 90.84.65.8:80 ESTABLISHED
[opera.exe]
TCP 192.168.1.12:64045 157.56.134.132:443 ESTABLISHED
[Explorer.EXE]
TCP 192.168.1.12:64087 173.194.71.17:443 ESTABLISHED
[chrome.exe]
TCP 192.168.1.12:53377 157.25.5.66:8080 ESTABLISHED
[Maxthon.exe]
UDP 127.0.0.1:48001 *:*
[nvtray.exe]
UDP [::]:3702 *:*
[dashost.exe]
UDP [::1]:53211 *:*
SSDPSRV
[svchost.exe]
UDP [fe80::a0d7:ca7b:ba22:4c01%12]:546 *:*
Dhcp
[svchost.exe]

Porty używane przez konkretny program

Jednak jeszcze bardziej dokładne, a przynajmniej bardziej jednoznaczne wyniki osiągniemy stosując netstat -a -o. Otrzymamy listę portów wraz z numerem PID, który jest unikalny dla działających procesów. Jeżeli więc chcemy prześwietlić konkretny proces/program i sprawdzić jakie nawiązuje połączenia najlepszym sposobem będzie odnalezienie jego PID. Najprościej sprawdzić go w Task manager (Menadżer zadań) na zakładce „Processes” (Procesy). Jeżeli nie widać kolumny PID to należy dodać ją z menu „View” (widok). Przypuśćmy, że interesuje mnie jak i gdzie podłączony jest do sieci Evernote. Znalazłem jego PID – 6508. Posiłkuję się tu również poleceniem find aby wyświetlic jedynie interesujące mnie linie.

C:\>netstat -a -f -o | find „6508”
TCP 192.168.1.12:56714 www.evernote.com:https LAST_ACK 6508
TCP 192.168.1.12:57312 www.evernote.com:https CLOSE_WAIT 6508
TCP 192.168.1.12:57747 www.evernote.com:https ESTABLISHED 6508

Widzimy, że program łączy się protokołem https z serwerami evernote, o nasze notatki możemy być spokojni, nikt nie powinien ich przeczytać w drodze do celu ;)

Możemy pójść krok dalej i sprawdzić jak aktywność programu zmienia się w czasie. Wszystko dzięki temu, że netstat pozwala nam na uruchomienie go tak aby cyklicznie wykonywał komendy. Wystarczy dodać liczbę oznaczającą interwał pomiędzy kolejnymi sprawdzaniami. Jeżeli będziemy chcieli przerwać wykonywanie tak uruchomionego programu musimy użyć CTRL+C. Poniżej komenda z jedno sekundowym interwałem.

C:\>netstat -a -n -o 1 | find „6508”
TCP 192.168.1.12:57747 204.154.94.81:443 CLOSE_WAIT 6508
TCP 192.168.1.12:57813 204.154.94.81:443 CLOSE_WAIT 6508
TCP 192.168.1.12:57747 204.154.94.81:443 CLOSE_WAIT 6508
TCP 192.168.1.12:57813 204.154.94.81:443 CLOSE_WAIT 6508
TCP 192.168.1.12:57747 204.154.94.81:443 LAST_ACK 6508
TCP 192.168.1.12:57813 204.154.94.81:443 CLOSE_WAIT 6508
TCP 192.168.1.12:57973 204.154.94.81:443 SYN_SENT 6508
TCP 192.168.1.12:57747 204.154.94.81:443 LAST_ACK 6508
TCP 192.168.1.12:57813 204.154.94.81:443 CLOSE_WAIT 6508
TCP 192.168.1.12:57973 204.154.94.81:443 ESTABLISHED 6508
TCP 192.168.1.12:57747 204.154.94.81:443 LAST_ACK 6508
TCP 192.168.1.12:57813 204.154.94.81:443 CLOSE_WAIT 6508
TCP 192.168.1.12:57973 204.154.94.81:443 ESTABLISHED 6508
TCP 192.168.1.12:57747 204.154.94.81:443 LAST_ACK 6508
TCP 192.168.1.12:57813 204.154.94.81:443 CLOSE_WAIT 6508
TCP 192.168.1.12:57973 204.154.94.81:443 ESTABLISHED 6508
TCP 192.168.1.12:57747 204.154.94.81:443 LAST_ACK 6508
TCP 192.168.1.12:57813 204.154.94.81:443 CLOSE_WAIT 6508

Evernote początkowo był w stanie spoczynku, ale zaczął się synchronizować i nawiązał połączenie, co widać po stanie „ESTABLISHED”.

Poprawne rozszyfrowanie danych wyjściowych netstat wymaga nieco wiedzy na temat procesu nawiązywania połączeń TCP. Poniższa tabela opisująca stany połączeń powinna nieco to ułatwić. Zwróćcie uwagę na to, że serwer to maszyna, na której został uruchomiony netstat, klient natomiast to urządzenie z którym połączenie jest nawiązywane.

SYN_SEND serwer wysyła pakiet SYN (Active open)
SYN_RECEIVED Serwer otrzymał pakiet SYN od klienta
ESTABLISHED Serwer odesłał pakiet SYN do klienta, połączenie zostało zestawione
LISTENING Serwer gotowy jest na przyjęcie połączenia
FIN_WAIT_1 Serwer wysłął pakiet FIN (active close)
TIMED_WAIT Status klienta po otrzymaniu pakietu FIN on serwera
CLOSE_WAIT Serwer otrzymał pakiet FIN od klienta (passive close)
FIN_WAIT_2 Klient otrzymał pakiet potwierdzający wysłany FIN
LAST_ACK Serwer wysyła pakiet FIN
CLOSED Serwer otrzymał pakiet ACK od klienta, połączenie jest zamknięte

Sam proces najlepiej przedstawia uproszczony schemat (zaczerpnięty z Wikipedii)


Podobne Tematy:

  • Anonim

    jaką komendą netstat sprawdzić czy ktoś „podsłchuje” mój komputer i gdzie to będzie wyświetlone?

    • Dariusz Góra

      To zależy co rozumiesz przez „podsłuchiwanie”. Zazwyczaj podsłuchiwanie polega na przechwytywaniu pakietów wychodzących z Twojego komputera w ogólnie pojętą sieć. Nie da rady sprawdzić netstatem tego co dzieje się z danymi poza komputerem, którego używasz.

  • Grzegorz

    Witam
    od dłuższego czasu próbuje zablokować nawiązywanie połączenia z serwerami o adresach 173.194.70.0 – 255: 173.194.112.0 – 255, 173.194.113.0 – 255, oraz 48.0.0.0 – 51.255.255.255. Próbowałem w Wndows Vista zaporami, ustawieniami w IE otp. Obecnie ustawiłem to samo w zaporze w Linux. Niestety po połączeniu z internetem i dowolna stroną (np onet.pl) po zastosowaniu polecenia netstat -aon – otrzymuje listę połączeń w których taki co najmniej jeden taki adres jest ESTABLISH. Co ja robię źle?

  • Anonim

    Jak sprawdzić porty danego adresu ip

  • Michał

    Witam,
    Czy jest jakiś sposób, żeby dowiedzieć się, ile danych zostało przesłanych po danym sockecie?
    Założyłem server NFS’a i teraz chciałbym stwierdzić, którzy użytkownicy najbardziej go obciążają.