หนึ่งในสายการบิน
ฉันได้รวบรวมหนึ่งซับที่ดีที่ตอบสนองวัตถุประสงค์ได้อย่างรวดเร็วช่วยให้คว้าหมายเลขพอร์ตโดยพลการในช่วงใดก็ได้ (ที่นี่แบ่งออกเป็น 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นอกจากนี้ยังมีการส่งออกส่วนหัวที่เราได้รับการกำจัดโดยgrepping สำหรับลำดับที่ไม่ว่างเปล่าของตัวเลขที่มีความยาวไม่เกิน 5 แล้วเราปฏิบัติตามcomm's ความต้องการโดยไอเอ็นจีได้โดยไม่ซ้ำกันsort-u
ตอนนี้เรามีรายการที่เรียงลำดับของพอร์ตที่เปิดให้เราสามารถshufFLE ไปแล้วคว้าแรกคนที่มี"$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 ที่เลือกมากกว่า) วิธีที่จะทำคือลองและเปิดพอร์ตในโหมดใดก็ตามที่คุณต้องการและลองใช้พอร์ตอื่นหากไม่พร้อมใช้งาน