สารบัญ:

Netcat ใน Python: 6 ขั้นตอน
Netcat ใน Python: 6 ขั้นตอน

วีดีโอ: Netcat ใน Python: 6 ขั้นตอน

วีดีโอ: Netcat ใน Python: 6 ขั้นตอน
วีดีโอ: Intro to Replacing Netcat - Black Hat Python - ep. 4 2024, พฤศจิกายน
Anonim
Netcat ใน Python
Netcat ใน Python

netcat คืออะไร? หน้าคู่มือสำหรับ netcat ระบุว่า: "ยูทิลิตี้ nc (หรือ netcat) ใช้สำหรับทุกอย่างภายใต้ดวงอาทิตย์ที่เกี่ยวข้องกับซ็อกเก็ตโดเมน TCP, UDP หรือ UNIX มันสามารถเปิดการเชื่อมต่อ TCP ส่งแพ็กเก็ต UDP ฟังโดยพลการ พอร์ต TCP และ UDP ทำการสแกนพอร์ต และจัดการกับทั้ง IPv4 และ IPv6 สคริปต์ nc ต่างจาก telnet(1) เป็นอย่างดี และแยกข้อความแสดงข้อผิดพลาดออกเป็นข้อผิดพลาดมาตรฐานแทนที่จะส่งไปยังเอาต์พุตมาตรฐาน เช่นเดียวกับที่ telnet(1) ทำกับบางพอร์ต"

โดยพื้นฐานแล้ว netcat อนุญาตให้คุณเชื่อมต่อกับเซิร์ฟเวอร์อื่นโดยใช้โปรโตคอล TCP หรือ UDP TCP ย่อมาจาก Transmission Control Protocol และเน้นการเชื่อมต่อ UDP ย่อมาจาก Universal Datagram Protocol และไม่มีการเชื่อมต่อ โดยทั่วไปจะใช้ TCP สำหรับแอปพลิเคชันอินเทอร์เน็ต ในขณะที่ UDP ใช้สำหรับสตรีมสื่อหรือ VPN

ขั้นตอนที่ 1: เราจะเริ่มต้นอย่างไร

เราจะเริ่มต้นอย่างไร?
เราจะเริ่มต้นอย่างไร?

ด้านบนเป็นวิธีที่เรียกว่า netcat คุณจะเห็นว่ามีข้อโต้แย้งสองข้อในตอนท้ายที่เรียกว่า "ปลายทาง" และ "พอร์ต" ปลายทางหมายถึงชื่อโฮสต์หรือที่อยู่ IP ของเซิร์ฟเวอร์ที่เรากำลังพยายามเชื่อมต่อ ในขณะที่พอร์ตหมายถึงพอร์ตของเซิร์ฟเวอร์ที่เรากำลังพยายามเชื่อมต่อ

ขั้นตอนที่ 2: เริ่มกันเลย

เอาล่ะ
เอาล่ะ

ด้านบนเป็นรหัสหลามเริ่มต้นบางส่วน อย่างที่คุณเห็น เราต้องการประมวลผลอาร์กิวเมนต์ของโปรแกรมเหมือนกับยูทิลิตี้จริง ชื่อโฮสต์จะเป็นอาร์กิวเมนต์แรกต่อจากชื่อของไฟล์เรียกทำงาน ในขณะที่พอร์ตจะเป็นอาร์กิวเมนต์ที่สองต่อจากชื่อของไฟล์สั่งการในบรรทัดคำสั่ง

ขั้นตอนที่ 3: การสร้างการเชื่อมต่อ

การสร้างการเชื่อมต่อ
การสร้างการเชื่อมต่อ

มาสร้างฟังก์ชัน netcat ที่เราสามารถใช้ได้กัน โดยพื้นฐานแล้วสิ่งที่เราทำที่นี่คือการสร้างซ็อกเก็ตและเชื่อมต่อกับเซิร์ฟเวอร์โดยใช้พารามิเตอร์ที่กำหนด สำหรับคำสั่ง netcat พารามิเตอร์ปัจจุบันคือชื่อโฮสต์และพอร์ตของเซิร์ฟเวอร์ที่เราพยายามจะเชื่อมต่อ ซ็อกเก็ตมีพารามิเตอร์ "socket. AF_INET" และ "socket. SOCK_STREAM" เนื่องจากเราตั้งค่าเริ่มต้นเป็นการเชื่อมต่อ TCP สำหรับบทช่วยสอนนี้

