مقدمة الدرس
سنستخدم في هذا الدرس الـ sniffing, لكن الافضل نستخدم socket افضل من scapy في الويندوز, لكن توجد مشاكل بتنزيل سكابي على اصدارات ويندوز المختلفة, سكابي تكون افضل على لينكس linux, سوف نستخدم في هذا الدرس socket و struct.
لعمل sniffing يجب اولاً أن نستخدم الشل بصلاحيات adminstrator.
import socket
import struct
#ethnet header 0:14 !6s6s2s
#ipheader 14:34 !12s4s4s
#tcpheader 34:54 !HH16s
s = socket.socket(socket.AF_INET,socket.SOCK_RAW,socket.IPPROTO_IP)
s.bind(("127.0.0.1",0))
s.setsockopt(socket.IPPROTO_IP,socket.IP_HDRINCL,1)
s.ioctl(socket.SIO_RCVALL,socket.RCVALL_ON)
while True:
data = s.recvfrom(10000)
#ethernet header
ethernetheader = data[0][0:14]
eth_hdr = struct.unpack("!6s6s2s",ethernetheader)
print(eth_hdr[0])
print(eth_hdr[1])
print(eth_hdr[2])
#ipheader
ipheader = data[0][14:34]
print(ipheader)
#tcpheader
tcpheader = data[0][34:54]
#tcp_h = struct.unpack("!HH16s",tcpheader)
print(tcpheader)
import struct
#ethnet header 0:14 !6s6s2s
#ipheader 14:34 !12s4s4s
#tcpheader 34:54 !HH16s
s = socket.socket(socket.AF_INET,socket.SOCK_RAW,socket.IPPROTO_IP)
s.bind(("127.0.0.1",0))
s.setsockopt(socket.IPPROTO_IP,socket.IP_HDRINCL,1)
s.ioctl(socket.SIO_RCVALL,socket.RCVALL_ON)
while True:
data = s.recvfrom(10000)
#ethernet header
ethernetheader = data[0][0:14]
eth_hdr = struct.unpack("!6s6s2s",ethernetheader)
print(eth_hdr[0])
print(eth_hdr[1])
print(eth_hdr[2])
#ipheader
ipheader = data[0][14:34]
print(ipheader)
#tcpheader
tcpheader = data[0][34:54]
#tcp_h = struct.unpack("!HH16s",tcpheader)
print(tcpheader)
عملنا import للمكتبات socket و struct و أنشأنا جلسة s = socket.socket و كتبنا له الاذرفملي AF_INET يعني IPV4 و SOCK_RAW تعني عمل sniff للـ raw و socket.IPPROTO_IP اخترنا له الايبي بروتوكول.
و بعدها عملنا bind على local host لدينا و البورت حددناه 0 و setsockopt نحدد له الأيبي بروتوكول لدينا و اعطينا قيمة IP_HDRINCL القيمة 1 و هذه الخطوات هي خطوات اساسية مهمة في الويندوز و لا يجب الأستغناء عنها.
و الميثود ioctl يجب ايضا ان تكون مفعله في و يندوز من اجل عمل استقبال rcv للبيانات و ممكن ان تكون off لكن نحن هنا وضعناها on و بعدها خزننا كل هذا في data و صورة الداتا تكون 10000.
و بعدها عملنا bind على local host لدينا و البورت حددناه 0 و setsockopt نحدد له الأيبي بروتوكول لدينا و اعطينا قيمة IP_HDRINCL القيمة 1 و هذه الخطوات هي خطوات اساسية مهمة في الويندوز و لا يجب الأستغناء عنها.
و الميثود ioctl يجب ايضا ان تكون مفعله في و يندوز من اجل عمل استقبال rcv للبيانات و ممكن ان تكون off لكن نحن هنا وضعناها on و بعدها خزننا كل هذا في data و صورة الداتا تكون 10000.
معنى التعليقات الذي في الأعلى
ethnet header 0:14 !6s6s2s
الـ ethnet header يأخذ بايتس من 0 حتى 14 و الفورمات له هي !6s6s2s تعني 6+6+2 تساوي 14 اي من 0 حتى 14 و علامة التعجب تكلمنا عنها بدروس سابقة انها تستخدم مع الشبكات.
ipheader 14:34 !12s4s4s
يعني ipheader يأخذ من 14 حتى 34 و باقي الشرح نفس سابقتها.
tcpheader 34:54 !HH16s
تعليقات
إرسال تعليق