بسم الله الرحمن الرحيم
هذا رابط الجزء الثاني , و الجزء الأول و سيكون الجزء الثالث من هذه السلسة هو الدرس الأخير في كيفية برمجة sniffer بسيط بواسطة لغة بايثون .
و في هذا الدرس سوف نعتمد على المكتبة القياسية struct التي تستخدم لترميز البيانات الثنائية , و يتواجد على هذا الرابط شرح مبسط لهذه المكتبة .
و هذا النص البرمجي الكامل لبرنامج sniffer بسيط :
و في هذا الدرس سوف نعتمد على المكتبة القياسية struct التي تستخدم لترميز البيانات الثنائية , و يتواجد على هذا الرابط شرح مبسط لهذه المكتبة .
و هذا النص البرمجي الكامل لبرنامج sniffer بسيط :
#!/usr/bin/python
import socket
import struct
def packet_ip(data):
ip_header=data[:20]
iph=struct.unpack('!BBHHHBBH4s4s',ip_header)
version_ihl=iph[0]
version=version_ihl>>4
ihl=version_ihl & 0xf0
tos=iph[1]
Tlength=iph[2]
ID=iph[3]
Flage=iph[4] >> 13
offset=iph[4] & 0xe
ttl=iph[5]
protocol=iph[6]
s_addr=socket.inet_ntoa(iph[8])
d_addr=socket.inet_ntoa(iph[9])
print """
Version : %s
IP Header Length : %s
TOS: %s
Total length : %s
Identification : %s
Flags : %s
Fragment offset : %s
TTL : %s
Protocol : %s
Destintation Address: %s
Soruce Address : %s
""" % (str(version),str(ihl),str(tos),str(Tlength),str(ID),str(Flage),str(offset),str(ttl),str(protocol),str(s_addr),str(d_addr))
sos=socket.socket(socket.AF_INET,socket.SOCK_RAW,socket.IPPROTO_ICMP)
while 1:
data=sos.recv(10245)
packet_ip(data)
import socket
import struct
def packet_ip(data):
ip_header=data[:20]
iph=struct.unpack('!BBHHHBBH4s4s',ip_header)
version_ihl=iph[0]
version=version_ihl>>4
ihl=version_ihl & 0xf0
tos=iph[1]
Tlength=iph[2]
ID=iph[3]
Flage=iph[4] >> 13
offset=iph[4] & 0xe
ttl=iph[5]
protocol=iph[6]
s_addr=socket.inet_ntoa(iph[8])
d_addr=socket.inet_ntoa(iph[9])
print """
Version : %s
IP Header Length : %s
TOS: %s
Total length : %s
Identification : %s
Flags : %s
Fragment offset : %s
TTL : %s
Protocol : %s
Destintation Address: %s
Soruce Address : %s
""" % (str(version),str(ihl),str(tos),str(Tlength),str(ID),str(Flage),str(offset),str(ttl),str(protocol),str(s_addr),str(d_addr))
sos=socket.socket(socket.AF_INET,socket.SOCK_RAW,socket.IPPROTO_ICMP)
while 1:
data=sos.recv(10245)
packet_ip(data)
طبعاً على النص البرمجي للتوضيح و إيصال الفكرة فقط , و إذا إردت تطوير هذا النص يجب بأن تصمم class يحتوي على وظائف برمجية لأستخلاص كل قيمة في حزمة برتوكول IP .
ليست هناك تعليقات:
إرسال تعليق