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