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