المقدمة
بدأنا بجزء خاص بـ sniffing , توجد لدينا مكتبة مهمة اسمها struct تفيدنا بهذا القسم و هي تعني انه نأخذ الداتا الذي لدينا و نعمل لها packing لتحويلها إلى بايت لكي تسير في الشبكه و unpacking العكس لترجيعها, و توجد لدينا فورمات Format تمكننا من هذا العمل, لكن يلزم أن نعرف انه يوجد كركترز Caracter معين.Character
معنى العلامات
الـ @ هذا الأفتراضي يكون إن لم نستخدم احد التاليات.الـ =بنفس مبدأ @ لكن حجم و المحاذاة هنا تتوحد.
الـ > للعمل little endian.
الـ < للعمل على big endian .
الـ ! تستخدم في الشبكات .
Format
أمثلة
>>> import struct
>>> struct.pack("x") #pad bytes
b'\x00'
>>> struct.unpack("x",b'\x00') #عكس العملية السابقة
()
>>> struct.pack("c",b'F') #char
b'F'
>>> struct.pack("b",1) #signed char
b'\x01'
>>> struct.unpack("b",b'\x01') #عكس العملية السابقة
(1,)
>>> struct.pack("bb",1,2) #قيمتين
b'\x01\x02'
>>> struct.pack("2b",1,2)
b'\x01\x02'
>>> struct.unpack("2b",b'\x01\x02') #عكس السابقة
(1, 2)
>>> struct.pack("f",1.5) #float
b'\x00\x00\xc0?'
>>> struct.pack("b",1.5) #سيعطي خطأ لأنه ليس فلوت
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
struct.error: required argument is not an integer
>>> struct.unpack("f",b'\x00\x00\xc0?')
(1.5,)
>>>
>>> struct.pack("x") #pad bytes
b'\x00'
>>> struct.unpack("x",b'\x00') #عكس العملية السابقة
()
>>> struct.pack("c",b'F') #char
b'F'
>>> struct.pack("b",1) #signed char
b'\x01'
>>> struct.unpack("b",b'\x01') #عكس العملية السابقة
(1,)
>>> struct.pack("bb",1,2) #قيمتين
b'\x01\x02'
>>> struct.pack("2b",1,2)
b'\x01\x02'
>>> struct.unpack("2b",b'\x01\x02') #عكس السابقة
(1, 2)
>>> struct.pack("f",1.5) #float
b'\x00\x00\xc0?'
>>> struct.pack("b",1.5) #سيعطي خطأ لأنه ليس فلوت
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
struct.error: required argument is not an integer
>>> struct.unpack("f",b'\x00\x00\xc0?')
(1.5,)
>>>
مصدر الجداول السابقة في الدرس من موقع بايثون : https://docs.python.org
ليست هناك تعليقات:
إرسال تعليق