الأحد، 7 أكتوبر 2012

برمجة sniffer بواسطة البايثون (الجزء الثالث )

بسم الله الرحمن الرحيم

هذا رابط الجزء الثاني , و الجزء الأول و سيكون الجزء الثالث من هذه السلسة هو الدرس الأخير في كيفية برمجة 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)

طبعاً على النص البرمجي للتوضيح و إيصال الفكرة فقط , و إذا إردت تطوير هذا النص يجب بأن تصمم class يحتوي على وظائف برمجية لأستخلاص كل قيمة في حزمة برتوكول IP .



الأربعاء، 19 سبتمبر 2012

برمجة sniffer بواسطة البايثون (الجزء الثاني )

بسم الله الرحمن الرحيم

في الجزء الأول  شرحت كيفية تأسيس القابس الخام "Raw Socket" , و الأن سنبدأ في التعامل مع البيانات المستقبلة من القابس .

في حالة القابس الخام يترك للمبرمج التعامل مع برتوكولات الشبكة , و التعامل مع بنية الحزم لكل برتوكول , وسنبدأ بالبرتوكول IP .


الأحد، 2 سبتمبر 2012

برمجة sniffer بواسطة البايثون (الجزء الأول )

بسم الله الرحمن الرحيم

مقدمة :

في أغلب البرامج التي تتعامل مع الشبكة يتعامل المبرمج مع طبقة التطبيقات "Application Layer" بواسطة الواجهة SOCK_STREAM للبرامج العاملة بواسطة بروتوكول TCP و الواجهة SOCK_DGRAM للبرامج التي تستخدم بروتوكول UDP .

 

و تقوم هذه الواجهتين بتسهيل عملية البرمجة و أخذ جميع المهام من المبرمج , و قد شرحت هذه الواجهتين في هذا الموضوع .

الجمعة، 31 أغسطس 2012

تعلم لغة البرمجة Go بالعربي ( الدرس التاسع )

بسم الله الرحمن الرحيم

تحتوي لغة GO على المؤشرات مشابه لغة C , و لكن قام المطورون بمنع العمليات الحسابية على مواقع الذاكرة ,  و لمن ليس لديه فكرة فسوف تتوضح لديك الفكرة عندما تتنفذ المثالين التالين :

package main

import "fmt"

func main() {

    i := 5

    fmt.Println("i is: ", i)

    fmt.Println("address of i is: ", &i)

}

في هذا السطر أستخدمنا الحرف  & لطباعة عنوان المتغير في الذاكرة :

fmt.Println("address of i is: ", &i)

كمبرمج يجب أن تعلم بأن لك متغير في برنامج عنوان في الذاكرة يتم حفظ فيه القيم , و بالنسبة للمبرمجين فالذاكرة من الموارد المهمة جداّ و يجب المحافظة لذا قم المطورون بأستخدام المؤشرات, حيث أنه برمجياً من الأوفر نسخ عنوان الذاكرة الدال على البيانات بدل نسخ البيانات كلما تم التعامل معها في برنامجك , و هذا مثال بسيط على أستخدامها :

الحصول على جميع المواقع على السيرفر

بسم الله الرحمن الرحيم

للحصول على جميع المواقع الموجودة على السيرفر , تستطيع أستخدام موقع bing  و ذلك بأستخدام عنوان الأي بي , الذي تستطيع الحصول عليه بواسطة الأمر ping في موجه الأوامر في نظامك :
ping example.com


ثم في موقع البحث bing أكتب الكلمة :ip متبوعة بعنوان الأي بي للحصول على قائمة المواقع العاملة على نفس رقم الأي بي .

ip:127.0.0.1

الخميس، 30 أغسطس 2012

ubuntu 12: تشغيل أفلام DVD المشفرة

بسم الله الرحمن الرحيم

لتشغيل أفلام DVD الأصلية المحمية بنظام تشفير في نظام لينكس ubuntu قم بأستخدام موجة الأوامر لتثبيت المكتبة  libdvdread4 :
sudo apt-get install libdvdread4

sudo /usr/share/doc/libdvdread4/install-css.sh

بعد أنتهاء التثبيت تستطيع أستخدام برنامج المشغل vlc  مباشرة بدون الحاجة لأي أعدادات أخرى .

الأربعاء، 22 أغسطس 2012

BASH Script: قراءة كلمات السر من المستخدم

بسم الله الرحمن الرحيم

قد يحتاج المبرمج للحصول على بيانات من المستخدم من دون عرضها على الشاشة مثل كلمات السر و لذا تستطيع أستخدام الأمر read كالتالي :
#!/bin/bash

echo "Enter the password:"

read -s password

echo "Password:"$password

فقط قم بأضافة المعامل s- بعد الأمر read ليتم أخفاء القيم عن الشاشة .

BASH SCRIPT: البحث و الأستبدال في النصوص

بسم الله الرحمن الرحيم

يحتوي سكربيت الباش على العديد من الخصائص لتعامل مع النصوص و منها البحث و الأستبدال بواسطة هذه الصيغة :
${Text/old/new}

و هذا السكريبت مثال عملي على  أستخدام هذه الصيغة :

#!/bin/bash

text="Hello,World"

old="World"

new="UAE"

echo "old text:" $text

newtext=${text/$old/$new}

echo "new text:" $newtext


هنالك ملاحظة عند أستخدام هذه الصيغة , تلاحظ اننا لم نستخدم $ قبل المتغير text حيث أن كتابة المتغير بهذه الصورة $text سيؤدي لخطأ عند التنفيذ .

BASH SCRIPT: تنفيذ حلقة تكرارية في الخلفية

بسم الله الرحمن الرحيم

تستطيع تنفيذ حلقة تكرارية في الباش سكريبت في الخلفية , بدل من الأنتظار لمتابعة التنفيذ , و ذلك كهذا المثال :
#!/bin/bash

for i in {1..10}
do
echo -n $i
done&

for i in a b c d f
do
echo -n $i
done

echo


 تلاحظ اننا في الحلقة التكرارية الأولى وضعنا & في النهاية و الذي يستخدم لنقل البرامج للخلفية في لينكس :

for i in {1..10}
do
echo -n $i
done&

و هذا المثال مفيدا جدا في حالة أستخدام الحلقة التكرارية لعملية تأخد الكثير من الوقت مثل نقل ملفات إلى سيرفر أو أرشفة  الأحتياطية .

BASH SCRIPT:طباعة الوقت الذي أستغرقه تنفيذ السكريبت

بسم الله الرحمن الرحيم

يتوافر في سكريبت الباش المتغير الخاص SECONDS الذي يمكننا من معرفة عدد الثواني منذ بدأ التنفيذ إلى حين أستدعاء المتغير و يمكن أستخدامه عن نهاية السكريبت لأعطاءنا الوقت الكلي بالثواني لتنفيذ السكريبت كما في مثالنا التالي :
#!/bin/bash

sleep 10

echo "Total time taken by this script:"$SECONDS