
📦 Python के लिए सबसे तेज़ और सरल पैकेट हेरफेर लाइब्रेरी
यह 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 बग-ट्रैकर का उपयोग करें। कृपया नया फ़ाइल करने से पहले पहले से ज्ञात बगों के लिए बगट्रैकर पढ़ें। पैच पुल रिक्वेस्ट के माध्यम से भेजे जा सकते हैं।
प्रश्न: Windows 3.11/XP/7/8/mobile आदि पर Pypacker का उपयोग करने में समस्या xyz है। क्या आप इसे ठीक कर सकते हैं?
उत्तर: बुनियादी सुविधाएँ किसी भी OS पर काम करनी चाहिए। वैकल्पिक वाले समस्या उत्पन्न कर सकते हैं (जैसे interceptor)।
प्रश्न: Pypacker किस लाइसेंस के तहत जारी किया गया है?
उत्तर: यह GPLv2 लाइसेंस है (अधिक जानकारी के लिए LICENSE फ़ाइल देखें)।
प्रश्न: copy.deepcopy(some_packet) को कॉल करने पर "TypeError: can't pickle Struct objects" अपवाद उठता है।
उत्तर: Struct ऑब्जेक्ट्स को picklable बनाने के लिए निम्नलिखित वर्कअराउंड आज़माएँ:
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()
# यह सभी लेयरों को पार्स करता है
packet_print = "%s" % pkt
packet_found = pkt[Telnet]
# विकल्प: बहु-मान इंडेक्स-नोटेशन का उपयोग करें। यह किसी भी गैर-मिलान लेयर पर पार्सिंग रोक देगा:
packet_found = pkt[Ethernet,IP,TCP,Telnet]
pypy का उपयोग करें (पूर्ण पैकेट पार्सिंग से संबंधित CPython से ~3x तेज़)
और भी अधिक प्रदर्शन के लिए ऑटो फ़ील्ड को अक्षम करें (bin(...) को कॉल करने को प्रभावित करता है):
pkt = ip.IP(src_s="1.2.3.4", dst_s="1.2.3.5") + tcp.TCP()
# IP और TCP के लिए चेकसम गणना (और कोई अन्य अपडेट) अक्षम करें (केवल THIS पैकेट इंस्टेंस)
pkt.sum_au_active = False
pkt.tcp.sum_au_active = False
bts = pkt.bin(update_auto_fields=False)
sysctl -w net.core.rmem_max=12582912
sysctl -w net.core.rmem_default=12582912
sysctl -w net.core.wmem_max=12582912
sysctl -w net.core.wmem_default=12582912
sysctl -w net.core.optmem_max=2048000
sysctl -w net.core.netdev_max_backlog=5000
sysctl -w net.unix.max_dgram_qlen=1000
sysctl -w net.ipv4.tcp_rmem="10240 87380 12582912"
sysctl -w net.ipv4.tcp_wmem="10240 87380 12582912"
sysctl -w net.ipv4.tcp_mem="21228 87380 12582912"
sysctl -w net.ipv4.udp_mem="21228 87380 12582912"
sysctl -w net.ipv4.tcp_window_scaling=1
sysctl -w net.ipv4.tcp_timestamps=1
sysctl -w net.ipv4.tcp_sack=1