
📦 أسرع وأبسط مكتبة لمعالجة الحزم في بايثون
هذه هي Pypacker: أسرع وأبسط مكتبة للتعامل مع الحزم على المستوى المنخفض في Python. انظر الأمثلة أدناه لمعرفة ما يمكنك فعله بها.
إذا كنت ترغب في دعم هذا المشروع، يمكنك
عبر PayPal.
بعض الأمثلة:
pip/pypi لم يعد مدعوماً بسبب آلية المصادقة المعقدة، آسف.
انظر:
البروتوكولات نفسها (انظر layerXYZ) بشكل عام لا تحتوي على وثائق كثيرة لأنها موثقة بواسطة RFCs الخاصة بها/المعايير الرسمية.
يتم تنفيذ الاختبارات كما يلي:
cd pypackerexport PYTHONPATH=$(pwd):$PYTHONPATHpython tests/test_pypacker.pyنتائج اختبار الأداء:
Hardware: Intel CPU, 4 Cores @ 3.2 GHz
Python: CPython v3.10
nr = new results on this machine
Rounds per test: 10000
=====================================
>>> Packet parsing (Ethernet + IP + UDP + DNS): Search UDP port
Time diff: 0.1409761905670166s
nr = 70933 p/s
>>> Packet parsing (Ethernet + IP + TCP + HTTP): Search TCP port
Time diff: 0.3157649040222168s
nr = 31669 p/s
>>> Packet parsing (Ethernet + IP + TCP + HTTP): Reading all header
Time diff: 0.5989120006561279s
nr = 16696 p/s
>>> Parsing first layer (IP + ICMP)
Time diff: 0.014587163925170898s
nr = 685534 p/s
>>> Creating/direct assigning (IP only header)
Time diff: 0.02884364128112793s
nr = 346696 p/s
>>> bin() without change (IP)
Time diff: 0.013646364212036133s
nr = 732795 p/s
>>> Output with change/checksum recalculation (IP)
Time diff: 0.07719659805297852s
nr = 129539 p/s
>>> Basic/first layer parsing (Ethernet + IP + TCP + HTTP)
Time diff: 0.019113540649414062s
nr = 523189 p/s
>>> Changing Triggerlist element value (Ethernet + IP + TCP + HTTP)
Time diff: 0.017654895782470703s
nr = 566415 p/s
>>> Changing dynamic field (Ethernet + IP + TCP + HTTP)
Time diff: 0.006037473678588867s
nr = 1656321 p/s
>>> Direct assigning and concatination (Ethernet + IP + TCP + HTTP)
Time diff: 0.2050457000732422s
nr = 48769 p/s
.>>> Performance test pypacker vs. dpkt vs. scapy
Comparing pypacker, dpkt and scapy performance (parsing Ethernet + IP + TCP + HTTP)
nr = new results on this machine
Rounds per test: 10000
>> Testing pypacker parsing speed
nr = 194382 p/s
>> Testing dpkt parsing speed
Could not execute dpkt tests: ModuleNotFoundError("No module named 'dpkt'")
>> Testing scapy parsing speed
nr = 2775 p/s
لأي أسئلة متبقية، يرجى تقديم خطأ (سيتم وسمه بـ "questions").
س: ما مدى سرعة pypacker؟
ج: انظر النتائج أعلاه. للحصول على نتائج مفصلة على جهازك، نفذ الاختبارات:
python tests/test_pypacker.py PerfTestCase
س: ما البروتوكولات المدعومة؟
ج: البروتوكولات المدعومة حاليًا هي كحد أدنى: Ethernet, Radiotap, IEEE80211, ARP, DNS, STP, PPP, OSPF, VRRP, DTP, IP, ICMP, PIM, IGMP, IPX, TCP, UDP, SCTP, HTTP, NTP, RTP, DHCP, RIP, SIP, Telnet, HSRP, Diameter, SSL, TPKT, Pmap, Radius, BGP
س: هل هناك أي خطط لدعم [xyz]؟
ج: تتم إضافة الميزات الجديدة إلى Pypacker نتيجة احتياجي لها أو مساهمة الآخرين بها - لا توجد خطط رسمية لإضافة دعم لميزات معينة في الإصدارات المستقبلية. يمكن العثور على إرشادات عامة للمساهمة في ملف HACKING.
س: كيف يمكنني المساهمة في هذا المشروع؟
ج: يرجى استخدام متتبع الأخطاء في Gitlab للأخطاء/طلبات الميزات. يرجى قراءة متتبع الأخطاء للأخطاء المعروفة بالفعل قبل تقديم طلب جديد. يمكن إرسال التصحيحات عبر طلب سحب.
س: هناك مشكلة xyz مع Pypacker باستخدام Windows 3.11/XP/7/8/mobile إلخ. هل يمكنك إصلاح ذلك؟
ج: يجب أن تعمل الميزات الأساسية مع أي نظام تشغيل. قد تسبب الميزات الاختيارية مشاكل (مثل interceptor).
س: تحت أي ترخيص تم إصدار Pypacker؟
ج: إنه ترخيص GPLv2 (انظر ملف LICENSE لمزيد من المعلومات).
س: استدعاء copy.deepcopy(some_packet) يثير استثناء "TypeError: can't pickle Struct objects".
ج: جرب الحل البديل التالي لتتمكن من تخليل كائنات Struct:
import struct, copyreg
def pickle_struct(s):
return struct.Struct, (s.format,)
copyreg.pickle(struct.Struct, pickle_struct)
pkt_eth, pkt_ip, pkt_tcp, pkt_http = pkt[
None,
(None, lambda b: b.__class__ in [ip.IP, ip6.IP6]),
(tcp.TCP, lambda c: c.dport==80),
http.HTTP
]
...
pkt = Ethernet() + IP() + TCP()
# This parses ALL layers
packet_print = "%s" % pkt
packet_found = pkt[Telnet]
# Alternative: Use multi-value index-notation. This will stop parsing at any non-matching layer:
packet_found = pkt[Ethernet,IP,TCP,Telnet]
استخدم pypy (أسرع بحوالي 3 مرات من CPython فيما يتعلق بتحليل الحزم الكامل)
للحصول على أداء أكبر، قم بتعطيل الحقول التلقائية (يؤثر على استدعاء bin(...)):
pkt = ip.IP(src_s="1.2.3.4", dst_s="1.2.3.5") + tcp.TCP()
# Disable checksum calculation (and any other update) for IP and TCP (only THIS packet instance)
pkt.sum_au_active = False
pkt.tcp.sum_au_active = False
bts = pkt.bin(update_auto_fields=False)