Saya mencari perintah atau skrip yang mengembalikan port yang tidak digunakan pada sistem linux ubuntu saya. Saya telah melihat di internet dan satu-satunya hal yang saya temukan adalah tentang port yang digunakan / Dengarkan dengan perintah nestat. Tampaknya sesuatu dengan perintah netstat akan berfungsi tetapi tidak tahu persis apa. Ada yang tahu bagaimana?
Terima kasih.
linux
command-line
port
pengguna2429082
sumber
sumber
Jawaban:
netstat -lat
memberikan daftar lengkap port mendengarkan dan didirikan .Ketika sebuah port tidak pada salah satu dari negara-negara itu tidak ada untuk sistem, jadi Anda tidak akan menemukan perintah yang menunjukkan daftar port yang tidak digunakan.
Ingatlah bahwa ada 65535 port, jadi apa pun yang tidak aktif
netstat -lat
adalah port yang tidak digunakan.Skrip bash berikut akan melakukan pemindaian sederhana terhadap port tcp , dan memberi tahu Anda mana yang terbuka dan mana yang ditutup :
Jika Anda menyimpannya sebagai portscan.sh maka itu harus dijalankan sebagai ./portscan.sh IP first_port last_port , misalnya:
./portscan 127.0.0.1 20 135
akan memindai peralatan lokal dari port 20 hingga 135sumber
Ruby 2.x (satu-liner):
ruby -e 'require "socket"; puts Addrinfo.tcp("", 0).bind {|s| s.local_address.ip_port }'
Di mesin saya sekarang yang dicetak:
Doa selanjutnya dicetak:
Teknik ini menyebabkan pengguna saat ini untuk meminta port yang tidak digunakan (ikat ke port "0"), dan kemudian mencetak nomor port yang disediakan sistem operasi. Dan karena pengguna saat ini adalah yang bertanya, porta di bawah 1024 tidak akan dikembalikan (kecuali pengguna saat ini = root).
Kredit di mana kredit jatuh tempo - solusi ini berasal dari komentar Franklin Yu di unix.stackexchange.com Apa cara termudah untuk menemukan pelabuhan lokal yang tidak digunakan?
sumber
Script bash pendek yang secara acak menghasilkan angka antara 1025 dan 60000 dan loop sampai angka itu tidak ditemukan dalam daftar port yang digunakan. Ini adalah solusi cepat dan kotor yang memiliki bias pada port yang lebih besar:
sumber
Satu garis
Saya telah mengumpulkan satu-liner bagus yang dengan cepat melayani tujuan, memungkinkan untuk mengambil sejumlah port yang sewenang-wenang dalam rentang sewenang-wenang (di sini dibagi dalam 4 baris untuk dibaca):
Baris demi baris
comm
adalah utilitas yang membandingkan garis yang diurutkan dalam dua file. Ini menghasilkan tiga kolom: baris yang hanya muncul di file pertama, baris yang hanya muncul di baris kedua dan umum. Dengan menentukan-23
kami menekan kolom terakhir dan hanya menyimpan yang pertama. Kita bisa menggunakan ini untuk mendapatkan perbedaan dua set, yang dinyatakan sebagai urutan baris teks. Saya belajar dicomm
sini .File pertama adalah kisaran port yang dapat kita pilih.
seq
menghasilkan urutan angka yang diurutkan dari$FROM
ke$TO
. Hasilnya disalurkan kecomm
sebagai file pertama menggunakan proses substitusi .File kedua adalah daftar port yang diurutkan, yang kami peroleh dengan memanggil
ss
perintah (dengan-t
arti port TCP,-a
artinya semua - mapan dan mendengarkan - dan-n
numerik - jangan mencoba menyelesaikan, katakanlah,22
untukssh
). Kami kemudian hanya memilih kolom keempat denganawk
, yang berisi alamat dan port lokal. Kami menggunakancut
untuk membagi alamat dan port dengan:
pembatas dan hanya menyimpan yang terakhir (-f2
).ss
juga menampilkan tajuk, yang kami singkirkan dengangrep
ping untuk urutan angka yang tidak kosong yang tidak lebih dari 5. Kami kemudian mematuhicomm
persyaratan dengan memasukkan secarasort
numerik (-n
) dan menyingkirkan duplikat denganuniq
.Sekarang kita memiliki daftar diurutkan dari port terbuka, bahwa kita dapat
shuf
PHK untuk kemudian ambil pertama"$HOWMANY"
-orang denganhead -n
.Contoh
Raih tiga porta acak yang terbuka dalam jangkauan privat (49152-65535)
bisa kembali misalnya
Catatan
-t
dengan-u
diss
untuk mendapatkan port UDP gratis sebaliknya.shuf
jika Anda tidak tertarik meraih porta acaksumber
Saya perlu menemukan hanya satu port acak yang tidak digunakan dan tidak mencetak daftar mereka. Inilah solusi bash saya.
Dan gunakan dengan sumbernya
sumber
Mungkin solusi lain berdasarkan daftar port yang digunakan:
The
netstat
perintah menghasilkan daftar semua port terbuka. Thesed
perintah ekstrak nomor port, yang digunakan dansort
/uniq
membangun kembali daftar uniq port yang terbuka. Langkah kedua adalah membuat daftar nomor port mulai dari 1 dan selesai pada 1000 (port cadangan) dan daftar tambahan semua nomor port mulai dari 1 hingga 65535. Daftar terakhir berisi semua port yang tersedia hanya sekali danuniq -u
akan mengekstraknya . Terakhir,shuf -n 1
akan memilih satu port acak dari daftar lengkap port yang tersedia. Namun demikian, akan ada kondisi balapan, sebelum seseorang dapat memesan pelabuhan.sumber
Saya perlu menemukan port terbuka berikutnya mulai dari nomor port; inilah upaya saya menggunakan solusi @Taras.
sumber
Jika 54321 adalah port Anda, jalankan:
Beberapa variasi penggunaan netstat dapat ditemukan di sini .
sumber