Dapatkan daftar Open Ports di Linux


191

Saya memerlukan perintah Linux untuk mendaftar semua port terbuka gratis untuk digunakan dalam aplikasi

lsof -i TCP| fgrep LISTEN

Tampaknya tidak membantu karena Port yang dicantumkannya belum tentu gratis untuk digunakan. Bagaimana cara mendaftar port terbuka gratis yang tidak digunakan?

Jawaban:


258
netstat -lntu

seperti yang dijawab oleh @askmish akan memberi Anda daftar layanan yang berjalan di sistem Anda pada tcp dan udp port mana

  • -l = hanya layanan yang mendengarkan pada beberapa port
  • -n = tampilkan nomor port, jangan mencoba untuk menyelesaikan nama layanan
  • -t = port tcp
  • -u = port udp
  • -p = nama program

Anda tidak memerlukan parameter 'p' karena Anda hanya tertarik untuk mendapatkan port mana yang gratis dan bukan program mana yang menjalankannya.

Ini hanya menunjukkan port mana pada sistem Anda yang digunakan. Ini tidak memberi tahu Anda status jaringan Anda, mis. Jika Anda berada di belakang NAT dan Anda ingin beberapa layanan dapat diakses dari luar. Atau jika firewall memblokir port untuk pengunjung luar. Dalam hal ini, nmap datang untuk menyelamatkan. PERINGATAN: Gunakan nmap hanya pada jaringan yang berada di bawah kendali Anda. Juga, ada aturan firewall yang dapat memblokir ping nmap, Anda harus bermain-main dengan opsi untuk mendapatkan hasil yang benar.


20
Catatan yang netstatsudah usang pada banyak sistem dan ssharus digunakan sebagai gantinya.
Johu

1
tetapi jika Anda menggunakan busybox sstidak termasuk
jcollum

90

Karena net-toolssudah usang , Anda dapat menggunakan ssperintah alih-alih netstatjika netstattidak ada di mesin Anda:

ss -lntu

harus bekerja sama dengan

netstat -lntu

sesuai dengan bantuan bawaan:

-n, --numeric       don't resolve service names
-l, --listening     display listening sockets
-t, --tcp           display only TCP sockets
-u, --udp           display only UDP sockets

3
Bendera lain yang bermanfaat adalah -p yang menunjukkan proses id dari soket.
Talespin_Kit

21

Perintah ini akan mendaftar port jaringan terbuka dan proses yang memilikinya:

netstat -lnptu

Anda dapat menyaring hasilnya ke spesifikasi yang tepat.

Anda juga dapat menggunakan nmapuntuk hasil yang lebih terperinci tentang port.


2
Bendera -p membutuhkan hak akses root untuk beberapa proses, jadi itu akansudo netstat -lnptu
klaus se

5

Semua port yang terbuka termasuk lalu lintas respons:

netstat -tuwanp 2>/dev/null | awk '{print $4}' | sort | uniq -c | wc -l

3
Daftar hanya nomor port yang unik dan hanya IPv4:netstat -tuwanp4 | awk '{print $4}' | grep ':' | cut -d ":" -f 2 | sort | uniq
Aaron C. de Bruyn

+1 untuk menunjukkan cara memfilter dan mengekstraksi angka dari hasil. Diedit untuk menghapus output stderr dari netstat (yang menambahkan header ke hasil di Ubuntu).
datashaman

Hmm, pada pikiran kedua. -1 untuk tidak menjawab pertanyaan.
datashaman

1

Menurut saya pertanyaan awal adalah dia bertanya tentang port yang tidak digunakan, bukan port yang saat ini terhubung ke layanan. Jika demikian, tidak ada cara khusus untuk mencantumkannya, selain mencantumkan port yang digunakan dan menganggap yang lain tidak digunakan.

Satu hal tambahan yang perlu diingat: sebagai pengguna, Anda tidak akan dapat membuka port kurang dari 1024 (Anda akan memerlukan izin root untuk itu).


0

Perintah berikut akan bekerja pada Unix mana pun yang menghasilkan dalam format yang sama dengan Ubuntu / Debian - di mana alamat lokal berada di kolom 4 dan outputnya menyertakan tajuk 2 baris di bagian atas. Jika salah satu dari angka-angka itu berbeda, tweak perintah awk di bawah ini.

Jika Anda ingin IPv4 saja:

netstat -lnt | awk 'NR>2{print $4}' | grep -E '0.0.0.0:' | sed 's/.*://' | sort -n | uniq

Jika Anda hanya menginginkan IPv6:

netstat -lnt | awk 'NR>2{print $4}' | grep -E ':::' | sed 's/.*://' | sort -n | uniq

Jika Anda ingin keduanya bersama:

netstat -lnt | awk 'NR>2{print $4}' | grep -E '(0.0.0.0:|:::)' | sed 's/.*://' | sort -n | uniq

Perintah menampilkan daftar nomor port yang mendengarkan pada semua antarmuka. Jika Anda ingin membuat daftar semua port yang mendengarkan pada antarmuka localhost, gunakan sesuatu seperti ini:

netstat -lnt | awk 'NR>2{print $4}' | grep -E '(127.0.0.1:|::1:)' | sed 's/.*://' | sort -n | uniq

0

Mencoba

sudo netstat -plnt | grep -E '(0.0.0.0:|:::|127.0.0.1:|::1:)' |  awk 'NR>2{print $7}' | sort -n  | uniq

dan lihat ini.

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.