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
commadalah 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 -23kami 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. seqmenghasilkan urutan angka yang diurutkan dari $FROMke $TO. Hasilnya disalurkan ke commsebagai file pertama menggunakan proses substitusi .
File kedua adalah daftar port yang diurutkan, yang kami peroleh dengan memanggil ssperintah (dengan -tarti port TCP, -aartinya semua - mapan dan mendengarkan - dan -nnumerik - jangan mencoba menyelesaikan, katakanlah, 22untuk ssh). Kami kemudian hanya memilih kolom keempat dengan awk, yang berisi alamat dan port lokal. Kami menggunakan cutuntuk membagi alamat dan port dengan :pembatas dan hanya menyimpan yang terakhir ( -f2). ssjuga menampilkan tajuk, yang kami singkirkan dengan grepping untuk urutan angka yang tidak kosong yang tidak lebih dari 5. Kami kemudian mematuhi commpersyaratan dengan memasukkan secara sortnumerik ( -n) dan menyingkirkan duplikat dengan uniq.
Sekarang kita memiliki daftar diurutkan dari port terbuka, bahwa kita dapat shufPHK 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
-tdengan -udi ssuntuk mendapatkan port UDP gratis sebaliknya.
- drop
shufjika Anda tidak tertarik meraih porta acak