Açık ağ portlarımı netstat ile nasıl listeleyebilirim?


206

Açık ağ bağlantı noktalarımı Terminal'de yerleşik komutlarla listelemek istiyorum. Bildiğim kadarıyla, netstatkullanılacak komuttur. Ama bundan yararlı bir bilgi edinmek için mücadele ediyorum.

Açık portlarımı ile nasıl listeleyebilirim netstat? Bu durumda bana yardımcı olan herhangi bir özel bayrak var mı?

Yanıtlar:


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
Teşekkürler! Ancak, çıktı okumak oldukça zor, ama lsofbiraz daha iyiydi, teşekkürler.
Jonas

12
Kullanman gerek sudo lsof .... Sudo olmadan, lsof yalnızca sahip olduğunuz işlemleri görebilir ve bu nedenle sistem işlemleri tarafından açılan herhangi bir bağlantı noktasını göstermez. Ayrıca, grep komutunu yalnızca LISTEN durumundaki bağlantı noktalarını görmek istediğinizi söyleyerek atlayabilirsiniz sudo lsof -PiTCP -sTCP:LISTEN.
Gordon Davisson

1
→ grgarside: grep -i "listen"2 örneğinizin etkisine dikkat edin .
dan

1
GNU ile netstatisteğe bağlı olarak her portu açan işlemin pidini listeleyebilirsiniz. BSD netstatile de bu davranışı elde etmenin bir yolu var mı ?
Chris,

2
Daha yeni yaptım, -vbayrağını açıyor. Pid, ikinci-son sütunda olacaktır.
Chris,

64

belki lsof kullanabilirsiniz:

lsof -Pn -i4

-i4 yalnızca ipv4 adresini ve bağlantı noktalarını gösterme anlamına gelir -P ve -n hızlı çıktı

böyle çıktı

  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
Bu komut ne yapar?
yokuş yukarı

3
lsofaçık dosyaları listeler. Ağ soketleri dosya olarak sayılır, böylece her açık ağ soketi (dinleyen veya aktif olarak kullanımda) listelenir lsof.
Craig Trader,

Aynı zamanda süreç kimliğini de gösterir (netstat değil)
lib

1
lsof -Pn -i6IPV6 için
Jared Burrows,

2
Makinemden biri en azından bu cevap 0.1 saniye sürüyor, oysa @ grgarside's 28+ s. Aradaki fark, -i4yalnızca IPv4 adreslerine bakmaktır.
Davor Cubranic

8

En basit yöntem kullanmaktır 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     

… Herhangi bir filtreleme olmadan, doğru başlıkları elde etmek ve her iki sunucunun dinlendiğini ve zaten her iki yönde de kurulmuş bağlantıları görmek için. Bu örnekte, 1. satır Mac'imden bana doğru bir bağlantı sergiliyor 17.172.233.109;

whois 17.172.233.109

bana Apple'da bulunduğunu öğretti.


6

İlk önce, bir BSD uzmanı değilim, ancak OP gibi ben de aşağıdakileri * nix kutusunda ya da yakın bir şeyde çalıştırmanın kaba bir eşdeğerini istedim:

netstat -tulpn

MacOS'ta lsof * ve netstat * 'ı sunan diğer soruları / cevapları okudum ve hala daha kompakt çıktıya sahip bir şey istedim. Demek hızlı bir şekilde bir araya getirdim:

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

Biraz overkill, bu yüzden iyi ölçmek için çıktıya renk ekledim. Bu behemoth'u hatırlayamayacağım veya yazmak istemediğim için. Ben bir bash fonksiyonuna koydum ve gerektiğinde sadece onu çağır. İşte söylenen bash işlevi:

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

~ / .Bash_profile veya ~ / .zshrc kaynaklarından aldığım bir dosyada bu kolaylık işlevlerinin küçük bir koleksiyonuna sahibim. Bu koleksiyona eklenmektedir. Bu daha güzel / daha ince hale getirmek için başka fırsatlar görmek ilginç olurdu.

Örnek çıktı:

> 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

Lütfen Terminal bot'un giflerini buraya kod olarak biçimlendirilmiş metni yapıştırmayınız. Bu zor ti kopyasıdır ve ayrıca büyük yazı tipleri gerekiyorsa okumak için gard
Mark

Görüntü bir gif değil, çıktıyı gösteren bir ekran. Tıklarsanız bir PNG olduğunu görürsünüz. İmgur'da barındırılıyor .. ama StackExchange'in varsayılan olarak kabul ettiği budur. Her neyse, farklı bir ekran görüntüsü arıyorsanız, yeniden alabilirim.
kroolk

Tamam benim yorumumda GIF'in yerine ekran görüntüsünü değiştir, hangi formatın önemi yok. Mesele şu ki metin olmalı
Mark

Uzun komutu örnek çıktıdan çıkardığından beri, aslında ekran görüntüsü olarak daha iyi çalışır, çünkü ondan kopyalanması gereken hiçbir şey yoktur ve öncekinden daha iyi kırpma yapabilir.
mwfearnley
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.