17-10-12, 09:00 PM
كاتب الموضوع : أبو عابد
السلام عليكم ورحمة الله وبركاتهأمر Ping في الشبكات يستخدم لفحص الاتصال بين الجهاز المحلي و جهاز أخر على الشبكة بواسطة الـ IP الخاص به .
وطريقته هو إرسال كمية من البايتات من الجهاز المرسل إلى المستقبل و يقوم المستقبل بالرد على هذه البايتات (بنفس العدد و الحجم) وهو ما يمسى بـ Replay .
يقوم بعد ذلك الجهاز المرسل بفحص البايتات العائدة من الجهاز المستقبل و يقارنها بالبايتات المرسلة ليظهر بعد ذلك نتيجة الاتصال بين الجهازين عبر إحصائية تمثل عدد المرسل و المفقود و الوقت المستغرق للوصول (عدد القفزات) .
بإمكانك تجربة هذا الأمر عن طريق الدوس .
إبدأ Start
ثم > تشغيل Run
ثم اكتب cmd
ستظهر لك شاشة سوداء ، أكتب فيها Ping ثم عنوان IP لأي جهاز على الشبكة ( لضمان وجود رد أكتب الـ IP التالي 127.0.0.1 وهو عنوان الجهاز نفسه)
بعد الضغط على زر Enter ستظهر لك نتيجة الاختبار .
حسناً ،،،
نستطيع في الدوت نت تنفيذ هذا الأمر كالتالي :
إنشاء كائن pingSender من الفئة Ping
كود :
Dim pingSender As New Ping
الآن نستطيع إرسال بايتات إلى الجهاز المستقبل بواسطة الوظيفة Send التابعة للفئة Ping كالتالي :
كود :
pingSender.Send(strIPAddress, intTimeOut, buffer)
1- قيمة نصية String تمثل عنوان الجهاز المشتقبل .
2- قيمة عددية Integer تمثل الوقت الأقصى الذي يمكن فيه انتظار رد المستقبل .
3- مصفوفة من نوع Byte سيحمل حجم البايتات المرسلة للجهاز المستقبل .
ولأجل تحقيق الفائدة من هذا كله يجب علينا قراءة القيم العائدة من هذا الاختبار .
سنحتاج للإعلان عن كائن Reply من الفئة PingReply لأجل أن يستقبل تلك القيم .
وعلى هذا يكون الكود كالتالي :
كود :
Dim Reply As PingReply = pingSender.Send(strIPAddress, intTimeOut, buffer)
الآن يجب أن نختبر الكائن Replay هل نجح في عمله أم لا :
كود :
If Reply.Status = IPStatus.Success Then
لقد غلفت هذه العملية بوظيفة كالتالي :
كود :
Public Sub PingIP(ByVal strIPAddress As String, _
Optional ByVal intTimeOut As Integer = 120, _
Optional ByVal intBuffer As Integer = 32, _
Optional ByVal blnDontFragment As Boolean = True, _
Optional ByVal TTL As Integer = 128)
Try
Dim pingSender As New Ping
'Genrate Buffer
Dim strBuffer As String = ""
For ii As Integer = 1 To intBuffer
strBuffer += "1"
Next
Dim buffer As Byte() = System.Text.Encoding.ASCII.GetBytes(strBuffer)
Dim Reply As PingReply = pingSender.Send(strIPAddress, intTimeOut, buffer, New PingOptions(TTL, blnDontFragment))
If Reply.Status = IPStatus.Success Then
MsgBox("IP : " & Reply.Address.ToString() & vbNewLine & _
"Length : " & Reply.Buffer.Length & vbNewLine & _
"RoundtripTime : " & Reply.RoundtripTime & vbNewLine & _
"Time To Live : " & Reply.Options.Ttl)
Else
MsgBox("No Replay")
End If
Catch ex As Exception
MessageBox.Show(ex.Message, Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
أتمنى أن أكون قدمت لكم شيئاً مفيداً