กลับไปหน้าบทความ

อ่าน 3 นาที

Construct (ไลบรารี Python)

Construct เป็น ไลบรารี Python สำหรับการสร้างและการแยกส่วน โครงสร้างข้อมูล ใน ลักษณะ เชิงประกาศ ในบริบทนี้ การสร้างหรือการประกอบ หมายถึงกระบวนการแปลง ( การทำให้เป็นอนุกรม )...

Construct (ไลบรารี Python)

Constructเป็น ไลบรารี Pythonสำหรับการสร้างและการแยกส่วนโครงสร้างข้อมูลใน ลักษณะ เชิงประกาศในบริบทนี้ การสร้างหรือการประกอบ หมายถึงกระบวนการแปลง ( การทำให้เป็นอนุกรม ) วัตถุโปรแกรมให้เป็นรูปแบบไบนารี

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

ประโยชน์

การใช้โค้ดแบบประกาศ (declarative code) มีข้อดีหลายประการ ตัวอย่างเช่น โค้ดเดียวกันที่สามารถแยกวิเคราะห์ (parse) ก็สามารถสร้าง (build) ได้เช่นกัน (สมมาตร) การดีบักและการทดสอบทำได้ง่ายขึ้นมาก (พิสูจน์ได้ในระดับหนึ่ง) การสร้างโครงสร้างใหม่ทำได้ง่าย (การห่อหุ้มส่วนประกอบ) และอื่นๆ อีกมากมาย หากคุ้นเคยกับภาษาC (ภาษาโปรแกรม)ก็สามารถคิดถึงโครงสร้างต่างๆ ในแง่ของการแปลงchar *ประเภทstruct foo *ข้อมูล แทนที่จะเขียนโค้ดที่แยกข้อมูลออกมา

ตัวอย่าง

ตัวอย่างต่อไปนี้แสดงวิธีการกำหนด สแต็กโปรโตคอลTCP/IP โดยใช้ Construct มีการละเว้นโค้ดบางส่วนเพื่อความกระชับและเรียบง่าย โปรดทราบว่าโค้ดต่อไปนี้เป็นเพียงโค้ด Python ที่สร้างอ็อบเจ็กต์เท่านั้น

อันดับแรกส่วนหัวของอีเธอร์เน็ต (เลเยอร์ 2):

ethernet = Struct ( "destination" / Bytes ( 6 ), "source" / Bytes ( 6 ), "type" / Enum ( Int16ub , IPv4 = 0x0800 , ARP = 0x0806 , RARP = 0x8035 , X25 = 0x0805 , IPX = 0x8137 , IPv6 = 0x86DD , ), )

ถัดไปคือ ส่วนหัวของ IP (เลเยอร์ 3):

ip = Struct ( "header" / BitStruct ( "version" / Const ( Nibble , 4 ), "header_length" / Nibble , ), "tos" / BitStruct ( "precedence" / Bytes ( 3 ), "minimize_delay" / Flag , "high_throuput" / Flag , "high_reliability" / Flag , "minimize_cost" / Flag , Padding ( 1 ), ), "total_length" / Int16ub , # ... )

สุดท้ายนี้ คือ ส่วนหัวของ TCP (เลเยอร์ 4):

tcp = Struct ( "source" / Int16ub , "destination" / Int16ub , "seq" / Int32ub , "ack" / Int32ub , # ... )

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

layer4tcp = Struct ( tcp , # ... payload )layer3ip = Struct ( ip , "next" / Switch ( this . protocol , { "TCP" : layer4tcp , } ), )layer2ethernet = Struct ( ethernet , "next" / Switch ( this . type , { "IP" : layer3ip , } ), )

ในขั้นตอนนี้ โค้ดสามารถแยกวิเคราะห์เฟรม TCP/IP ที่ดักจับได้ให้เป็นอ็อบเจ็กต์ "แพ็กเก็ต" และสร้างอ็อบเจ็กต์แพ็กเก็ตเหล่านั้นกลับเป็นรูปแบบไบนารีได้

tcpip_stack = layer2ethernet packet = tcpip_stack.parse ( b " ... raw captured packet ... " ) raw_data = tcpip_stack.build ( packet )

พอร์ตและภาคแยก

เพิร์ล

Data::ParseBinary [ 1 ]เป็น โมดูล CPANที่มีต้นกำเนิดมาจากการพอร์ต Construct ไปยังภาษาการเขียนโปรแกรม Perl (ดูเอกสาร POD หลักสำหรับแรงบันดาลใจ) นับตั้งแต่เวอร์ชันเริ่มต้น บางส่วนของ API ดั้งเดิมได้ถูกยกเลิกการใช้งานแล้ว

ชวา

พอร์ตไปยัง Java มีให้บริการบน GitHub [ 2 ]ตัวอย่างใน Java ส่วนหัว Ethernet (เลเยอร์ 2):

สร้างethernet_header = Struct ( "ethernet_header" , MacAddress ( "destination" ), MacAddress ( "source " ) , Enum ( UBInt16 ( "type" ), "IPv4" , 0x0800 , "ARP" , 0x0806 , "RARP" , 0x8035 , "X25" , 0x0805 , "IPX" , 0x8137 , "IPv6" , 0x86DD , "_default_" , Pass ));

ดูเพิ่มเติม

  • เอกสารประกอบของ Construct
  • คลังเก็บข้อมูลของ Construct
  • การฝึกอบรม Python
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Construct_(Python_library)&oldid=1258875051 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ Construct (ไลบรารี Python)

Construct เป็น ไลบรารี Python สำหรับการสร้างและการแยกส่วน โครงสร้างข้อมูล ใน ลักษณะ เชิงประกาศ ในบริบทนี้ การสร้างหรือการประกอบ หมายถึงกระบวนการแปลง ( การทำให้เป็นอนุกรม )...

ประโยชน์

การใช้โค้ดแบบประกาศ (declarative code) มีข้อดีหลายประการ ตัวอย่างเช่น โค้ดเดียวกันที่สามารถแยกวิเคราะห์ (parse) ก็สามารถสร้าง (build) ได้เช่นกัน (สมมาตร) การดีบักและการทดสอบทำได้ง่ายขึ้นมาก (พิสูจน์ได้ในระดับหนึ่ง) การสร้างโครงสร้างใหม่ทำได้ง่าย...

ตัวอย่าง

ตัวอย่างต่อไปนี้แสดงวิธีการกำหนด สแต็กโปรโตคอล TCP/IP โดยใช้ Construct มีการละเว้นโค้ดบางส่วนเพื่อความกระชับและเรียบง่าย โปรดทราบว่าโค้ดต่อไปนี้เป็นเพียงโค้ด Python ที่สร้างอ็อบเจ็กต์เท่านั้น

เพิร์ล

Data::ParseBinary [ 1 ] เป็น โมดูล CPAN ที่มีต้นกำเนิดมาจากการพอร์ต Construct ไปยัง ภาษาการเขียนโปรแกรม Perl (ดูเอกสาร POD หลักสำหรับแรงบันดาลใจ) นับตั้งแต่เวอร์ชันเริ่มต้น บางส่วนของ API ดั้งเดิมได้ถูกยกเลิกการใช้งานแล้ว