Tek astar
Hızla hizmet eden güzel bir tek astarı bir araya getirdim, keyfi bir aralıkta rastgele sayıda bağlantı noktası yakalamaya izin verdim (burada okunabilirlik için 4 satıra ayrılmıştır):
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"
Satır satır
comm
sıralanmış dosyaları iki dosyada karşılaştıran bir yardımcı programdır. Üç sütun çıkarır: yalnızca ilk dosyada görünen satırlar, yalnızca ikinci dosyada görünen satırlar ve ortak satırlar. Belirterek -23
, sonraki sütunları bastırırız ve yalnızca ilk sütunu saklarız. Bunu, metin satırları dizisi olarak ifade edilen iki kümenin farkını elde etmek için kullanabiliriz. comm
Burada öğrendim .
İlk dosya, aralarından seçim yapabileceğimiz bağlantı noktası aralığıdır. seq
numaralardan sıralanmış bir dizi üretir $FROM
için $TO
. Sonuç, işlem ikamesicomm
kullanılarak ilk dosya olarak pipetlenir .
İkinci dosya biz çağırarak elde olduğunu, bağlantı noktalarının sıralı listesi ss
(ile komutu -t
, yani TCP bağlantı noktaları -a
- kurulmuş ve dinleme - ve tüm anlam -n
, kararlılığı, diyelim kalkmayın - sayısal 22
etmek ssh
). Daha sonra yalnızca awk
yerel adresi ve bağlantı noktasını içeren dördüncü sütunu seçeriz . Biz kullanmak cut
ile bölünmüş adresi ve port için :
sınırlayıcı ve ikincisi (sadece tutmak -f2
). ss
Biz tarafından kurtulmak olduğunu aynı şekilde bir başlık, grep
Sonra uymak artık 5'ten olan sayıların boş olmayan diziler için ping comm
tarafından 'ın gereksinimi sort
sayısal ing ( -n
) ve kopyaların kurtulmak alma uniq
.
Şimdi sıralanan açık bağlantı noktalarının bir listesi var, shuf
sonra ilk "$HOWMANY"
olanları kapmak için uçabiliriz head -n
.
Misal
Özel aralıktaki üç rastgele açık bağlantı noktasını alın (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
örneğin geri dönebilir
54930
57937
51399
notlar
- geçiş
-t
ile -u
de ss
yerine serbest UDP portlarını alır.
shuf
Rastgele bir bağlantı noktası almak istemiyorsanız bırakın