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