[b]سادسا :- استخدام Cookies Container مع الطلبات
ماهو Cookies Container ؟؟
-هو فئة تخزن الكوكيز لكي نستعمله في طلب اخر
ابسط مثال هو انشاء موضوع جديد في المنتدى
يتطلب انشاء موضوع الى تسجيل الدخول في المنتدى
وتسجيل الدخول يتطلب ارسال طلب من برنامجنا مثلا
فالنفرض انه سوينا طلب تسجيل الدخول وتم الرد علينا بنجاح تسجيل الدخول
ثم حاولنا ان نكتب طلبا اخر لنضع موضوعا وقمنا بارسال الطلب .
الرد سيأتيك مباشرة في الصميم يقولك (إنشاء الموضوع فشل والسبب لم يتم تسجيل الدخول)
رغم أننا ارسلنا طلبا مسبقا لتسجيل الدخول ونجح ،
لكن كما نعلم ان بيانات تسجيل الدخول في جميع المواقع تخزن في الكوكيز والطلب يمكنه حفظ الكوكيز
في كائنه فقط - يعني كائن ارسال طلب تسجيل الدخول لاإرتباط له بكائن ارسال طلب انشاء الموضوع
فالذي سنفعله هو نسخ الكوكيز المرجع من الرد على طلب تسجيل الدخول الى كائن ارسال طلب إنشاء الموضوع
-
مثال على نسخ الكوكيز
PHP كود :
CookieContainer cookies = new CookieContainer();
HttpWebRequest LoginRequset = (HttpWebRequest)WebRequest.Create("http://vb4arb.com/vb/login.php");
LoginRequset.CookieContainer = _cookies; //مهم
//...
HttpWebResponse LoginResponse = (HttpWebResponse)LoginRequset.GetResponse();
cookies.Add(LoginResponse.Cookies);
//...
كما ترون اخواني كوكيز الرد سيتم حفظهما في الكائن cookies
لاحظ هذا الكود
PHP كود :
cookies.Add(LoginResponse.Cookies);
[COLOR="#8B4513"]هو الاساس للحصول على كوكيز تسجل الدخول
فعندما ترسل طلب يحتوي على بيانات عضوية صحيح ، يتم الرد عليك بكوكيز الدخول
وهذا الكوكيز صالح لفترة معينة
لكن :- يمكننا العبث في كائن الكوكيز وتغير محتوايته ليظل للأبد ، ولكن هذا مو موضوعنا الان[/COLOR]
-
[COLOR="#8B4513"]الان يمكننا استعمال هذا الكوكيز في القيام بأي عملية في الموقع تحتاج الى تسجيل الدخول ،
كإنشاء موضوع مثلا .
ملاحظة : لن اقوم بصنع طلب لإنشاء موضوع لأن الوضع معقد قليل فهو يحتاج الى تحليل صفحات
واستخراج securityToken اي رمز الامان
هم سووه عشان لااحد يسوي مثلنا ويرسل موضوع من برنامج بواسطة الطلب
لكن يمكن جلبه بالتحليل وهذا عنوان مقالتنا القادمة ان شاء الله[/COLOR]
------
ماذا سنفعل الان ؟؟
[COLOR="#4B0082"]
بدل انشاء موضوع وتعقيد الامر عليكم بما انكم مبتدأين
فقررت ان نقوم بعرض "المتواجدون الان"
كما نعلم ان صفحة (المتواجدون الان) ستفتح لك اذا كنت مسجل دخولك
وهذا يعني حاجتنا الى انشاء طلب تسجيل الدخول ثم طلب لعرض صفحة المتواجدون الان
وكالعادة منعرضها في اداة WebBrowser رغم انه يمكننا حفظها محتوى الرد كملف او غيره[/COLOR]
----
نبدأ الان - بسم الله
[COLOR="#0000CD"]
1- قم بالذهاب الى صفحة تسجيل الدخول في المنتدى واكتب بياناتك (ولتكن صفحة المنتدى الرئيسية)
2- افتح الاداة Live http header
3- قم بالضغط على زر تسجيل الدخول
4- مباشرة قم بإلغاء القنص بعد ظهور صفحة الترحيب لك
5- نكتب طلبنا بالاعتماد على البيانات الي حصلنا عليها من الاضافة[/COLOR]
صورة :
[COLOR="#800000"]الصورة كما شرحناها سابقا ولكن شرحتها الان لتثبيت المعلومة
-
نريد في البداية أن نحصل على بيانات الطلب
كما نرى ان بيانات الطلب ظاهرة لكن استعمال replay يظهر افضل[/COLOR]
--
الان هذا هذه هي بيانات الطلب :
كود :
vb_login_username=%C7%E1%D4%C7%DF%ED+%E1%E1%E5[color=#FF0000]&[/color]vb_login_password=[color=#FF0000]&[/color]vb_login_password_hint=%DF%E1%E3%C9+%C7%E1%E3%D1%E6%D1[color=#FF0000]&[/color]cookieuser=1[color=#FF0000]&[/color]s=[color=#FF0000]&[/color]securitytoken=guest[color=#FF0000]&[/color]do=login[color=#FF0000]&[/color]vb_login_md5password=4a7d1ed414474e4033ac29ccb8653d9b[color=#FF0000]&[/color]vb_login_md5password_utf=4a7d1ed414474e4033ac29ccb8653d9b[COLOR="#800000"]
الان نحدد الاشياء الي تتغير بين كل مستخدم واخر
بالطبع اليورزنيم والباسوورد يختلفو بين كل مستخدم واخر
افتح النوت باد وإلصف البيانات
ونحذف قيمة vb_login_username ونضع بدالها : {0}[/COLOR]
كود :
vb_login_username={0}--
ونحدف قيمة vb_login_md5password + vb_login_md5password_utf ونضع بدالهما {1}
كود :
vb_login_md5password={1}[color=#FF0000]&[/color]vb_login_md5password_utf={1}--
[COLOR="#000000"]بقية البارمترات هي ثوابت لاتختلف بين شخص الى اخر
فقط اليوزرنيم والباسوورد يخلتفو من مستخدم لإخر
قبل كل شيئ ، يعرف ان منتديات vbluttien تتعامل مع الباسوردات بصيغة MD5
وقد لاحظنا وجود MD5 في بارمتار الباسورد : vb_login_md5password
هذا يعني انه لايمكننا كتابة باسوورد بهذي الطريقة 89139 وإرساله مع الطلب
يعني يجب علينا تحويل الباسوورد الى صيغة MD5
قمت بالبحث في الانترنت ووجدت دالة تقوم بتحويل النص الى صيغة MD5 :[/COLOR]
PHP كود :
public static string MD5(string STR)
{
ASCIIEncoding encoding = new ASCIIEncoding();
string str = string.Empty;
byte[] bytes = encoding.GetBytes(STR);
byte[] buffer2 = new MD5CryptoServiceProvider().ComputeHash(bytes);
foreach (byte num in buffer2)
{
str = str + num.ToString("x2");
}
return str;
}
لاتنسى اضافة مجال الاسماء التالي:[/COLOR]
PHP كود :
using System.Security.Cryptography;
نقوم بإضافة متغير عام :
PHP كود :
CookieContainer _cookies = new CookieContainer();
الان نقوم بكتابة طلب تسجيل الدخول ويكون كالتالي :
PHP كود :
Encoding charset = getEncoding("http://vb4arb.com/vb");
string Password = MD5("8798797");
string stringData = string.Format("vb_login_username={0}&vb_login_password=&vb_login_password_hint=%DF%E1%E3%C9+%C7%E1%E3%D1%E6%D1&cookieuser=1&s=&securitytoken=guest&do=login&vb_login_md5password={1}&vb_login_md5password_utf={1}",
"شكشوك", Password);
byte[] postData = charset.GetBytes(stringData);
HttpWebRequest LoginRequset = (HttpWebRequest)WebRequest.Create("http://vb4arb.com/vb/login.php?do=login");
LoginRequset.ContentType = "application/x-www-form-urlencoded";
LoginRequset.Method = WebRequestMethods.Http.Post;
LoginRequset.ContentLength = postData.Length;
LoginRequset.CookieContainer = _cookies;
LoginRequset.KeepAlive = true;
System.IO.Stream wr = LoginRequset.GetRequestStream();
wr.Write(postData, 0, postData.Length);
wr.Close();
using (HttpWebResponse LoginResponse = (HttpWebResponse)LoginRequset.GetResponse())
{
_cookies.Add(LoginResponse.Cookies);
}
[COLOR="#FF0000"]الاكواد شرحناها سابقا لاحاجة لشرحها
ملاحظة : استخدمت دالة getEncoding الي شرحتها في ردي السابق
ملاحظة 2 : لاحظ اننا استعملنا using ، استعملناها لكي يتم تدمير الكائن LoginResponse فور انتهاء البلوك
لأن يحصل خطا اذا سويت طلبين لنفس الموقع وماقمت بدمير الresponse
ينتهي هذا الكود بحفظ كوكيز العضوية في المتغير العام[/COLOR]
PHP كود :
_cookies.Add(LoginResponse.Cookies);
--
--
الان نقوم باستخدام الكوكيز لنعرض صفحة[COLOR="#B22222"] "المتواجدون الان" التي تتطلب كوكيز تسجيل الدخول
نقوم بالذهاب الى صفحة المتواجدون الان ونقوم بتشغيل القنص
ثم نضغط refresh في المتصفح ليتم اعادة عرض الصفحة وإعادة الطلب[/COLOR]
صورة :
كما ترى لايوجد [COLOR="#FF0000"]post Data لأن البروتوكول المستخدم هو GET
GET كما شرحناها سابقا تستخدم لطلب عرض صفحة او ملف او.....
فنقوم الان بكتابة طلب عرض الصفحة ويكون الكود هكذا :[/COLOR]
PHP كود :
HttpWebRequest onlineRequset = (HttpWebRequest)WebRequest.Create("http://vb4arb.com/vb/online.php");
onlineRequset.Method = "GET";
onlineRequset.CookieContainer = _cookies; //مهم
HttpWebResponse onlineResponse = (HttpWebResponse)onlineRequset.GetResponse();
webBrowser1.DocumentStream = onlineResponse.GetResponseStream();
يكون الكود كاملا كالتالي :
PHP كود :
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Text;
using System.Windows.Forms;
using System.Security.Cryptography;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public static string MD5(string STR)
{
ASCIIEncoding encoding = new ASCIIEncoding();
string str = string.Empty;
byte[] bytes = encoding.GetBytes(STR);
byte[] buffer2 = new MD5CryptoServiceProvider().ComputeHash(bytes);
foreach (byte num in buffer2)
{
str = str + num.ToString("x2");
}
return str;
}
public Encoding getEncoding(string url)
{
HttpWebRequest rq = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse rs = (HttpWebResponse)rq.GetResponse();
return Encoding.GetEncoding(rs.CharacterSet);
}
CookieContainer _cookies = new CookieContainer();
private void button1_Click(object sender, EventArgs e)
{
Encoding charset = getEncoding("http://vb4arb.com/vb");
string Password = MD5("8798797");
string stringData = string.Format("vb_login_username={0}&vb_login_password=&vb_login_password_hint=%DF%E1%E3%C9+%C7%E1%E3%D1%E6%D1&cookieuser=1&s=&securitytoken=guest&do=login&vb_login_md5password={1}&vb_login_md5password_utf={1}",
"شكشوك", Password);
byte[] postData = charset.GetBytes(stringData);
HttpWebRequest LoginRequset = (HttpWebRequest)WebRequest.Create("http://vb4arb.com/vb/login.php?do=login");
LoginRequset.ContentType = "application/x-www-form-urlencoded";
LoginRequset.Method = WebRequestMethods.Http.Post;
LoginRequset.ContentLength = postData.Length;
LoginRequset.CookieContainer = _cookies; //مهم
LoginRequset.KeepAlive = true;
System.IO.Stream wr = LoginRequset.GetRequestStream();
wr.Write(postData, 0, postData.Length);
wr.Close();
using (HttpWebResponse LoginResponse = (HttpWebResponse)LoginRequset.GetResponse())
{
_cookies.Add(LoginResponse.Cookies);
}
//GET
//المتواجدون الان
HttpWebRequest onlineRequset = (HttpWebRequest)WebRequest.Create("http://vb4arb.com/vb/online.php");
onlineRequset.Method = "GET";
onlineRequset.CookieContainer = _cookies; //مهم
HttpWebResponse onlineResponse = (HttpWebResponse)onlineRequset.GetResponse();
webBrowser1.DocumentStream = onlineResponse.GetResponseStream();
}
}
}
شغل البرنامج وستراه يظهر لك "المتواجدون الان"
لولا الكوكيز لما استطعنا الوصول لهذه الصفحة
--
--
المثال في المرفقات
--
--
--
{يتبع الجزء السابع} >>>
[/b]

