एक लाइन
मैंने एक अच्छा वन-लाइनर लगाया है जो जल्दी से उद्देश्य को पूरा करता है, एक मनमाना रेंज में बंदरगाहों की एक मनमानी संख्या को हड़पने की अनुमति देता है (यहां पठनीयता के लिए इसे 4 लाइनों में विभाजित किया गया है):
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"
पंक्ति दर पंक्ति
comm
एक उपयोगिता है जो दो फाइलों में क्रमबद्ध लाइनों की तुलना करती है। यह तीन स्तंभों को आउटपुट करता है: लाइनें जो केवल पहली फ़ाइल में दिखाई देती हैं, लाइनें जो केवल दूसरे एक और आम लाइनों में दिखाई देती हैं। निर्दिष्ट करके -23
हम बाद के कॉलमों को दबाते हैं और केवल पहले वाले को रखते हैं। इसका उपयोग हम दो पंक्तियों के अंतर को प्राप्त करने के लिए कर सकते हैं, जिसे पाठ पंक्तियों के अनुक्रम के रूप में व्यक्त किया जाता है। मैंने comm
यहां के बारे में सीखा ।
पहली फ़ाइल बंदरगाहों की श्रेणी है जिसे हम चुन सकते हैं। seq
से संख्या का एक क्रमबद्ध अनुक्रम का उत्पादन $FROM
करने के लिए $TO
। प्रक्रिया प्रतिस्थापन केcomm
उपयोग से पहली फ़ाइल के रूप में परिणाम को पाइप किया जाता है ।
दूसरी फ़ाइल बंदरगाहों में से क्रमबद्ध सूची, कि हम फोन करके प्राप्त है ss
(के साथ आदेश -t
अर्थ TCP पोर्ट, -a
- स्थापना की और सुनने - और सभी अर्थ -n
संख्यात्मक - संकल्प, कहते हैं की कोशिश न करें, 22
करने के लिए ssh
)। हम तब केवल चौथे कॉलम को चुनते हैं awk
, जिसमें स्थानीय पता और पोर्ट होता है। हम cut
पता और पोर्ट को :
सीमांकित के साथ विभाजित करने और केवल बाद वाले ( -f2
) को रखने के लिए उपयोग करते हैं । ss
एक हेडर को भी आउटपुट करें, कि हम grep
संख्याओं के गैर-खाली अनुक्रमों के लिए पिंग द्वारा छुटकारा पाएं जो अब 5 से अधिक नहीं हैं। फिर हम संख्यात्मक रूप से ( ) के साथ डुप्लिकेट से छुटकारा पाने की comm
आवश्यकता का अनुपालन करते हैं ।sort
-n
uniq
अब हमारे पास खुले बंदरगाहों की सूची है, जिसे हम shuf
पहले "$HOWMANY"
वाले हड़पने के लिए उड़ सकते हैं head -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
उदाहरण के लिए लौट सकते हैं
54930
57937
51399
टिप्पणियाँ
- स्विच
-t
के साथ -u
में ss
बजाय मुक्त UDP पोर्ट मिलता है।
- ड्रॉप
shuf
अगर आप एक यादृच्छिक बंदरगाह को हथियाने में रुचि नहीं रखते हैं