एक लाइन
मैंने एक अच्छा वन-लाइनर लगाया है जो जल्दी से उद्देश्य को पूरा करता है, एक मनमाना रेंज में बंदरगाहों की एक मनमानी संख्या को हथियाने की अनुमति देता है (यहां पठनीयता के लिए इसे 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अगर आप उपलब्ध बंदरगाहों के बजाय यादृच्छिक पर संख्यानुसार हल कर पाने के लिए पसंद करते हैं
-nnetstat और एक अधिक चयनात्मक grep में जोड़ें)। इसे करने का तरीका यह है कि किसी भी मोड में एक पोर्ट को खोलने और खोलने की आवश्यकता है, और यदि उपलब्ध नहीं है तो एक और कोशिश करें।