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?

ErrorNotFoundException
sumber

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.

mehulved
sumber
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
Eric Finn
sumber
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.

tanya
sumber
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
diyism
sumber
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).

joat
sumber
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
datashaman
sumber
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.

Robokishan
sumber