Testuję aplikację, która otwiera własne porty (działa jako serwer dla tych portów, stąd nasłuchuje na tych portach) i gdzie ta sama aplikacja łączy się z portami powiązanymi z innymi aplikacjami (działa jako klient dla tych portów).
Chciałbym uzyskać przegląd, które porty tworzy aplikacja oraz z którymi aplikacjami i portami się łączy.
Często używam parametrów -putan(ponieważ są one łatwe do zapamiętania).
-p: pokaż PID aplikacji / procesu
-u: pokaż porty / połączenia udp
-t: pokaż porty / połączenia tcp
-a: pokaż zarówno gniazda nasłuchujące, jak i nasłuchujące
-n: wyjście numeryczne (nie wyszukuj nazw DNS itp.)
Na powyższym wyjściu widać, że istnieje proces demona ssh ( sshd) z 1725nasłuchiwaniem PID na porcie 22na wszystkich interfejsach sieciowych ( 0.0.0.0). Istnieje również proces klienta ssh (PID 2491) podłączony do adresu IP 1.2.3.5pod numerem portu 22, mój adres IP to 1.2.3.4i mój port zewnętrzny to 45734. Widzisz, że połączenie zostało nawiązane. Dlatego jestem zalogowany przez ssh.
Nawiązane połączenie TCP na porcie 22 nie oznacza pomyślnego uwierzytelnienia. TCP musi zostać ustanowiony przed uwierzytelnieniem w obu kierunkach.
jamesbtate
@Puddingfox tak prawda, moglibyśmy powiedzieć „jestem podłączony do tego portu”, ale dla zrozumienia powiedziałem „jestem zalogowany”, ponieważ jest to bardziej ilustracyjne.
chaos
1
hehe ... `-putan ' Jestem tak kuszony, aby poprawić ten drobny błąd ortograficzny;)
James Mertz
Po co używać przestarzałych narzędzi, gdy dostępne są nowoczesne? ss -lntp to narzędzie dostarczane przez pakiet iproute2 .
MariusMatutiae
7
Innym narzędziem, które może to zrobić, jest lsof:
# lsof -i -a -p 1981
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1981 root 3u IPv4 917 0t0 TCP host.example.com:ssh (LISTEN)
# lsof -i -a -p 1981 -n
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1981 root 3u IPv4 917 0t0 TCP 10.1.2.3:ssh (LISTEN)
# lsof -i -a -p 1981 -n -P
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1981 root 3u IPv4 917 0t0 TCP 10.1.2.3:22 (LISTEN)
#
Dostępne opcje są następujące:
-i aby wydrukować porty internetowe otwarte przez proces
-a aby wszystkie opcje były AND-edowane
-p 1981 aby wyświetlić dane wyjściowe dla procesu 1981
-n aby zatrzymać wyszukiwanie nazwy hosta i zamiast tego wyświetlać adres IP
-P aby zablokować wyszukiwanie usługi i zamiast tego wyświetlić numer portu
lsofma tę zaletę, że można określić proces do sprawdzenia zamiast konieczności grepowania go z większego wyjścia. netstatjest bardziej niezawodnie dostępny w systemach, choć lsofstaje się coraz bardziej standardowy niż kiedyś.
Chciałbym uruchomić to polecenie przed uruchomieniem aplikacji, którą chcę monitorować, ale czy mogę ustalić, jaki pid otrzyma aplikacja przed jej uruchomieniem?
Baz
@Baz, jeśli chcesz monitorować aplikację podczas uruchamiania (np. Zanim poznasz PID), powinieneś wypróbować stracerozwiązanie zaproponowane przez @olivecoder.
Zakładam, że mówisz o IPv4 ... Jeśli nie, możesz zastąpić 4 w poprzedniej komendzie wartością 6. Parametr -a pokazuje wszystkie porty (nasłuchujące i nie). Możesz dodać -n do parametrów, jeśli nie chcesz rozpoznawać nazw na wyświetlaczu.
Innym narzędziem, które może to zrobić, jest
lsof
:Dostępne opcje są następujące:
-i
aby wydrukować porty internetowe otwarte przez proces-a
aby wszystkie opcje były AND-edowane-p 1981
aby wyświetlić dane wyjściowe dla procesu 1981-n
aby zatrzymać wyszukiwanie nazwy hosta i zamiast tego wyświetlać adres IP-P
aby zablokować wyszukiwanie usługi i zamiast tego wyświetlić numer portulsof
ma tę zaletę, że można określić proces do sprawdzenia zamiast konieczności grepowania go z większego wyjścia.netstat
jest bardziej niezawodnie dostępny w systemach, choćlsof
staje się coraz bardziej standardowy niż kiedyś.źródło
strace
rozwiązanie zaproponowane przez @olivecoder.ss
narzędzie z pakietu iproute dla systemu Linuxźródło
Mamy już dobre odpowiedzi, ale zawierają tylko porty, które są otwarte w momencie uruchomienia polecenia.
strace
jest właściwym narzędziem do monitorowania połączeń otwartych w trakcie życia aplikacji:Dane wyjściowe pokażą dodatkowe informacje, takie jak żądania UDP i otwarte, ale zamknięte połączenia.
źródło
ss -a4 | less
Zakładam, że mówisz o IPv4 ... Jeśli nie, możesz zastąpić 4 w poprzedniej komendzie wartością 6. Parametr -a pokazuje wszystkie porty (nasłuchujące i nie). Możesz dodać -n do parametrów, jeśli nie chcesz rozpoznawać nazw na wyświetlaczu.
źródło