Pyshark에서 TCP 재전송 계산


10

내가 아는 한 pyshark는 Wireshark의 명령 행 버전 인 tshark에 대한 Python 래퍼입니다. Wireshark와 tshark는 TCP 재전송을 감지 할 수 있으므로 pyshark를 사용하여 어떻게 할 수 있는지 궁금합니다. 나는 좋은 문서를 찾지 못했기 때문에 당신이 그것을 할 수 있는지 또는 적절한 방법을 찾을 수 있는지 확실하지 않습니다. 감사합니다!


"TCP 전송 감지"란 TCP 패킷이 보이는지 확인하는 것입니까? 아니면 TCP와 같은 특정 원격 호스트 / 게시물을 의미합니까?
로스 제이콥스

통신 시스템에 대한 나의 지식은 조금 녹슨 것입니다. 나가는 방향과 들어오는 방향 모두에서 손실 된 패킷 수를 감지 (또는 추정)하고 싶습니다. 그것은 명확합니까?
user1315621

2
tcp.analysis.retransmissionWireshark 및 PyShark와 함께 사용할 수있는 디스플레이 필터 를 사용할 수 있습니다. 실패하면 Wireshark의 포럼 에서 손실을 추적하는 데 도움이 필요한 경우 Wireshark 또는 Server Fault를 활용하는 데 도움이 필요한 경우 Wireshark 포럼 에 질문을 할 수 있습니다.
Ross Jacobs

나는 tcp.analysis.retransmission이 잘 작동 할 것이라고 생각합니다. 그러나 PyShark에서 사용 방법에 대한 예를 제공 할 수 있습니까?
user1315621

Pyshark를 사용하여 Wireshark와 상호 작용하는 방법에 대한 이 기사 는 귀하의 질문에 가장 가깝습니다.
Linny

답변:


5

아래 코드는 Pyshark 에서 TCP 재전송을 감지합니다.

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을 = 사실은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

LiveCapture 에서 bpf_filter 를 적용 하여 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)

pyshark로 pcap을 읽는 방법은 다음과 같습니다.

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.