Wie kann ich meine offenen Netzwerkports mit netstat auflisten?


206

Ich möchte meine offenen Netzwerkports im Terminal mit eingebauten Befehlen auflisten. Wie ich weiß, netstatist der Befehl zu verwenden. Aber ich kämpfe darum, nützliche Informationen herauszuholen.

Wie kann ich meine offenen Ports mit auflisten netstat? Irgendwelche spezifischen Flags, die mir in diesem Fall helfen?

Antworten:


309
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
Vielen Dank! Die Ausgabe ist allerdings ziemlich schwer zu lesen, war aber lsofdanke etwas besser.
Jonas

12
Sie müssen verwenden sudo lsof .... Ohne das sudo kann lsof nur Ihre eigenen Prozesse sehen und zeigt daher keine Ports an, die von Systemprozessen geöffnet wurden. Sie können den Befehl grep auch überspringen, indem Sie lsof mitteilen, dass Sie nur Ports im Status LISTEN mit sehen möchten sudo lsof -PiTCP -sTCP:LISTEN.
Gordon Davisson

1
→ grgarside: Achten Sie auf die Auswirkungen grep -i "listen"Ihrer 2 Beispiele.
Dan

1
Mit GNU netstatkönnen Sie optional die PID des Prozesses auflisten, der jeden Port geöffnet hat. Gibt es eine Möglichkeit, dieses Verhalten auch mit BSD netstatzu erreichen?
Chris

2
Ich habe gerade herausgefunden, dass die -vFlagge das einschaltet. Die pid steht in der vorletzten Spalte.
Chris

64

vielleicht kannst du lsof benutzen:

lsof -Pn -i4

-i4 bedeutet, dass nur die IPv4-Adresse und die Ports -P und -n für die schnelle Ausgabe angezeigt werden

Ausgabe wie folgt

  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
Was macht dieser Befehl?
Nohillside

3
lsoflistet offene Dateien auf. Netzwerk-Sockets werden als Dateien gezählt, sodass alle offenen Netzwerk-Sockets (die abgehört werden oder gerade verwendet werden) in aufgelistet werden lsof.
Craig Trader

Es zeigt auch die Prozess-ID (netstat nicht)
lib

1
lsof -Pn -i6für IPV6
Jared Burrows

2
Zumindest auf meiner Maschine dauert diese Antwort 0,1s, während bei @ grgarside 28+ s sind. Der Unterschied ist der -i4Switch, um nur IPv4-Adressen zu betrachten.
Davor Cubranic

8

Die einfachste Methode ist die Verwendung von 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     

… Ohne zusätzliche Filterung, um die richtigen Header zu erhalten und zu sehen, dass beide Server empfangsbereit sind und bereits Verbindungen in beide Richtungen hergestellt wurden. In diesem Beispiel zeigt die 1. Zeile eine Verbindung von meinem Mac in Richtung 17.172.233.109, die eine weitere:

whois 17.172.233.109

hat mir beigebracht, dass es sich bei Apple befindet.


6

Erstens bin ich kein BSD-Experte, aber wie beim OP wollte ich das grobe Äquivalent, das folgende auf einer * nix-Box laufen zu lassen, oder etwas Ähnliches:

netstat -tulpn

Ich habe andere Fragen / Antworten gelesen, die lsof * und netstat * unter MacOS anbieten, und ich wollte immer noch etwas mit kompakterer Ausgabe. Also, das ist, was ich schnell zusammengestellt habe:

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 "|"

Es ist ein bisschen übertrieben, also habe ich der Ausgabe Farbe hinzugefügt, um ein gutes Maß zu erhalten. Da ich mich nicht erinnern kann oder tippen möchte, ist dies ein Ungetüm. Ich stelle es in eine Bash-Funktion und rufe es dann einfach auf, wenn es gebraucht wird. Hier ist die Bash-Funktion:

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 "|"
}

Ich habe eine kleine Sammlung dieser praktischen Funktionen in einer Datei, die ich aus ~ / .bash_profile oder ~ / .zshrc beziehe. Dies wird der Sammlung hinzugefügt. Es wäre interessant, andere Möglichkeiten zu sehen, um dies schöner / schlanker zu machen.

Beispielausgabe:

> 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

Bitte poste keine Gifs von Terminal Bot. Füge den hier als Code formatierten Text ein. Es ist schwierig zu kopieren und auch zu lesen, wenn Sie große Schriftarten benötigen
user151019

Das Bild ist kein GIF, es ist nur ein Bildschirm, der die Ausgabe zeigt. Wenn Sie sich durchklicken, sehen Sie, dass es sich um ein PNG handelt. Hosted on imgur .. aber das ist was StackExchange standardmäßig, denke ich. Wie auch immer, wenn Sie nach einem anderen Screenshot suchen, kann ich ihn erneut aufnehmen.
kroolk

OK in meinem Kommentar ersetzen GIF durch Screenshot es spielt keine Rolle, welches Format. Der Punkt ist, es sollte Text sein
user151019

Da der Befehl long aus der Beispielausgabe entfernt wurde, funktioniert er jetzt besser als Screenshot, da nichts kopiert werden muss und er auch besser als zuvor beschneiden kann.
Mwfearnley
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.