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