Jak mogę wyświetlić listę moich otwartych portów sieciowych za pomocą netstat?

205

Chciałbym wyświetlić listę moich otwartych portów sieciowych w Terminalu z wbudowanymi poleceniami. Jak wiem, netstatto polecenie do użycia. Ale staram się wyciągnąć z tego użyteczne informacje.

Jak mogę wyświetlić listę moich otwartych portów netstat? Jakieś konkretne flagi, które pomogą mi w tym przypadku?

Jonas
źródło

Odpowiedzi:

308
netstat -ap tcp | grep -i "listen"

Achive Internet connections (including servers)
Proto Recv-Q Send-Q  Local Address          Foreign Address        (state)   
tcp4       0      0  localhost.25035        *.*                    LISTEN
sudo lsof -PiTCP -sTCP:LISTEN

COMMAND     PID      USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
GitHub      850 grgarside   6u   IPv4 0x23c345381d089301      0t0  TCP localhost:25035 (LISTEN)
grg
źródło
2
Dzięki! Jednak wynik jest dość trudny do odczytania, ale dzięki lsofbył nieco lepszy.
Jonas
12
Musisz użyć sudo lsof .... Bez sudo, lsof widzi tylko twoje procesy, a zatem nie pokazuje portów otwartych przez procesy systemowe. Możesz także pominąć polecenie grep, mówiąc lsof, że chcesz widzieć porty tylko w stanie LISTEN sudo lsof -PiTCP -sTCP:LISTEN.
Gordon Davisson
1
→ grgarside: strzeż się efektów grep -i "listen"swoich 2 przykładów.
dan
1
Za pomocą GNU netstatmożesz opcjonalnie wymienić pid procesu, który otworzył każdy port. Czy jest jakiś sposób, aby uzyskać takie zachowanie również z BSD netstat?
Chris
2
Właśnie to zrobiłem, okazuje się, że -vflaga to włącza. Pid będzie w przedostatniej kolumnie.
Chris
64

może możesz użyć lsof:

lsof -Pn -i4

-i4 oznacza tylko wyświetlanie adresu ipv4 i portów -P i -n szybkie wyjście

wyjście takie jak to

  lsof -Pn -i4 | grep LISTEN
QQPlatfor 22767 xxxx   15u  IPv4 0x36c2bfa04e49385d      0t0  TCP *:49969 (LISTEN)
GoAgentX  33377 xxxx    4u  IPv4 0x36c2bfa06e68b12d      0t0  TCP *:56154 (LISTEN)
GoAgentX  33377 xxxx   20u  IPv4 0x36c2bfa04e492f8d      0t0  TCP 127.0.0.1:56155 (LISTEN)
dążenie
źródło
2
Co robi to polecenie?
nohillside
3
lsofwyświetla otwarte pliki. Gniazda sieciowe są liczone jako pliki, więc każde otwarte gniazdo sieciowe (nasłuchujące lub aktywnie używane) będzie wymienione na liście lsof.
Craig Trader,
Pokazuje także identyfikator procesu (nie ma netstat)
lib
1
lsof -Pn -i6dla IPV6
Jared Burrows
2
Przynajmniej jedna moja maszyna, ta odpowiedź zajmuje 0,1 sekundy, a @ grgarside ma ponad 28 sekund. Różnica polega na tym -i4, że patrzy się tylko na adresy IPv4.
Davor Cubranic
8

Najprostszą metodą jest użycie netstat:

$ netstat -ap tcp
Active Internet connections (including servers)
Proto Recv-Q Send-Q  Local Address          Foreign Address        (state)    
tcp4       0      0  10.0.2.23.58792        17.172.233.109.5223    ESTABLISHED
tcp4      87      0  my_iMac__at_home.55481 stackoverflow.co.http  ESTABLISHED
tcp4     116      0  my_iMac__at_home.55478 stackoverflow.co.http  ESTABLISHED
tcp4      58      0  my_iMac__at_home.63452 stackoverflow.co.http  ESTABLISHED
tcp4      87      0  my_iMac__at_home.63429 stackoverflow.co.http  ESTABLISHED
tcp4       0      0  localhost.63173        localhost.773          ESTABLISHED
tcp4       0      0  localhost.773          localhost.63173        ESTABLISHED
tcp4       0      0  localhost.63173        *.*                    LISTEN     
tcp4       0      0  localhost.63172        *.*                    LISTEN     
tcp4       0      0  localhost.ipp          *.*                    LISTEN     
tcp6       0      0  localhost.ipp          *.*                    LISTEN     

… Bez żadnego dodatkowego filtrowania, aby uzyskać poprawne nagłówki i zobaczyć, jak oba serwery nasłuchują, a połączenia już nawiązane w obu kierunkach. W tym przykładzie pierwsza linia pokazuje połączenie z moim komputerem Mac w kierunku 17.172.233.109, który dalej:

whois 17.172.233.109

