Bagaimana saya bisa mendaftar port jaringan terbuka saya dengan netstat?


206

Saya ingin mendaftar port jaringan terbuka saya di Terminal dengan perintah bawaan. Seperti yang saya tahu, netstatadalah perintah untuk digunakan. Tetapi saya berjuang untuk mendapatkan informasi yang berguna darinya.

Bagaimana saya bisa mendaftar port terbuka saya dengan netstat? Adakah tanda khusus yang membantu saya dalam kasus ini?

Jawaban:


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
Terima kasih! Namun, hasilnya cukup sulit untuk dibaca, tetapi lsofsedikit lebih baik, terima kasih.
Jonas

12
Anda harus menggunakan sudo lsof .... Tanpa sudo, lsof hanya dapat melihat proses yang Anda miliki, dan karenanya tidak akan menampilkan port apa pun yang dibuka oleh proses sistem. Juga, Anda dapat melewatkan perintah grep dengan memberi tahu jika Anda hanya ingin melihat port dengan status LISTEN sudo lsof -PiTCP -sTCP:LISTEN.
Gordon Davisson

1
→ grgarside: waspadai efek dari grep -i "listen"2 contoh Anda.
dan

1
Dengan GNU netstat, Anda dapat secara opsional mendaftar pid dari proses yang membuka setiap port. Apakah ada cara untuk mendapatkan perilaku itu dengan BSD netstatjuga?
Chris

2
Saya baru saja melakukannya, ternyata -vbendera itu menyala. Pid akan berada di kolom kedua hingga terakhir.
Chris

64

mungkin Anda bisa menggunakan lsof:

lsof -Pn -i4

-i4 berarti hanya menampilkan alamat dan port ipv4 -P dan -n output cepat

output seperti ini

  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
Apa yang dilakukan perintah ini?
nohillside

3
lsofdaftar file yang terbuka. Soket jaringan dihitung sebagai file, sehingga setiap soket jaringan yang terbuka (baik mendengarkan atau digunakan secara aktif) akan didaftar lsof.
Craig Trader

Ini juga menunjukkan id proses (netstat tidak)
lib

1
lsof -Pn -i6untuk IPV6
Jared Burrows

2
Setidaknya satu mesin saya, jawaban ini membutuhkan 0,1 detik, sedangkan @ grgarside adalah 28+. Perbedaannya adalah -i4saklar, untuk hanya melihat alamat IPv4.
Davor Cubranic

8

Metode paling sederhana adalah dengan menggunakan 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     

... tanpa pemfilteran tambahan, untuk mendapatkan tajuk yang benar, dan untuk melihat kedua server mendengarkan, dan koneksi sudah terjalin di kedua arah. Dalam contoh ini, baris pertama menunjukkan hubungan dari Mac saya ke arah 17.172.233.109, yang selanjutnya:

whois 17.172.233.109

mengajari saya itu terletak di Apple.


6

Pertama, saya bukan ahli BSD, tetapi seperti OP, saya ingin setara kasar menjalankan berikut ini di kotak * nix, atau sesuatu yang dekat:

netstat -tulpn

Saya membaca pertanyaan / jawaban lain yang menawarkan lsof * dan netstat * di MacOS, dan saya masih menginginkan sesuatu dengan output yang lebih ringkas. Jadi, inilah yang saya cepat kumpulkan:

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

Ini agak berlebihan, jadi saya menambahkan warna ke output untuk ukuran yang baik. Karena saya tidak akan bisa mengingat, atau ingin mengetik, raksasa ini. Saya memasukkannya ke dalam fungsi bash dan kemudian memanggilnya saat dibutuhkan. Di sini dikatakan fungsi 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 "|"
}

Saya memiliki koleksi kecil fungsi-fungsi kenyamanan ini dalam file yang saya sumber dari ~ / .bash_profile, atau ~ / .zshrc. Ini sedang ditambahkan ke koleksi. Akan menarik melihat peluang lain untuk membuat ini lebih bagus / lebih ramping.

Output sampel:

> 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

Tolong jangan posting gif Terminal bot tempel teks di sini diformat sebagai kode. Sulit untuk menyalin dan juga perlu membaca jika Anda membutuhkan font besar
user151019

Gambar bukan gif, hanya layar yang menunjukkan output. Jika Anda mengklik melalui Anda akan melihat itu adalah PNG. Di-host di imgur .. tapi itulah yang menurut saya standar untuk StackExchange. Lagi pula, jika Anda mencari tangkapan layar yang berbeda, saya bisa ambil kembali.
kroolk

OK di komentar saya ganti GIF dengan tangkapan layar, tidak masalah format apa. Intinya adalah harus berupa teks
user151019

Karena menghapus perintah panjang dari output sampel, sebenarnya itu sekarang berfungsi lebih baik sebagai tangkapan layar, karena tidak ada yang perlu disalin dari itu, dan karena itu juga dapat memotong lebih baik dari sebelumnya.
mwfearnley
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.