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):
comm -23 \
<(seq "$FROM" "$TO") \
<(ss -tan | awk '{print $4}' | cut -d':' -f2 | grep '[0-9]\{1,5\}' | sort -n | uniq) \
| shuf | head -n "$HOWMANY"
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 di comm
sini .
File pertama adalah kisaran port yang dapat kita pilih. seq
menghasilkan urutan angka yang diurutkan dari $FROM
ke $TO
. Hasilnya disalurkan ke comm
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
untuk ssh
). Kami kemudian hanya memilih kolom keempat dengan awk
, yang berisi alamat dan port lokal. Kami menggunakan cut
untuk membagi alamat dan port dengan :
pembatas dan hanya menyimpan yang terakhir ( -f2
). ss
juga menampilkan tajuk, yang kami singkirkan dengan grep
ping untuk urutan angka yang tidak kosong yang tidak lebih dari 5. Kami kemudian mematuhi comm
persyaratan dengan memasukkan secara sort
numerik ( -n
) dan menyingkirkan duplikat dengan uniq
.
Sekarang kita memiliki daftar diurutkan dari port terbuka, bahwa kita dapat shuf
PHK untuk kemudian ambil pertama "$HOWMANY"
-orang dengan head -n
.
Contoh
Raih tiga porta acak yang terbuka dalam jangkauan privat (49152-65535)
comm -23 <(seq 49152 65535) <(ss -tan | awk '{print $4}' | cut -d':' -f2 | grep "[0-9]\{1,5\}" | sort | uniq) | shuf | head -n 3
bisa kembali misalnya
54930
57937
51399
Catatan
- beralih
-t
dengan -u
di ss
untuk mendapatkan port UDP gratis sebaliknya.
- drop
shuf
jika Anda tidak tertarik meraih porta acak