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?

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)

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)

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.


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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.