Pyshark'ta TCP yeniden iletimini sayma


10

Bildiğim kadarıyla pyshark, Wireshark'ın komut satırı sürümü olan tshark için bir Python sarıcıdır. Wireshark ve tshark TCP yeniden iletimini algılamaya izin verdiğinden, pyshark kullanarak buna nasıl yapabileceğimi merak ediyordum. Herhangi bir iyi belge bulamadım, bu yüzden bunu yapamayacağınızdan ya da doğru yolu bulamadığımdan emin değilim. Teşekkür ederim!


"TCP iletimini algıla" ile sadece bir TCP paketinin görülüp görülmediğini görmek mi istiyorsunuz? Yoksa TCP gibi daha spesifik bir şey mi kastediyorsunuz, ancak belirli uzak ana bilgisayarlar / yayınlar için mi?
Ross Jacobs

Telekomünikasyon sistemleri hakkındaki bilgim biraz paslı. Hem giden hem de gelen yönlerde kaybolan paket sayısını tespit etmek (veya tahmin etmek) istiyorum. Bu netleşiyor mu?
user1315621

2
tcp.analysis.retransmissionHem Wireshark hem de PyShark ile kullanılabilen ekran filtresini kullanabilirsiniz . Başarısız olursa, kaybın izlenmesi konusunda yardım almak istiyorsanız Wireshark veya Sunucu Hatası'ndan yararlanmak istiyorsanız Wireshark Forumunda sorunuzu (daha fazla bağlamla) sormak isteyebilirsiniz .
Ross Jacobs

Bence tcp.analysis.retransmission muhtemelen işe yarayacaktır. Ama bana PyShark'ta nasıl kullanılacağına dair bir örnek verebilir misiniz?
user1315621

Wireshark ile Pyshark kullanarak etkileşim hakkında bu makale , sorunuza bulabildiğim en yakın konu hakkında.
Linny

Yanıtlar:


5

Aşağıdaki kod pyshark'ta TCP yeniden iletimini algılar

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)

Bunu paketlerde göstermelidir:

# 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

Eğer eklerseniz only_summaries = Doğru yılında LiveCapture böyle bir şey olur:

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

Ayrıca uygulayarak daha özellikle bu paketleri filtreleyebilirsiniz bpf_filter içinde LiveCapture TCP yeniden iletimi filtrelemek için.

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)

İşte pyshark ile bir pcap okumak için bir yol:

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: **********

Teşekkür ederim! Kodunuzla bir PCAP dosyası okuyorum, iki kez okumalıyım: yeniden iletilen paketleri ilk kez işlemek ve diğer tüm paketleri işlemek için ikinci kez. Bir çözüm var mı?
user1315621

Bir pcap dosyasını okumak ve yeniden iletimleri filtrelemek için kodu güncelledim.
Yaşam karmaşıktır

Mesele şu ki, tüm paketleri yazdırırsam (okurken herhangi bir filtre olmadan), paketleri yazdırarak bazı yeniden iletilen paketleri bulabilirim. Örneğin, packet.summary_line, "2 4.1e-05 175.45.176.3 149.171.126.16 TCP 77 [TCP Yeniden İletimi] 22592 \\ xe2 \\ x86 \\ x92 143 [PSH, ACK] Seq = 1 Kazan = 1 Kazan = 16383 Len = 21 ". Bu nedenle, paketin olası bir yeniden iletim olduğunu söyleyen bir özelliği olması gerektiğini düşünüyorum.
user1315621

Benim pcap TCP Analiz Bayrakları altında bu var. Dosyanızı sorgulamak için kod örneğimi kullanıyor musunuz?
Yaşam karmaşıktır

1
@ user1315621 - senin yakalama soruya kritik ise, gereken düzenleme yakalama için bir bağlantı içerir ve sorunuzu değiştirmek için yayınınızı. Aksi takdirde, şu anda gönderilen soruyu cevapladığı için bu yanıtı kabul edilmiş olarak işaretlerdim .
Ross Jacobs
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.