nauczył mnie, że znajduje się w Apple.

Dan
źródło
6

Po pierwsze, nie jestem ekspertem od BSD, ale podobnie jak OP chciałem mniej więcej tyle, ile można uruchomić na pudełku * nix lub coś podobnego:

netstat -tulpn

Czytałem inne pytania / odpowiedzi oferujące lsof * i netstat * na MacOS i wciąż chciałem czegoś bardziej kompaktowego. Oto, co szybko zebrałem:

netstat -Watnlv | grep LISTEN | awk '{"ps -o comm= -p " $9 | getline procname;colred="\033[01;31m";colclr="\033[0m"; print cred "proto: " colclr $1 colred " | addr.port: " colclr $4 colred " | pid: " colclr $9 colred " | name: " colclr procname;  }' | column -t -s "|"

To trochę przesada, więc dla pewności dodałem kolor do wydruku. Ponieważ nie będę w stanie pamiętać ani pisać tego potwora. Włączyłem to w funkcję bash, a następnie po prostu wywołałem to w razie potrzeby. Oto wspomniana funkcja bash:

macnst (){
    netstat -Watnlv | grep LISTEN | awk '{"ps -o comm= -p " $9 | getline procname;colred="\033[01;31m";colclr="\033[0m"; print colred "proto: " colclr $1 colred " | addr.port: " colclr $4 colred " | pid: " colclr $9 colred " | name: " colclr procname;  }' | column -t -s "|"
}

Mam niewielką kolekcję tych funkcji wygody w pliku pochodzącym z ~ / .bash_profile lub ~ / .zshrc. To jest dodawane do kolekcji. Byłoby interesujące zobaczyć inne możliwości, aby uczynić ten ładniejszym / szczuplejszym.

Przykładowe dane wyjściowe:

> macns
proto: tcp4     addr.port: 127.0.0.1.9999     pid: 70078    name:  /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/bin/java
proto: tcp46    addr.port: *.35729            pid: 70078    name:  /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/bin/java
proto: tcp46    addr.port: *.62087            pid: 70078    name:  /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/bin/java
proto: tcp46    addr.port: *.62070            pid: 70078    name:  /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/bin/java
proto: tcp46    addr.port: *.62085            pid: 70078    name:  /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/bin/java
proto: tcp4     addr.port: *.61993            pid: 70043    name:  /Applications/IntelliJ IDEA.app/Contents/MacOS/idea
proto: tcp46    addr.port: *.61992            pid: 70065    name:  /Applications/IntelliJ IDEA.app/Contents/jdk/Contents/Home/jre/bin/java
proto: tcp4     addr.port: 127.0.0.1.42329    pid: 70065    name:  /Applications/IntelliJ IDEA.app/Contents/jdk/Contents/Home/jre/bin/java
proto: tcp4     addr.port: 127.0.0.1.61983    pid: 70043    name:  /Applications/IntelliJ IDEA.app/Contents/jdk/Contents/Home/jre/bin/java
proto: tcp4     addr.port: 127.0.0.1.63342    pid: 70043    name:  /Applications/IntelliJ IDEA.app/Contents/jdk/Contents/Home/jre/bin/java
proto: tcp4     addr.port: 127.0.0.1.6942     pid: 70043    name:  /Applications/IntelliJ IDEA.app/Contents/jdk/Contents/Home/jre/bin/java
proto: tcp4     addr.port: 127.0.0.1.3075     pid: 67931    name:  /Applications/electerm.app/Contents/Frameworks/electerm Helper.app/Contents/MacOS/electerm Helper
proto: tcp6     addr.port: *.58640            pid: 320      name:  /usr/libexec/rapportd
proto: tcp4     addr.port: *.58640            pid: 320      name:  /usr/libexec/rapportd
proto: tcp4     addr.port: 127.0.0.1.9770     pid: 71       name:  /Applications/Pritunl.app/Contents/Resources/pritunl-service
Kroolk
źródło
Proszę nie wysyłać gifów Terminalu bota wklej tutaj tekst sformatowany jako kod. Trudno jest kopiować ti, a także czytać, jeśli potrzebujesz dużych czcionek
Mark
Obraz nie jest gifem, to tylko ekran pokazujący wynik. Jeśli klikniesz, zobaczysz, że to PNG. Hostowany na imgur .. ale domyślnie to właśnie StackExchange. W każdym razie, jeśli szukasz innego zrzutu ekranu, mogę go ponownie pobrać.
kroolk
OK w moim komentarzu zamień GIF na zrzut ekranu, nie ma znaczenia, który format. Chodzi o to, że powinien to być tekst
Mark
Po usunięciu długiego polecenia z przykładowego wyjścia, teraz działałoby to lepiej jako zrzut ekranu, ponieważ nie ma nic, co trzeba by z niego skopiować, a ponieważ może również lepiej przyciąć niż wcześniej.
mwfearnley