रॉ सॉकेट्स का उपयोग किए बिना पिंग को लागू करना

खिड़कियाँ यह निर्धारित करने के लिए कि कोई विशेष होस्ट उपलब्ध है या नहीं, इंटरनेट कंट्रोल मैसेज प्रोटोकॉल (ICMP) का समर्थन करता है। ICMP एक नेटवर्क लेयर प्रोटोकॉल है जो इंटरनेट होस्ट के बीच फ्लो कंट्रोल, एरर मैसेज, रूटिंग और अन्य डेटा डिलीवर करता है। ICMP का उपयोग मुख्यतः एप्लीकेशन डेवलपर्स द्वारा नेटवर्क पिंग के लिए किया जाता है।

एक पिंग क्या है?

एक पिंग एक आईपी पते पर एक गूंज संदेश भेजने और बीच में एक कनेक्शन को सत्यापित करने के लिए उत्तर पढ़ने की प्रक्रिया है टीसीपी / आईपी होस्ट करता है. यदि आप एक नया एप्लिकेशन लिख रहे हैं, तो आपको Winsock 2 कच्चे सॉकेट्स समर्थन का उपयोग करना बेहतर होगा, जिसे लागू किया गया है इंडी, उदाहरण के लिए।

हालांकि, कृपया ध्यान दें कि विंडोज एनटी और विंडोज 2000 के कार्यान्वयन के लिए, रॉ सॉकेट्स सुरक्षा जांच के अधीन हैं और केवल व्यवस्थापक समूह के सदस्यों के लिए सुलभ हैं। Icmp.dll कार्यक्षमता प्रदान करता है जो डेवलपर्स को Winsock 2 समर्थन के बिना विंडोज सिस्टम पर इंटरनेट पिंग एप्लिकेशन लिखने की अनुमति देता है।

ध्यान दें कि WinMPck 1.1 WSAStartup फ़ंक्शन को ICMP.DLL द्वारा उजागर किए गए कार्यों का उपयोग करने से पहले बुलाया जाना चाहिए। यदि आप ऐसा नहीं करते हैं, तो त्रुटि 10091 (WSASYSNOTREADAD) के साथ IcmpSendEcho का पहला कॉल विफल हो जाएगा।

instagram viewer

नीचे आप पिंग इकाई के स्रोत कोड पा सकते हैं। यहाँ उपयोग के दो उदाहरण हैं।

उदाहरण 1: कोड स्निपेट

का उपयोग करता है पिंग ...
स्थिरांक
ADP_IP = '208.185.127.40'; (* http://delphi.about.com *)
beginIf
पिंग। पिंग (ADP_IP) फिर ShowMessage ('डेल्फी प्रोग्रामिंग के बारे में पहुंच योग्य!');
समाप्त
;

उदाहरण 2: कंसोल मोड डेल्फी प्रोग्राम

हमारा अगला उदाहरण एक कंसोल मोड है डेल्फी कार्यक्रम वह पिंग इकाई का उपयोग करता है:। यहाँ पिंग इकाई का स्रोत है:

इकाई पिंग;
interfaceuses

विंडोज, SysUtils, कक्षाएं;
प्रकार

TSunB = पैक रिकॉर्ड
s_b1, s_b2, s_b3, s_b4: बाइट;
समाप्त
;
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: थैंडल; stdcall; बाहरी 'Icmp.dll';
समारोह
IcmpCloseHandle (आइकम्पहैंडल: थैंडल): बूलियन;
stdcall
; बाहरी 'Icmp.dll'
समारोह
IcmpSendEcho
(आइकम्पहैंडल: थैंडल; डेस्टिनेशनएड्रेस: ​​आईपीएड्रेड;
निवेदन: सूचक; अनुरोध: लघु;
अनुरोध: सूचक;
उत्तर बफ़र: सूचक;
उत्तर दें: DWORD;
टाइमआउट: DWORD): DWORD; stdcall; बाहरी 'Icmp.dll';
समारोह
पिंग (InetAddress: तार): बूलियन;
implementationuses

WinSock;
समारोह
लायें (वर AInput: तार;
स्थिरांक
ADelim: तार = ' ';
स्थिरांक
ADelete: बूलियन = सच)
: तार;
वर

iPos: पूर्णांक;
शुरू
अगर
एडेलिम = # 0 तब शुरू करें
// AnsiPos # 0 के साथ काम नहीं करता है

iPos: = Pos (ADelim, AInput);
अंत और शुरू

iPos: = Pos (ADelim, AInput);
समाप्त
;
अगर
iPos = 0 तब शुरू करें
परिणाम: = AInput;
अगर
ADelete तब शुरू करें
इन्पुट: = '';
समाप्त
;
अंत और शुरू

परिणाम: = कॉपी (AInput, 1, iPos - 1);
अगर
ADelete तब शुरू करें
हटाएं (AInput, 1, iPos + लंबाई (ADelim) - 1);
समाप्त
;
समाप्त
;
समाप्त
;
प्रक्रिया
TranslateStringToTInAddr (AIP: तार; वर AInAddr);
वर

phe: PHostEnt; pac: पीचर; GInitData: TWSAData;
शुरू

WSAStartup ($ 101, GInitData);
प्रयत्न

phe: = GetHostByName (PChar (AIP));
अगर
सौंपा (phe) thenbegin
pac: = phe ^ .h_addr_list ^;
अगर
सौंपा (पीएसी) फिर
शुरू
साथ में
TIPAddr (AInAddr) .S_un_b शुरू करो
s_b1: = बाइट (pac [0]); s_b2: = बाइट (pac (1)); s_b3: = बाइट (pac [2]); s_b4: = बाइट (pac [3]);
समाप्त
;
समाप्त
अन्य
शुरू
बढ़ाने
अपवाद। बनाएँ ('होस्टनाम से आईपी प्राप्त करने में त्रुटि');
समाप्त
;
समाप्त
अन्य
शुरू
बढ़ाने
अपवाद। बनाएं ('होस्टनाम में त्रुटि हो रही है');
समाप्त
;
के सिवाय

फिल्चर (AInAddr, SizeOf (AInAddr), # 0);
समाप्त
; WSACleanup;
समाप्त
;
समारोह
पिंग (InetAddress: तार): बूलियन;
वर

हैंडल: थैंडल;
InAddr: IPAddr;
DW: DWORD;
प्रतिनिधि: सरणी[1..128] का बाइट;
शुरू

परिणाम: = असत्य; संभाल: = IcmpCreateFile;
अगर
हैंडल = INVALID_HANDLE_VALUE फिर
बाहर जाएं;
TranslateStringToTInAddr (InetAddress, InAddr);
DW: = IcmpSendEcho (संभाल, InAddr, शून्य, 0, शून्य, @rep, 128, 0); परिणाम: = (डीडब्ल्यू 0); इम्प्लैकोज़हैंडल (हैंडल);
समाप्त
;​
समाप्त
.
instagram story viewer