Menghitung pengiriman ulang TCP di pyshark

10

Sejauh yang saya tahu pyshark adalah pembungkus Python untuk tshark yang merupakan versi baris perintah dari Wireshark. Karena Wireshark dan tshark memungkinkan untuk mendeteksi pengiriman ulang TCP, saya bertanya-tanya bagaimana saya bisa menggunakan pyshark. Saya belum menemukan dokumentasi yang bagus jadi saya tidak yakin apakah Anda tidak bisa melakukan itu, atau apakah saya tidak bisa menemukan cara yang tepat. Terima kasih!

pengguna1315621
sumber
Dengan "mendeteksi transmisi TCP", apakah Anda bermaksud melihat apakah paket TCP terlihat sama sekali? Atau maksud Anda sesuatu yang lebih spesifik seperti TCP, tetapi untuk host / posting jarak jauh tertentu?
Ross Jacobs
Pengetahuan saya tentang sistem telekomunikasi agak berkarat. Saya ingin mendeteksi (atau memperkirakan) jumlah paket yang hilang dalam arah keluar dan masuk. Apakah itu menjelaskan?
user1315621
2
Anda bisa menggunakan filter tampilan tcp.analysis.retransmission, yang dapat digunakan dengan Wireshark dan PyShark. Jika gagal, Anda mungkin ingin mengajukan pertanyaan Anda (dengan lebih banyak konteks) di Forum Wireshark jika Anda ingin bantuan meningkatkan Wireshark atau Server Fault jika Anda ingin membantu melacak kehilangan.
Ross Jacobs
Saya pikir tcp.analysis.retransmission mungkin akan berfungsi dengan baik. Tapi bisakah Anda memberi saya contoh di PyShark tentang cara menggunakannya?
user1315621
Artikel ini tentang berinteraksi dengan Wireshark menggunakan Pyshark adalah tentang yang terdekat yang bisa saya temukan untuk pertanyaan Anda.
Linny

Jawaban:

5

Kode di bawah ini mendeteksi transmisi ulang TCP di 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)

Ini akan menampilkan ini dalam paket:

# 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

Jika Anda memasukkan only_summaries = True di LiveCapture Anda akan melihat sesuatu seperti ini:

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

Anda juga dapat memfilter paket-paket ini lebih spesifik dengan menerapkan bpf_filter di LiveCapture untuk memfilter transmisi ulang TCP.

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)

Berikut ini salah satu cara membaca pcap dengan 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: **********
Hidup itu kompleks
sumber
Terima kasih! Saya membaca file PCAP jadi dengan kode Anda, saya harus membacanya dua kali: pertama kali memproses paket yang dikirimkan kembali dan kedua kalinya untuk memproses semua paket lainnya. Apakah ada solusinya?
user1315621
Saya memperbarui kode untuk membaca file pcap dan memfilter transmisi ulang.
Hidup itu rumit
Masalahnya adalah jika saya mencetak semua paket (tanpa filter saat membaca), saya dapat menemukan beberapa paket yang dikirimkan kembali dengan mencetak paket-paket tersebut. Misalnya, package.summary_line, mengembalikan "2 4.1e-05 175.45.176.3 149.171.126.16 TCP 77 [Transmisi ulang TCP] 22592 \\ xe2 \\ x86 \\ x92 143 [PSH, ACK] Seq = 1 Ack = 1 Win = 16383 Len = 21 ". Oleh karena itu saya kira harus ada atribut dari paket yang memberitahukan bahwa itu adalah kemungkinan pengiriman ulang.
user1315621
PCap saya memiliki ini di bawah Bendera Analisis TCP. Apakah Anda menggunakan contoh kode saya untuk meminta file Anda?
Hidup itu rumit
1
@ user1315621 - Jika tangkapan Anda sangat penting untuk pertanyaan, Anda harus mengedit posting Anda untuk menyertakan tautan ke tangkapan dan memodifikasi pertanyaan Anda. Kalau tidak, saya akan menandai jawaban ini sebagai diterima karena menjawab pertanyaan yang saat ini diposting .
Ross Jacobs