ฉันจะสร้างแพ็กเก็ต UDP ได้อย่างไร


15

เมื่อฉันทำคำสั่ง Netcat ต่อไปนี้และดูแพ็กเก็ตด้วยWiresharkมันบอกว่าแพ็คเก็ต UDP ผิดรูปแบบ

$ echo "this is a test" | nc -u 127.0.0.1 53

ในทำนองเดียวกันการใช้คำสั่งเช่น$ echo "this is a test" > /dev/udp/127.0.0.1/53สร้างข้อผิดพลาด "แพ็คเก็ตผิดรูปแบบ" ใน Wireshark

ป้อนคำอธิบายภาพที่นี่

คำสั่ง echo จะถูกส่ง / ส่งไปยังเซิร์ฟเวอร์ Netcat โดยไม่มีข้อผิดพลาด แต่สิ่งนี้ทำให้ฉันสงสัยว่า: เป็นไปได้หรือไม่ที่จะสร้างแพ็กเก็ต UDP ที่เหมาะสมด้วยตนเองด้วย echo หรือเครื่องมือ Unix ดั้งเดิมอื่น ๆ ?

ฉันใช้ Debian และ macOS


10
ตามภาพหน้าจอของคุณไม่ใช่ udp-packet ตัวเองซึ่งมีรูปแบบไม่ถูกต้อง แต่มีเนื้อหาเนื่องจากพอร์ต 53 ใช้สำหรับ DNS และแพ็กเก็ตของคุณไม่มีคำขอ DNS ที่ถูกต้อง
tkausl

@tkausl คุณพูดถูก ไม่มีข้อผิดพลาด "ผิดรูปแบบ" เมื่อใช้พอร์ตอื่นที่ไม่ใช่ 53 ขอบคุณสำหรับการชี้ให้เห็น
user322500

1
หากคุณไม่ได้ใช้โปรโตคอลมาตรฐานคุณควรใช้พอร์ตในช่วง 49152 ถึง 65535 เนื่องจาก Linux โดยค่าเริ่มต้นจะใช้ช่วง 32768 ถึง 60999 เป็นพอร์ตชั่วคราวฉันไม่แนะนำให้เลือกพอร์ตเหล่านั้นสำหรับโปรโตคอลที่ไม่ได้มาตรฐาน อย่างไรก็ตาม 61,000 ถึง 65535 เป็นเกมที่ยุติธรรมสำหรับโปรโตคอลที่ไม่ได้มาตรฐาน ฉันมักจะใช้echo $[61002+RANDOM%4532]เพื่อเลือกหมายเลขพอร์ตสุ่มในช่วงนั้น
kasperd

1
อย่าเข้าสู่ระบบในฐานะ root คุณควรทำกิจกรรมส่วนใหญ่เป็นผู้ใช้ที่ไม่ใช่รูท หากคุณทำสิ่งต่าง ๆ ในฐานะรูทคุณจะกลับมาที่นี่เพื่อถามวิธีการซ่อมเครื่องของคุณและเราจะไม่สามารถช่วยเหลือได้ (ยกเว้นแนะนำให้ติดตั้งใหม่)
ctrl-alt-delor

1
@tkausl ดูสิ่งที่คุณสูญเสียไปโดยไม่โพสต์ความคิดเห็นของคุณเป็นคำตอบ ....
George Vasiliou

คำตอบ:


41

แพ็คเก็ตของคุณถูกต้องสมบูรณ์จากมุมมองของ IP และ UDP หากคุณขยายรายละเอียดโปรโตคอลสำหรับ Ethernet / IP / UDP ในบานหน้าต่างด้านล่างของ Wireshark คุณจะเห็นว่าแพ็กเก็ตได้รับการแยกวิเคราะห์สำเร็จ

อย่างไรก็ตามตามที่กำหนดไว้สำหรับพอร์ต 53 Wireshark พยายามแยกมันเป็นแพ็กเก็ต DNS ซึ่งไม่สามารถทำได้ (เนื่องจากสตริง "นี่คือการทดสอบ" ไม่ใช่คำขอ DNS ที่ถูกต้องตามข้อกำหนดRFC 1035 )

