Pyshark में TCP का पुन: प्रसारण करना


10

जहाँ तक मुझे पता है कि pyshark tshark के लिए Python आवरण है जो Wireshark का कमांड लाइन संस्करण है। चूंकि विंडशार्क और tshark टीसीपी रिट्रांसमिशन का पता लगाने की अनुमति देते हैं, इसलिए मैं सोच रहा था कि मैं pyshark का उपयोग कैसे कर सकता हूं। मुझे कोई अच्छा दस्तावेज नहीं मिला है इसलिए मुझे यकीन नहीं है कि क्या आप ऐसा नहीं कर सकते हैं, या क्या मैं सिर्फ उचित तरीका नहीं ढूंढ सकता हूं। धन्यवाद!


"टीसीपी ट्रांसमिशन का पता लगाने" से, क्या आपका मतलब केवल यह देखना है कि क्या टीसीपी पैकेट को देखा जाए? या आप टीसीपी की तरह कुछ और विशिष्ट का मतलब है, लेकिन विशिष्ट दूरस्थ मेजबान / पदों के लिए?
रॉस जैकब्स

दूरसंचार प्रणालियों के बारे में मेरा ज्ञान थोड़ा कठोर है। मैं आउटगोइंग और इनकमिंग दिशाओं में खोए गए पैकेटों की संख्या का पता लगाना (या अनुमान करना) चाहता हूं। यह स्पष्ट करता है?
user1315621

2
आप डिस्प्ले फ़िल्टर का उपयोग कर सकते हैं tcp.analysis.retransmission, जिसका उपयोग Wireshark और PyShark दोनों के साथ किया जा सकता है। असफल होने पर, आप अपने प्रश्न (अधिक संदर्भ के साथ) विरेशर के फ़ोरम पर पूछना चाह सकते हैं यदि आप चाहते हैं कि आप वेरेसर्क या सर्वर फॉल्ट का लाभ उठा सकें तो यदि आप नुकसान को कम करने में मदद करना चाहते हैं।
रॉस जैकब्स

मुझे लगता है कि tcp.analysis.retransmission शायद ठीक काम करेगा। लेकिन क्या आप इसका उपयोग करने के तरीके के बारे में मुझे PyShark में एक उदाहरण प्रदान कर सकते हैं?
user1315621 15

पाइशार्क का उपयोग करते हुए विंडसर के साथ बातचीत करने के बारे में यह लेख आपके प्रश्न के सबसे करीब है।
२२ पर --१

जवाबों:


5

नीचे दिया गया कोड pyshark में TCP retransmissions का पता लगाता है

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

आप इन पैकेटों को विशेष रूप से टीसीपी पुन: प्रसारण को फ़िल्टर करने के लिए लाइवकैप्ट्योर में bpf_filter को लागू करके फ़िल्टर कर सकते हैं ।

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 के साथ एक फलक पढ़ने का एक तरीका है:

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

धन्यवाद! मैं आपके कोड के साथ एक पीसीएपी फ़ाइल पढ़ रहा हूं, मुझे इसे दो बार पढ़ना चाहिए: पहली बार रिट्रांस्ड पैकेट को संसाधित करने के लिए और दूसरी बार सभी अन्य पैकेट को संसाधित करने के लिए। क्या कोई हल है?
14:13 पर user1315621

मैंने एक pcap फ़ाइल पढ़ने और रिट्रांसमीशन को फ़िल्टर करने के लिए कोड अपडेट किया।
जीवन जटिल है

बात यह है कि अगर मैं सभी पैकेटों को (बिना किसी फिल्टर को पढ़ते समय) प्रिंट करता हूं, तो मैं पैकेटों को प्रिंट करके कुछ पुनर्प्राप्त किए गए पैकेट पा सकता हूं। उदाहरण के लिए, packet.summary_line, "2 4.1e-05 175.45.176.3 149.171.126.16 TCP 77 [TCP Retransmission] 22592 \\ xe2 \\ x86 \\ x86 143 (PSH, ACK] Seq = 1 Ack = 1 Win = 1 रिटर्न = 16383 लेन = 21 "। इसलिए मुझे लगता है कि पैकेट की एक विशेषता होनी चाहिए जो बताती है कि यह एक संभावित पुनरावृत्ति है।
user1315621

मेरे विश्लेषण में ये TCP विश्लेषण झंडे के नीचे हैं। क्या आप अपनी फ़ाइल को क्वेरी करने के लिए मेरे कोड उदाहरण का उपयोग कर रहे हैं?
जीवन जटिल

1
@ user1315621 - यदि आपकी कैप्चर प्रश्न के लिए महत्वपूर्ण है, तो आपको कैप्चर का लिंक शामिल करने और अपने प्रश्न को संशोधित करने के लिए अपनी पोस्ट को संपादित करना चाहिए । अन्यथा, मैं इस उत्तर को स्वीकार करता हूं क्योंकि यह उस प्रश्न का उत्तर देता है जो वर्तमान में पोस्ट किया गया है
रॉस जैकब्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.