Tek astar
Amacına hızlı bir şekilde hizmet eden ve isteğe bağlı bir aralıkta rasgele sayıda bağlantı noktası alma olanağı sağlayan güzel bir astarı bir araya getirdim (burada okunabilirlik için 4 satıra bölünmüştür):
comm -23 \
<(seq "$FROM" "$TO" | sort) \
<(ss -tan | awk '{print $4}' | cut -d':' -f2 | grep '[0-9]\{1,5\}' | sort -u) \
| shuf | head -n "$HOWMANY"
Satır satır
commSatırları alfabetik olarak sıralanmış 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 genel satırlar. Belirterek -23, ikinci sütunları bastırır ve yalnızca birincisini tutarız. Bunu, metin satırlarının bir sırası olarak ifade edilen iki küme farkını elde etmek için kullanabiliriz. comm Burada öğrendim .
İlk dosya, seçebileceğimiz portların aralığıdır. seqgelen bir sayı kriteri dizisi üreten $FROMiçin $TO. Sonuç, alfabetik olarak (sayısal yerine) sıralanır ve işlem değiştirmecomm kullanılarak ilk dosya olarak aktarılır .
İkinci dosya biz çağırarak elde olduğunu, bağlantı noktalarının sıralı listesi sskomutu ile ( -t, anlam TCP bağlantı noktaları -a- kurulmuş ve dinleme - ve tüm anlam -nsayısal -, diyelim ki, çözümlemeye kalkma 22için ssh). Daha sonra sadece awkyerel adresi ve portu içeren dördüncü sütunu seçiyoruz . Biz kullanmak cutile adresi ve port bölünmüş :(sınırlayıcı ve tek ikincisi tutmak -f2). ssaynı şekilde bir başlık, biz tarafından kurtulmak olduğunu grepartık Sonra uymak 5'ten olan sayıların boş olmayan diziler için ping commtarafından 'ın gereksinimi sortyineleme olmadan ing -u.
Şimdi shufdaha sonra ilkleri kapmak için el koyabileceğimiz sıralı bir açık portlar listemiz "$HOWMANY"var head -n.
Örnek
Özel serideki üç rastgele açık portu al (49152-65535)
comm -23 <(seq 49152 65535 | sort) <(ss -tan | awk '{print $4}' | cut -d':' -f2 | grep "[0-9]\{1,5\}" | sort -u) | shuf | head -n 3
örneğin geri dönebilir
54930
57937
51399
notlar
- geçiş
-tile -uin ssyerine ücretsiz UDP portlarını alır.
- rastgele yerine sayısal olarak sıralanan kullanılabilir bağlantı noktaları almayı tercih ediyorsanız
shufile değiştirinsort -n
-nnetstat ve daha seçici bir grep ekler ). Bunu yapmanın yolu, istediğiniz modda bir bağlantı noktasını denemek ve açmak ve mevcut değilse başka bir tane denemek.