หากคุณทำตามข้อกำหนดที่ลิงค์นั้นคุณจะสามารถสร้างแพ็กเก็ตที่ถูกต้องเมื่อวิเคราะห์คำเป็นคำขอ DNS หากคุณส่งแพ็คเก็ตไปยังพอร์ตอื่นคุณจะสังเกตเห็นว่า Wireshark จะไม่แยกวิเคราะห์ว่าเป็นคำขอ DNS และจะไม่แสดงคำเตือนนั้น


15

คุณสามารถส่งพวกเขาไปยังนามแฝงพิเศษของ Bash ด้วยการเปลี่ยนเส้นทาง

จาก Bash manpages:

/ dev / tcp / host / พอร์ตหากโฮสต์เป็นชื่อโฮสต์หรือที่อยู่อินเทอร์เน็ตที่ถูกต้องและพอร์ตเป็นหมายเลขพอร์ตจำนวนเต็มหรือชื่อบริการ bash พยายามเปิดซ็อกเก็ต TCP ที่สอดคล้องกัน

/ dev / udp / host / พอร์ตหากโฮสต์เป็นชื่อโฮสต์หรือที่อยู่อินเทอร์เน็ตที่ถูกต้องและพอร์ตเป็นหมายเลขพอร์ตจำนวนเต็มหรือชื่อบริการ bash พยายามเปิดซ็อกเก็ต UDP ที่เกี่ยวข้อง

สิ่งนี้จะส่งแพ็กเก็ต UDP ไปที่ 192.168.2.11 ไปยังพอร์ต 8080:

echo "This is a test" > /dev/udp/192.168.2.11/8080

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

-1

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

มิฉะนั้นเครื่องมือต่างๆ (เช่นsocat, ncหรือnetcatหรือผ่านทางคุณสมบัติคล้ายกันมากในเปลือกหอยเช่นksh93หรือbash) สามารถใช้ไบต์จากอินพุตมาตรฐานและการถ่ายโอนพวกเขาเป็นสิ่งที่จะกลายเป็นแพ็คเก็ต UDP ไม่ว่าจะเป็น "เหมาะสม" ขึ้นอยู่กับโปรโตคอล; ในทางทฤษฎีสามารถสร้างและส่งแพ็กเก็ต DNS หรือ DHCP ด้วยวิธีนี้แม้ว่าคนส่วนใหญ่จะใช้ห้องสมุดหรือซอฟต์แวร์เฉพาะที่ (หวังว่า) จะใช้โปรโตคอลที่ถูกต้องอย่างถูกต้องเนื่องจากมักจะเกี่ยวข้องมากกว่าการตั้งค่าบิตใน เนื้อความของแพ็กเก็ตและส่งออกไปที่ลวดโดยเฉพาะอย่างยิ่งการจัดการการตอบสนองลองใหม่หลังจากหมดเวลาหรือข้อผิดพลาดฟิลด์ส่วนหัวของแพ็กเก็ต ฯลฯ โปรโตคอลมักจะมีเอกสารที่ดีมากใน RFC หรือดูชุดหนังสือ "TCP / IP Illustrated" โดย Stevens สำหรับเอกสารเพิ่มเติม

เครื่องมือเฉพาะเช่นnmapทำสิ่งที่กำหนดเองมากกับการสร้างแพ็คเก็ต มิฉะนั้นสำหรับการสร้างแพ็กเก็ตด้วยตนเองภาษาการเขียนโปรแกรมมักจะใช้อีกครั้ง แต่ซอฟต์แวร์ส่วนใหญ่จะใช้ไลบรารีหรือบริการระบบที่มีอยู่เพื่อส่ง DNS หรือ DHCP หรือแพ็กเก็ต UDP อื่น ๆ เนื่องจากเป็นงานที่น้อยลงและมีข้อผิดพลาดน้อยกว่า แพ็คเก็ตตั้งแต่เริ่มต้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.