
غلاف بايثون لـ tshark، يتيح تحليل الحزم بلغة بايثون باستخدام مفككات wireshark
غلاف بايثون لـ tshark، يسمح بتحليل حزم بايثون باستخدام محللات wireshark.
الوثائق الموسعة: http://kiminewt.github.io/pyshark
نبحث عن مساهمين - لأسباب مختلفة، أجد صعوبة في إيجاد وقت لصيانة وتحسين الحزمة في الوقت الحالي. سيتم مراجعة أي طلبات سحب، وإذا كان أي شخص مهتمًا ومناسبًا، سيسعدني إدراجه في المشروع. لا تتردد في مراسلتي على البريد الإلكتروني [email protected].
هناك العديد من وحدات تحليل حزم بايثون، هذه الوحدة مختلفة لأنها لا تحلل أي حزم بالفعل، بل تستخدم ببساطة قدرة tshark (أداة سطر الأوامر wireshark) على تصدير XML لاستخدام تحليله.
تسمح هذه الحزمة بالتحليل من ملف التقاط أو التقاط مباشر، باستخدام جميع محللات wireshark المثبتة لديك. تم اختبارها على ويندوز/لينكس.
Python 3.7+ مدعوم. يوجد إصدار Python 2 غير مدعوم باسم pyshark-legacy.
يدعم جميع الإصدارات الحديثة من tshark / wireshark ولكن بعض الميزات قد لا تكون متاحة في الإصدارات الأقدم.
قم بتشغيل ما يلي لتثبيت أحدث إصدار من pypi
pip install pyshark
أو التثبيت من مستودع git:
git clone https://github.com/KimiNewt/pyshark.git
cd pyshark/src
python setup.py install
قد تضطر إلى تثبيت libxml وهو أمر غير متوقع. إذا تلقيت خطأ من clang أو رسالة خطأ حول libxml، فقم بتشغيل ما يلي:
xcode-select --install
pip install libxml
ربما يتعين عليك قبول اتفاقية ترخيص مستخدم (EULA) لـ XCode لذا كن مستعدًا للنقر على مربع حوار "قبول" في الواجهة الرسومية.
>>> import pyshark
>>> cap = pyshark.FileCapture('/tmp/mycapture.cap')
>>> cap
<FileCapture /tmp/mycapture.cap (589 packets)>
>>> print cap[0]
Packet (Length: 698)
Layer ETH:
Destination: BLANKED
Source: BLANKED
Type: IP (0x0800)
Layer IP:
Version: 4
Header Length: 20 bytes
Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00: Not-ECT (Not ECN-Capable Transport))
Total Length: 684
Identification: 0x254f (9551)
Flags: 0x00
Fragment offset: 0
Time to live: 1
Protocol: UDP (17)
Header checksum: 0xe148 [correct]
Source: BLANKED
Destination: BLANKED
...
>>> capture = pyshark.LiveCapture(interface='eth0')
>>> capture.sniff(timeout=50)
>>> capture
<LiveCapture (5 packets)>
>>> capture[3]
<UDP/HTTP Packet>
for packet in capture.sniff_continuously(packet_count=5):
print('Just arrived:', packet)
>>> capture = pyshark.LiveRingCapture(interface='eth0')
>>> capture.sniff(timeout=50)
>>> capture
<LiveCapture (5 packets)>
>>> capture[3]
<UDP/HTTP Packet>
for packet in capture.sniff_continuously(packet_count=5):
print('Just arrived:', packet)
>>> capture = pyshark.RemoteCapture('192.168.1.101', 'eth0')
>>> capture.sniff(timeout=50)
>>> capture
يمكن الوصول إلى البيانات بعدة طرق. تنقسم الحزم إلى طبقات، أولاً يجب الوصول إلى الطبقة المناسبة ثم يمكنك تحديد حقلها.
كل ما يلي يعمل:
>>> packet['ip'].dst
192.168.0.1
>>> packet.ip.src
192.168.0.100
>>> packet[2].src
192.168.0.100
لاختبار ما إذا كانت طبقة موجودة في حزمة، يمكنك استخدام اسمها:
>>> 'IP' in packet
True
لرؤية جميع أسماء الحقول الممكنة، استخدم السمة packet.layer.field_names (أي packet.ip.field_names) أو وظيفة الإكمال التلقائي في المترجم الخاص بك.
يمكنك أيضًا الحصول على البيانات الثنائية الأصلية لحقل، أو وصف جميل له:
>>> p.ip.addr.showname
Source or Destination Address: 10.0.0.10 (10.0.0.10)
# And some new attributes as well:
>>> p.ip.addr.int_value
167772170
>>> p.ip.addr.binary_value
b'\n\x00\x00\n'
يدعم Pyshark فك التشفير التلقائي للتتبعات باستخدام معايير WEP و WPA-PWD و WPA-PSK (WPA-PWD هو الافتراضي).
>>> cap1 = pyshark.FileCapture('/tmp/capture1.cap', decryption_key='password')
>>> cap2 = pyshark.LiveCapture(interface='wi0', decryption_key='password', encryption_type='wpa-psk')
مجموعة من معايير التشفير المدعومة، SUPPORTED_ENCRYPTION_STANDARDS، موجودة في كل فئة التقاط.
>>> pyshark.FileCapture.SUPPORTED_ENCRYPTION_STANDARDS
('wep', 'wpa-pwd', 'wpa-psk')
>>> pyshark.LiveCapture.SUPPORTED_ENCRYPTION_STANDARDS
('wep', 'wpa-pwd', 'wpa-psk')
يمكن أن تكون مرشحات عرض Pyshark مفيدة في تحليل حركة المرور المركزة على التطبيقات. لا توفر مرشحات BPF نفس المرونة التي توفرها مرشحات عرض Wireshark.
>>> cap1 = pyshark.FileCapture('/tmp/capture1.cap', display_filter="dns")
>>> cap2 = pyshark.LiveCapture(interface='en0', display_filter="tcp.analysis.retransmission")
هذا المشروع مرخص تحت MIT. المساهمات في هذا المشروع مقبولة تحت نفس الترخيص.