Score:1

แยกข้อมูลแอปพลิเคชัน TCP จากไฟล์ pcap

ธง us

ให้ ก .pcap (หรือที่คล้ายกัน) ฉันต้องการเลือกการเชื่อมต่อ TCP หนึ่งรายการและดัมพ์สตรีมข้อมูลแอปพลิเคชันทั้งสอง (ไฟล์ จาก เพื่อนคนอื่นและคนหนึ่ง สอง เพียร์อื่น) ออกเป็นสองไฟล์แยกกันบนดิสก์

สมมติว่าฉันมี .pcap ไฟล์ที่ฉันรู้จักประกอบด้วยสตรีม TCP แบบเต็ม (จาก SYN ไปจนถึง FIN+ACK/RST สุดท้าย) ของการเชื่อมต่อ HTTP/1.1 ข้อความธรรมดา ฉันต้องการไฟล์ผลลัพธ์สองไฟล์ที่มีเนื้อหา เช่น. หนึ่งไฟล์มี

GET / HTTP/1.1\r\n
โฮสต์: foobar.com\r\n
\r\n

และอีกไฟล์มี

HTTP/1.1 200 ตกลง\r\n
ความยาวเนื้อหา: ...\r\n
... \r\n
\r\n
<html>...</html>

และฉันต้องการให้นี่คือการรับส่งข้อมูลแอปพลิเคชันที่จะเห็น/ส่งในพื้นที่ผู้ใช้ (จาก อ่าน/เขียน/ส่ง/recv`/...). สิ่งที่ฉันต้องการทำคือถ่ายโอนทราฟฟิกและใช้สิ่งนั้นเพื่อทดสอบโปรแกรมแยกวิเคราะห์สำหรับโปรโตคอลเครือข่ายบางอย่าง โปรแกรมแยกวิเคราะห์ควรจะสามารถอ่านไฟล์เหล่านั้นและพยายามแยกวิเคราะห์สตรีมข้อมูลได้


เครื่องมือบรรทัดคำสั่งดังกล่าวมีลักษณะอย่างไร ฉันไม่แน่ใจว่าสิ่งนี้มีประโยชน์มากหรือไม่ แต่ฉันคิดว่าอาจทำให้ชัดเจนขึ้นว่าฉันกำลังมองหาอะไร หากฉันได้ให้ตัวอย่างการใช้งานของเครื่องมือในจินตนาการที่สามารถทำได้ เรียกเครื่องมือจินตนาการ (นี่คือสิ่งที่ฉันกำลังมองหา) tcp-สตรีมแยก. ฉันอยากจะเรียกมันด้วยสิ่งที่ชอบ

### ตัวอย่างการใช้งานในจินตนาการของเครื่องมือที่ฉันต้องการค้นหา :)

# ดัมพ์จาก 12345 เป็น 23456
tcp-สตรีมแยก \
    -i my-captured-packets.pcap
    -s 127.0.0.1:12345 \ # ที่อยู่ต้นทาง 127.0.0.1:12345
    -d 127.0.0.1:23456 \ # ที่อยู่ปลายทาง 127.0.0.1:23456
    -t '2021-01-28 09:12:00Z' \ # TCP conn ยังมีชีวิตอยู่ในเวลานั้น
    -w จากพอร์ต 12345 ถึงพอร์ต 23456

# ดัมพ์จาก 23456 เป็น 12345
tcp-สตรีมแยก \
    -i my-captured-packets.pcap
    -s 127.0.0.1:23456 \ # ที่อยู่ต้นทาง 127.0.0.1:12345
    -d 127.0.0.1:12345 \ # ที่อยู่ปลายทาง 127.0.0.1:23456
    -t '2021-01-28 09:12:00Z' \ # TCP conn ในขณะนั้น
    -w from-port-23456-to-port-12345
jp flag
คุณต้องการ `tcpflow`
Score:1
ธง ru

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

  • Ethernet (L2): ส่วนหัวของ Ethernet (14 ไบต์) อาจมีหรือไม่มีแท็ก 802.1q (หน้า Ethertype เพิ่ม 4 ไบต์; 0x0800=IPv4, 0x86dd=IPv6, 0x8100แท็ก =802.1q) และเพย์โหลดของอีเทอร์เน็ตอาจหรือไม่มี FCS ต่อท้าย (4 ไบต์)
  • IP (L3): ส่วนหัวของ IPv4 พื้นฐานคือ 20 ไบต์, IPv6 ใช้ 40 ไบต์ แต่ละตัวเลือกหรือส่วนขยาย - ตรวจสอบ ไอเอชแอล ช่องสำหรับ IPv4 (5 = ไม่มีตัวเลือก) หรือ ส่วนหัวถัดไป ช่องสำหรับ IPv6 (6 ระบุ TCP ไม่มีนามสกุล) แพ็กเก็ตใดๆ อาจถูกแยกส่วนในเฟรม L2 หลายเฟรม (IPv4: มฟล เป็นชุดหรือ ส่วนชดเชย>0; IPv6 ใช้ส่วนขยายส่วนหัว 44) แต่ละแฟรกเมนต์แรกมีส่วนหัว L4 ส่วนแฟรกเมนต์ต่อมาไม่มี
  • TCP (L4): ส่วนหัวของเซ็กเมนต์ TCP พื้นฐานคือ 20 ไบต์ แต่อาจมีตัวเลือก (การชดเชยข้อมูล>5). TCP ใช้เซ็กเมนต์ที่นำส่งนอกคำสั่งซื้อ (by ลำดับหมายเลข) ดังนั้นคุณอาจต้องบัฟเฟอร์ข้อมูลบางส่วน กลุ่มอาจมาซ้ำกัน

ฉันแนะนำให้ใช้เครื่องมือที่เหมาะสมเช่น tcpโฟลว์ตามที่ @AlexD ได้แนะนำไว้

us flag
ขอบคุณ `tcpflow` คือสิ่งที่ฉันกำลังมองหา! ใช่ การสะดุดส่วนหัวของโปรโตคอลต่างๆ เป็นเรื่องหนึ่ง งานที่น่ากลัวที่สุดน่าจะเป็นการจัดการกับการจัดส่งนอกคำสั่งซื้อและการส่งแพ็กเก็ตซ้ำ
Zac67 avatar
ru flag
@JohannesWeiss โอ้ ใช่ ลืมไปเลย!

โพสต์คำตอบ

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