การนับการส่ง TCP ใหม่ใน pyshark


10

เท่าที่ฉันรู้ pyshark เป็น Python wrapper to tshark ซึ่งเป็นเวอร์ชั่นบรรทัดคำสั่งของ Wireshark เนื่องจาก Wireshark และ tshark อนุญาตให้ตรวจจับการส่ง TCP อีกครั้งฉันจึงสงสัยว่าฉันจะใช้ pyshark ได้อย่างไร ฉันไม่พบเอกสารที่ดีดังนั้นฉันจึงไม่แน่ใจว่าคุณไม่สามารถทำสิ่งนั้นได้หรือว่าฉันไม่สามารถหาวิธีการที่เหมาะสม ขอบคุณ!


โดย "ตรวจสอบการส่ง TCP" คุณหมายถึงแค่ดูว่ามีการมองเห็นแพ็กเก็ต TCP หรือไม่? หรือคุณหมายถึงบางสิ่งที่เฉพาะเจาะจงมากขึ้นเช่น TCP แต่สำหรับโฮสต์ / โพสต์ระยะไกลที่เฉพาะเจาะจง
Ross Jacobs

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

2
คุณสามารถใช้ตัวกรองการแสดงผลtcp.analysis.retransmissionซึ่งสามารถใช้ได้กับทั้ง Wireshark และ PyShark ความล้มเหลวที่คุณอาจต้องการที่จะถามคำถามของคุณ (ที่มีบริบทเพิ่มเติม) ในWireshark ของฟอรั่มถ้าคุณต้องการความช่วยเหลือในการใช้ประโยชน์จาก Wireshark หรือเซิร์ฟเวอร์ผิดพลาดถ้าคุณต้องการความช่วยเหลือในการติดตามสภาพการสูญเสีย
Ross Jacobs

ฉันคิดว่า tcp.analysis.retransmission อาจใช้ได้ดี แต่คุณสามารถให้ตัวอย่างใน PyShark กับฉันเกี่ยวกับวิธีการใช้งานได้หรือไม่
user1315621

บทความเกี่ยวกับการโต้ตอบกับ Wireshark โดยใช้ Pyshark นี้เกี่ยวกับคำถามของคุณที่ใกล้เคียงที่สุด
Linny

คำตอบ:


5

รหัสด้านล่างตรวจจับการส่งข้อมูล TCP ในpyshark

import pyshark

###################################################
# these filters can be applied under LiveCapture
# display_filter: A display (wireshark) filter to apply on the cap before reading it.
# display_filter='tcp.analysis.fast_retransmission'
# display_filter='tcp.analysis.retransmission'
###################################################
capture = pyshark.LiveCapture(interface='en1', display_filter='tcp.analysis.fast_retransmission')
capture.sniff(timeout=50)

for packet in capture.sniff_continuously(packet_count=5):
  print ('Just arrived:', packet)

มันควรแสดงสิ่งนี้ในแพ็กเก็ต:

# display_filter='tcp.analysis.retransmission'
TCP Analysis Flags
Expert Info (Note/Sequence): This frame is a (suspected) retransmission
This frame is a (suspected) retransmission

# display_filter='tcp.analysis.fast_retransmission'
TCP Analysis Flags
This frame is a (suspected) fast retransmission
This frame is a (suspected) retransmission
Expert Info (Note/Sequence): This frame is a (suspected) fast retransmission
Expert Info (Note/Sequence): This frame is a (suspected) retransmission

หากคุณรวมonly_summaries = TrueในLiveCaptureคุณจะเห็นสิ่งนี้:

Just arrived: 223 71.890878 fe80::cabc:c8ff:feec:d46d fe80::1416:1ca1:307c:b0e6 TCP 86 [TCP Spurious Retransmission] 59005 \xe2\x86\x92 49373 [FIN, ACK] Seq=1855 Ack=2365 Win=4096 Len=0 TSval=930665353 TSecr=692710576

Just arrived: 371 121.293913 fe80::1416:1ca1:307c:b0e6 fe80::cabc:c8ff:feec:d46d TCP 98 [TCP Retransmission] 62078 \xe2\x86\x92 59012 [SYN, ACK] Seq=0 Ack=1 Win=65535 Len=0 MSS=1440 WS=64 TSval=692717653 TSecr=930714614 SACK_PERM=1

คุณสามารถกรองแพ็กเก็ตเหล่านี้ได้มากขึ้นโดยเฉพาะโดยใช้bpf_filterในLiveCaptureเพื่อกรอง TCP retransmission

import pyshark

capture = pyshark.LiveCapture(interface='en1', bpf_filter='ip and tcp port 443', display_filter='tcp.analysis.retransmission')
capture.sniff(timeout=50)

for packet in capture.sniff_continuously(packet_count=5):
  print ('Just arrived:', packet)

นี่เป็นวิธีหนึ่งในการอ่าน pcap ที่มี pyshark:

capture = pyshark.FileCapture('test.pcap', display_filter='tcp.analysis.retransmission')
counter = 0
for packet in capture:
  counter +=1
  print ('*' * 10, f'Retransmission packet {counter}:', '*' * 10)
  # output 
  ********** Retransmission packet 1: **********
  ********** Retransmission packet 2: **********
  ********** Retransmission packet 3: **********
  ********** Retransmission packet 4: **********
  ********** Retransmission packet 5: **********

ขอบคุณ! ฉันกำลังอ่านไฟล์ PCAP ด้วยรหัสของคุณฉันควรอ่านมันสองครั้ง: ครั้งแรกที่ประมวลผลแพ็กเก็ตที่ส่งซ้ำและครั้งที่สองเพื่อประมวลผลแพ็กเก็ตอื่นทั้งหมด มีวิธีแก้ไขไหม?
user1315621

ฉันอัปเดตรหัสเพื่ออ่านไฟล์ pcap และกรองการส่งสัญญาณซ้ำ
ชีวิตมีความซับซ้อน

สิ่งหนึ่งคือถ้าฉันพิมพ์แพ็กเก็ตทั้งหมด (ไม่มีตัวกรองใด ๆ เมื่ออ่าน) ฉันสามารถค้นหาแพ็คเก็ตที่ส่งซ้ำได้โดยพิมพ์แพ็คเก็ต ตัวอย่างเช่น packet.summary_line ส่งคืน "2 4.1e-05 175.45.176.3 149.171.126.16 TCP 77 [การส่งผ่าน TCP] 22592 \\ xe2 \\ x86 \\ x92 143 [PSH, ACK] Seq = 1 Ack = 1 Win = 16383 Len = 21 " ดังนั้นฉันคิดว่าควรมีแอตทริบิวต์ของแพ็กเก็ตที่บอกว่าเป็นไปได้ที่จะส่งสัญญาณซ้ำ
user1315621

pcap ของฉันมีสิ่งเหล่านี้ภายใต้แฟล็กการวิเคราะห์ TCP คุณใช้ตัวอย่างรหัสของฉันเพื่อค้นหาไฟล์ของคุณหรือไม่
ชีวิตมีความซับซ้อน

1
@ user1315621 - หากการจับภาพของคุณสำคัญสำหรับคำถามคุณควรแก้ไขโพสต์ของคุณเพื่อรวมลิงค์ไปยังการจับภาพและแก้ไขคำถามของคุณ มิฉะนั้นผมจะทำเครื่องหมายคำตอบนี้ได้รับการยอมรับเพราะมันตอบคำถามที่โพสต์ในขณะนี้
Ross Jacobs
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.