تنفيذ PING دون استخدام مآخذ الخام

click fraud protection

شبابيك يدعم بروتوكول رسائل تحكم الإنترنت (ICMP) لتحديد ما إذا كان مضيفًا معينًا متاحًا أم لا. ICMP هو بروتوكول طبقة شبكة يوفر التحكم في التدفق ورسائل الخطأ والتوجيه والبيانات الأخرى بين مضيفي الإنترنت. يتم استخدام ICMP في المقام الأول من قبل مطوري التطبيقات لشبكة ping.

ما هو بينغ؟

بينج هو عملية إرسال رسالة صدى إلى عنوان IP وقراءة الرد للتحقق من وجود اتصال بين تستضيف TCP / IP. إذا كنت تكتب طلبًا جديدًا ، فسيكون من الأفضل استخدام دعم مقابس Winsock 2 الأولية ، التي تم تنفيذها في إندي، فمثلا.

يرجى ملاحظة ، مع ذلك ، أنه بالنسبة إلى تطبيقات Windows NT و Windows 2000 ، فإن Raw Sockets تخضع لفحوصات الأمان ولا يمكن الوصول إليها إلا لأعضاء مجموعة المسؤولين. يوفر Icmp.dll وظائف تسمح للمطورين بكتابة تطبيقات ping للإنترنت على أنظمة Windows بدون دعم Winsock 2.

لاحظ أنه يجب استدعاء دالة Winsock 1.1 WSAStartup قبل استخدام الوظائف المكشوفة بواسطة ICMP.DLL. إذا لم تقم بذلك ، ستفشل المكالمة الأولى IcmpSendEcho مع الخطأ 10091 (WSASYSNOTREADY).

يمكنك العثور أدناه على رمز مصدر وحدة Ping. هنا مثالان للاستخدام.

مثال 1: مقتطف الشفرة

instagram viewer
الاستخدامات بينغ ؛ ...
مقدار ثابت
ADP_IP = '208.185.127.40' ، (* http://delphi.about.com *)
البداية إذا
بينغ. Ping (ADP_IP) ثم ShowMessage ('حول برمجة دلفي قابلة للوصول!') ؛
النهاية
;

مثال 2: برنامج دلفي لوضع وحدة التحكم

المثال التالي هو وضع وحدة التحكم برنامج دلفي يستخدم وحدة Ping:. إليك مصدر وحدة Ping:

وحدة بينغ
واجهات

Windows و SysUtils والفئات ؛
اكتب

TSunB = سجل معبأة
s_b1 و s_b2 و s_b3 و s_b4: byte ؛
النهاية
;
TSunW = سجل معبأة
s_w1 ، s_w2: كلمة ؛
النهاية
;
PIPAddr = ^ TIPAddr ؛
TIPAddr = سجل
قضية
عدد صحيح من
0: (S_un_b: TSunB) ؛ 1: (S_un_w: TSunW) ؛ 2: (S_addr: longword) ؛
النهاية
؛ IPAddr = TIPAddr ؛
وظيفة
IcmpCreateFile: THandle؛ stdcall; خارجي 'icmp.dll' ؛
وظيفة
IcmpCloseHandle (icmpHandle: THandle): منطقي؛
stdcall
; خارجي 'icmp.dll'
وظيفة
IcmpSendEcho
(IcmpHandle: ثاندل ؛ عنوان الوجهة: IPAddr؛
بيانات الطلب: المؤشر ؛ حجم الطلب: Smallint؛
RequestOptions: المؤشر ؛
الرد: البخاخ: المؤشر ؛
حجم الرد: DWORD ؛
المهلة: DWORD): DWORD ؛ stdcall; خارجي 'icmp.dll' ؛
وظيفة
Ping (InetAddress: خيط): منطقي
التنفيذ

WinSock ؛
وظيفة
جلب(فار الإدخال: خيط;
مقدار ثابت
أديليم: خيط = ' ';
مقدار ثابت
ADelete: منطقي = صحيح)
: خيط;
فار

iPos: عدد صحيح ؛
ابدأ
إذا
ADelim = # 0 ثم ابدأ
// AnsiPos لا يعمل مع # 0

iPos: = Pos (ADelim، AInput) ؛
تبدأ نهاية آخر

iPos: = Pos (ADelim، AInput) ؛
النهاية
;
إذا
iPos = 0 ثم ابدأ
النتيجة: = AInput؛
إذا
ADelete ثم ابدأ
المدخلات: = ''؛
النهاية
;
تبدأ نهاية آخر

النتيجة: = نسخ (AInput، 1، iPos - 1)؛
إذا
ADelete ثم ابدأ
حذف (AInput، 1، iPos + Length (ADelim) - 1) ؛
النهاية
;
النهاية
;
النهاية
;
إجراء
TranslateStringToTInAddr (AIP: خيط; فار AInAddr) ؛
فار

phe: PHostEnt ؛ باك: PChar. GInitData: TWSAData ؛
ابدأ

WSAStartup (101 دولارًا ، GInitData) ؛
محاولة

phe: = GetHostByName (PChar (AIP)) ؛
إذا
معين (phe) ثم تبدأ
pac: = phe ^ .h_addr_list ^ ؛
إذا
معين (pac) ثم
ابدأ
مع
TIPAddr (AInAddr) .S_un_b تبدأ
s_b1: = Byte (pac [0])؛ s_b2: = Byte (pac [1])؛ s_b3: = Byte (pac [2])؛ s_b4: = Byte (pac [3])؛
النهاية
;
النهاية
آخر
ابدأ
رفع
استثناء. إنشاء ("خطأ في الحصول على IP من HostName") ؛
النهاية
;
النهاية
آخر
ابدأ
رفع
استثناء. إنشاء ("خطأ في الحصول على HostName") ؛
النهاية
;
إلا

FillChar (AInAddr، SizeOf (AInAddr)، # 0) ؛
النهاية
؛ WSACleanup.
النهاية
;
وظيفة
Ping (InetAddress: خيط): منطقي
فار

مقبض: ثاندل ؛
InAddr: IPAddr ؛
DW: DWORD ؛
اعادة \ عد: مجموعة مصفوفة[1..128] من بايت ؛
ابدأ

النتيجة: = خطأ ؛ مقبض: = IcmpCreateFile ؛
إذا
يد = INVALID_HANDLE_VALUE ثم
خروج؛
TranslateStringToTInAddr (InetAddress، InAddr) ؛
DW: = IcmpSendEcho (مقبض ، InAddr ، لا شيء, 0, لا شيء،rep ، 128 ، 0) ؛ النتيجة: = (DW 0) ؛ IcmpCloseHandle (Handle) ؛
النهاية
;​
النهاية
.
instagram story viewer