เครื่องมือเครือข่าย TCP/UDP อเนกประสงค์
Netcrab เป็นเครื่องมือเครือข่ายบรรทัดคำสั่งที่สามารถทำสิ่งต่างๆ ได้มากมาย เป็นการแสดงความเคารพต่อ netcat และสามารถทำสิ่งต่างๆ มากมายที่สามารถทำได้ ภาพรวมโดยย่อของสิ่งที่สามารถทำได้:
สำหรับการใช้งานเต็มรูปแบบ ให้รัน netcrab --help
netcrab HOST:PORT
สิ่งนี้เชื่อมต่อกับเซิร์ฟเวอร์ TCP ที่ระบุ ตอนนี้ stdin ของคุณจะถูกส่งไปยังเซิร์ฟเวอร์และ stdout จะถูกพิมพ์ออกมา
รูปแบบ IPv6 สำหรับชื่อโฮสต์ควรใช้วงเล็บเหลี่ยมล้อมรอบ เช่น localhost คือ [::1]
netcrab -L ADDR:PORT
netcrab -l ADDR:PORT
คุณสามารถฟังเป็นเซิร์ฟเวอร์ TCP บนพอร์ตใดก็ได้ การใช้ -l
ออกจากโปรแกรมหลังจากการเชื่อมต่อขาเข้าครั้งแรกตัดการเชื่อมต่อ ใช้ -L
เพื่อ "ฟังให้หนักขึ้น": ฟังต่อหลังจากขาดการเชื่อมต่อ
ไวยากรณ์ ADDR:PORT
รองรับรูปแบบพิเศษบางอย่าง:
localhost:5000
:5000
*:5000
เซิร์ฟเวอร์ TCP ตามค่าเริ่มต้นอนุญาตให้มีการเชื่อมต่อขาเข้าเดียวเท่านั้นที่ใช้งานได้ต่อครั้งต่อที่อยู่การฟัง แต่แฟล็ก -m max_inbound_clients
อนุญาตให้เชื่อมต่อได้มากกว่าหนึ่งรายการ
เช่นเดียวกับโหมดไคลเอนต์ stdin จะถูกส่งไปยังซ็อกเก็ตที่เชื่อมต่อทั้งหมด และข้อมูลขาเข้าจากซ็อกเก็ตทั้งหมดจะถูกส่งไปยัง stdout สิ่งนี้สามารถเปลี่ยนแปลงได้โดยใช้อาร์กิวเมนต์โหมดอินพุตและเอาต์พุตด้านล่าง
อาร์กิวเมนต์ -z
ทำให้ซ็อกเก็ตตัดการเชื่อมต่อทันทีโดยไม่อนุญาตให้ส่งข้อมูลใดๆ มีประโยชน์สำหรับการทดสอบการเชื่อมต่อ
netcrab -u -L ADDR:PORT
netcrab -u HOST:PORT
UDP นั้นแปลกตรงที่คุณไม่ได้ "เชื่อมต่อ" กับมันจริงๆ คุณผูกเข้ากับพอร์ตภายในเครื่องแล้วส่ง/รับดาตาแกรมไปยัง/จากเพียร์ระยะไกล โหมดการฟังและโหมดการเชื่อมต่อสำหรับ UDP ทำงานเหมือนกันทุกประการ ยกเว้นว่าในโหมดการเชื่อมต่อ เพียร์แรกที่ส่ง stdin ไปให้เป็นที่รู้จักตั้งแต่เริ่มต้น และในโหมดการฟัง การรับส่งข้อมูล stdin จะไม่สามารถส่งไปที่ใดก็ได้จนกว่าผู้ฟังจะได้รับอย่างน้อย หนึ่งดาตาแกรมจากเพียร์
สำหรับ -L
สิ่งนี้รองรับ ADDR:PORT
ไวยากรณ์เดียวกันกับด้านบนสำหรับ TCP
ขนาดเดตาแกรมมีค่าเริ่มต้นอยู่ที่ 1 ไบต์ แต่สามารถควบคุมได้โดยอาร์กิวเมนต์ --ss
netcrab -L ADDR1:PORT1 -L ADDR2:PORT2
netcrab -u -L ADDR1:PORT1 -L ADDR2:PORT2
Netcrab รองรับการฟังที่อยู่และพอร์ตภายในเครื่องหลายรายการพร้อมกัน มันจะยอมรับการเชื่อมต่อที่มาถึงอันใดอันหนึ่ง สิ่งนี้รองรับ TCP และ UDP
netcrab -u --mc HOST:PORT
Netcrab รองรับการรวมซ็อกเก็ต UDP กับกลุ่มมัลติคาสต์โดยการเพิ่มอาร์กิวเมนต์ --mc
นอกจากนี้ยังให้การควบคุม TTL สำหรับแพ็กเก็ตมัลติคาสต์ ( --ttl
) และไม่ว่าจะรับแพ็กเก็ตมัลติคาสต์แบบวนซ้ำหรือไม่เนื่องจากโปรแกรมเข้าร่วมในกลุ่ม ( --mc_no_loop
)
netcrab -u -b HOST:PORT
Netcrab รองรับการส่งดาตาแกรมออกอากาศ UDP
netcrab -i MODE
สามารถควบคุมโหมดอินพุตได้ ตามค่าเริ่มต้น อินพุตจะมาจาก stdin ยอมรับโหมดอื่นๆ ดังต่อไปนี้:
none
: ไม่สามารถป้อนข้อมูลได้ การรับส่งข้อมูลเดียวที่จะถูกประมวลผลจะมาจากเพียร์ระยะไกลstdin-nochar
: ทำงานเหมือนกับ stdin แต่ไม่ได้ใช้ "โหมดอักขระ" สิ่งนี้ทำงานได้แย่กว่าสำหรับการใช้งานแบบโต้ตอบecho
: ปริมาณข้อมูลที่ได้รับจะถูกสะท้อนกลับไปยังผู้ส่งrand
: ข้อมูลแบบสุ่มจะถูกสร้างขึ้น ขนาดข้อมูลแบบสุ่มสามารถควบคุมได้โดย --rsizemin
และ --rsizemax
และประเภทของข้อมูลสามารถควบคุมได้โดย --rvals
fixed
: มีประโยชน์จริงๆ สำหรับการทดสอบที่สมบูรณ์แบบเท่านั้น ข้อความขนาดคงที่เดียวกันกับข้อมูลคงที่จะถูกส่งอย่างไม่สิ้นสุด คุณสามารถควบคุมขนาดโดยใช้ --ss
และประเภทของข้อมูลสุ่มในนั้นด้วย --rvals
pfqoscli
: วัดเวลาแฝงกับบีคอน PlayFab Quality of Servicepfqossrv
: ทำหน้าที่เป็นเซิร์ฟเวอร์บีคอน PlayFab Quality of Service สำหรับไคลเอ็นต์เพื่อกำหนดเป้าหมายในการวัดเวลาแฝง เมื่อใช้โหมด stdin โหมดใดโหมดหนึ่งเป็นอินพุต คุณสามารถระบุ --exit-after-input
เพื่อออกจากโปรแกรมหลังจากสตรีมอินพุตถึงจุดสิ้นสุดของไฟล์
netcrab -o MODE
ตามค่าเริ่มต้น เอาต์พุตไปที่ stdout แต่มักจะมีประโยชน์หากเปลี่ยนเป็น -o none
เพื่อข้ามเอาต์พุตทั้งหมด สิ่งนี้มีประโยชน์อย่างยิ่งเมื่อส่งผ่านการรับส่งข้อมูลจำนวนมาก เนื่องจากอาจทำให้การส่งออกช้าลง
โหมดเริ่มต้นของ Netcrab คือการใช้ stdin และ stdout ดังนั้นคุณจึงสามารถเปลี่ยนเส้นทางอินพุตจากไฟล์และส่งเอาต์พุตไปยังไฟล์ได้ (หรือไปป์ระหว่างโปรแกรม)
netcrab HOST:PORT < file
echo message | netcrab HOST:PORT
netcrab -6
netcrab -4
คุณสามารถจำกัดการใช้เฉพาะตระกูลที่อยู่ IPv6 หรือ IPv4 เท่านั้น สิ่งนี้สร้างความแตกต่างมากขึ้นเมื่อเชื่อมต่อกับชื่อโฮสต์ที่ผ่านการแก้ไข DNS หรือเมื่อฟังโดยไม่ระบุที่อยู่ต้นทางที่ชัดเจน
netcrab -s ADDR:PORT
เมื่อทำการเชื่อมต่อ TCP ขาออกหรือส่งดาตาแกรม UDP ตามค่าเริ่มต้น Netcrab จะผูกกับที่อยู่ IPv4 และ IPv6 แบบไวด์การ์ด (0.0.0.0:0 และ [::]:0) คุณสามารถส่งผ่าน -s
เพื่อผูกกับที่อยู่อย่างชัดเจนแทนได้ สิ่งนี้รองรับตัวแปร ADDR:PORT
ทั้งหมดที่อธิบายไว้ในส่วน "เซิร์ฟเวอร์ TCP"
netcrab HOST1:PORT1 HOST2:PORT2
Netcrab อนุญาตให้เชื่อมต่อกับระยะไกลมากกว่าหนึ่งเครื่องในเวลาเดียวกัน ในทำนองเดียวกันกับการฟังการเชื่อมต่อพร้อมกันหลายรายการ การรับส่งข้อมูลจากเครื่องท้องถิ่นจะถูกส่งไปยังเพียร์ที่เชื่อมต่อทั้งหมด ขาเข้าหรือขาออก
netcrab -L ADDR:PORT HOST:PORT
Netcrab รองรับทั้งการฟังการเชื่อมต่อขาเข้าและการเชื่อมต่อขาออกในเวลาเดียวกัน สิ่งนี้อาจเป็นประโยชน์สำหรับการพร็อกซีการรับส่งข้อมูลจากที่อยู่ในเครื่องหนึ่งไปยังอีกที่หนึ่ง เนื่องจากคุณสามารถระบุทั้งที่อยู่ที่จะรับฟังและที่อยู่ต้นทางเพื่อใช้สำหรับการเชื่อมต่อขาออกได้อย่างอิสระ
netcrab HOST:PORTxNUM
บางครั้งการเชื่อมต่อกับปลายทางเดียวกันได้หลายครั้งก็มีประโยชน์ โดยเฉพาะอย่างยิ่งสำหรับสถานการณ์ช่องทาง ตัวอย่างเช่น หากต้องการเชื่อมต่อกับชื่อโฮสต์ 12 ครั้ง คุณสามารถทำ netcrab localhost:5000x12
โดยจะพยายามเชื่อมต่อขาออกพร้อมกัน 12 ครั้งไปยังชื่อโฮสต์และพอร์ตเดียวกัน
นอกจากนี้ยังสามารถรวมกับเป้าหมายหลายรายการได้ ที่นี่เราเชื่อมต่อกับ localhost บน IPv4 ห้าครั้ง และบน IPv6 สิบสามครั้ง netcrab 127.0.0.1:5000x5 [::1]:5000x13
.
netcrab -r
netcrab -R
ในโหมดการเชื่อมต่อขาออก คุณสามารถขอให้ Netcrab สร้างการเชื่อมต่อที่หลุดอีกครั้งได้ -r
สร้างใหม่อีกครั้งเมื่อปิดการเชื่อมต่ออย่างสง่างาม -R
สร้างใหม่อีกครั้งเมื่อมีข้อผิดพลาดที่ไม่สง่างาม ทั้งสองสามารถระบุพร้อมกันได้ -r -R
หรือ -rR
netcrab --fm channels
netcrab --fm linger-channels
ตอนนี้เรามาถึงส่วนที่มีประโยชน์จริงๆ Netcrab สามารถแปลงเป็นเราเตอร์เพื่อส่งต่อการรับส่งข้อมูลระหว่างอุปกรณ์ปลายทางหลายเครื่อง โหมด "ช่องทาง" จะจับคู่ปลายทางและส่งต่อการรับส่งข้อมูลแบบสองทิศทางจากปลายทางหนึ่งไปยังอีกปลายทางหนึ่ง โดยทำหน้าที่เสมือนพร็อกซีแบบโปร่งใส การรับส่งข้อมูลจะไม่ถูกส่งต่อระหว่างช่องทาง ลองนึกภาพแผนภาพต่อไปนี้:
+-------------+ +-----------------------------+ +-------------+
| | | netcrab | | |
| HOST1:PORT1 <----> HOST2:PORT1 <-> HOST2:PORT2 <----> HOST3:PORT1 |
| HOST1:PORT2 <----> HOST2:PORT3 <-> HOST2:PORT4 <----> HOST3:PORT2 |
| | | | | |
+-------------+ +-----------------------------+ +-------------+
ช่องที่หนึ่งและช่องที่สองผ่านตลอดแต่ไม่ข้ามลำธาร หากโฮสต์ 1 หรือโฮสต์ 3 ยกเลิกการเชื่อมต่ออุปกรณ์ปลายทาง การตัดการเชื่อมต่อนั้นจะถูก "ส่งต่อ" ไปยังปลายอีกด้านของช่องสัญญาณด้วย หากพฤติกรรมดังกล่าวไม่ได้ผลสำหรับคุณ คุณสามารถเปลี่ยนไปใช้โหมด Lingering Channels ได้
เมื่ออยู่ในโหมดแชนเนล ไคลเอ็นต์สูงสุดจะถูกเพิ่มเป็น 10 โดยอัตโนมัติต่อที่อยู่การฟัง ภายใต้สมมติฐานที่ว่าผู้ใช้อาจต้องการการเชื่อมต่อมากกว่าหนึ่งรายการในแต่ละครั้งเพื่อที่จะใช้งานแชนเนลได้จริง สิ่งนี้สามารถแทนที่ได้ด้วย -m
netcrab --fm hub
โหมดฮับจะคล้ายกับโหมดแชนเนล แต่ง่ายกว่า: การรับส่งข้อมูลทั้งหมดจากแหล่งเครือข่ายทั้งหมดจะถูกส่งต่อกลับไปยังซ็อกเก็ตอื่นทั้งหมด คุณสามารถใช้มันเพื่อตั้งค่าห้องสนทนาหรืออะไรก็ได้
เช่นเดียวกับในโหมดช่องสัญญาณ เมื่ออยู่ในโหมดฮับ ไคลเอ็นต์สูงสุดจะถูกชนโดยอัตโนมัติเป็น 10 ต่อที่อยู่การฟัง แต่สามารถแทนที่ได้ด้วย -m
netcrab -e COMMAND
Netcrab สามารถรันโปรแกรมอื่นและเชื่อมต่อ stdin และ stdout กับเครือข่ายได้ สามารถใช้มันเพื่อแสดงเชลล์ระยะไกลหรืออะไรบางอย่างได้อย่างง่ายดาย แต่แน่นอนว่าคุณจะต้องระมัดระวังด้วย ในโหมดนี้ อินพุตและเอาต์พุตปกติจะถูกปิดใช้งาน
สตริงคำสั่งถูกรันผ่านเชลล์ปัจจุบัน
ความสามารถทั้งหมดที่อธิบายไว้ข้างต้นสามารถนำมารวมกันและใช้งานได้ในเวลาเดียวกัน ตัวอย่างเช่น คุณสามารถฟังจากที่อยู่หลายแห่งและเชื่อมต่อกับหลายเป้าหมายในเซสชันเดียวกันในขณะที่ใช้ฮับเพื่อส่งต่อระหว่างการเชื่อมต่อทั้งหมด