ขั้นตอนที่ 4: มาส่งเนื้อหากันเถอะ

มาส่งเนื้อหากันเถอะ
มาส่งเนื้อหากันเถอะ

เราขยายฟังก์ชัน netcat เพื่อรับพารามิเตอร์ที่สาม "เนื้อหา" มีเนื้อหามากมายที่นี่ เรามาแบ่งตามหมายเลขบรรทัดกัน

บรรทัดที่ 14-16: เราส่งเนื้อหาทั้งหมดผ่านซ็อกเก็ต เรารอสักครู่ จากนั้นเราปิดซ็อกเก็ตไปยังข้อมูลขาออก เพื่อให้ซ็อกเก็ตรู้ว่าไม่มีข้อมูลมาเพิ่มเติม

บรรทัดที่ 18-26: เราสร้างบัฟเฟอร์เพื่อจัดเก็บการตอบสนองของเซิร์ฟเวอร์ และในขณะที่ซ็อกเก็ตกำลังรับข้อมูล เราจะผนวกข้อมูลสูงสุด 1024 ไบต์ต่อผลลัพธ์ตราบใดที่มีข้อมูลให้อ่าน

บรรทัดที่ 28-29: เราต้องการให้การเชื่อมต่อ netcat นี้เป็นการเชื่อมต่อแบบครั้งเดียว ดังนั้นเราจึงประกาศการเชื่อมต่อที่ปิดแล้วจึงปิดการเชื่อมต่อ

บรรทัดที่ 31: นี่คือคำขอ HTTP มาตรฐาน หากคุณเรียกใช้โค้ดด้วยอาร์กิวเมนต์บรรทัดคำสั่ง "google.com" และ "80 " คุณจะเห็นการตอบสนอง HTTP ที่เหมาะสม

ขั้นตอนที่ 5: ให้มีการเชื่อมต่อแบบเปิด

ให้มีการเชื่อมต่อแบบเปิด
ให้มีการเชื่อมต่อแบบเปิด

โค้ดด้านบน (ซึ่งอยู่ใต้โค้ดจากส่วนก่อนหน้า) ช่วยให้เราเรียกใช้คำสั่ง netcat หลายคำสั่งผ่านการเชื่อมต่อแบบเปิดหลอกได้ (ในความเป็นจริง ทุกครั้งที่คุณเรียกใช้คำสั่ง คำสั่งจะเปิดขึ้นแล้วปิดการเชื่อมต่อ TCP ใหม่ ดังนั้นจึงไม่ได้จำลองพฤติกรรมของ netcat อย่างแท้จริง เราเพียงทำเช่นนี้เพื่อจุดประสงค์ในการเรียนรู้) ให้แบ่งบรรทัดนี้ทีละบรรทัดเช่นกัน:

บรรทัดที่ 31: เราต้องการอ่านคำสั่งไปเรื่อย ๆ เพื่อรักษา "การโต้ตอบ"

บรรทัดที่ 32: นี่คือบัฟเฟอร์ของเราที่จะเก็บเนื้อหาของคำขอของเรา

บรรทัด 36-45: เราจะอ่านในบัฟเฟอร์จนกว่าเราจะอ่านบรรทัดว่าง

บรรทัดที่ 48: เราเรียกฟังก์ชัน netcat ของเราด้วยชื่อโฮสต์ พอร์ต และเนื้อหาที่สร้างขึ้นใหม่ (ซึ่งมีการเข้ารหัสอย่างเหมาะสม)

บรรทัดที่ 50: หากเนื้อหาของบัฟเฟอร์ของเรามี "การเชื่อมต่อ: ปิด" (แสดงว่าเราต้องการปิดการเชื่อมต่อ) เราก็แยกจากลูป

ขั้นตอนที่ 6: บทสรุป

ในตอนท้ายของบทช่วยสอนนี้ คุณควรมีการใช้งาน netcat น้อยที่สุด ฉันจะปล่อยให้มันเป็นแบบฝึกหัดสำหรับผู้ใช้ในการใช้คุณสมบัติเช่น:

1. รองรับโปรโตคอลอื่น ๆ

2. แก้ไขรหัสไม่ให้ปิดการเชื่อมต่อทุกครั้ง

3. เพิ่มแฟล็กที่ netcat ได้ปรับเปลี่ยนพฤติกรรมแล้ว

แนะนำ: