Jakie porty są używane przez aplikację [duplikat]

11

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.

Jak mogę to zrobić?

Baz
źródło

Odpowiedzi:

17

Możesz netstatdo tego użyć . Zobacz przykład (szukałem ssh):

netstat -putan | grep ssh
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1725/sshd
tcp        0      0 1.2.3.4:45734           1.2.3.5:22              ESTABLISHED 2491/ssh
tcp6       0      0 :::22                   :::*                    LISTEN      1725/sshd

Wyjaśnienie:

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.

chaos
źródło
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ś.

gowenfawr
źródło
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.
gowenfawr
3

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:

strace -e socket,connect,close -f -o hipchat.strace.txt hipchat

Dane wyjściowe pokażą dodatkowe informacje, takie jak żądania UDP i otwarte, ale zamknięte połączenia.

olivecoder
źródło
0

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.

rotten777
źródło