PING ieviešana, neizmantojot neapstrādātas ligzdas

Windows atbalsta interneta vadības ziņojumu protokolu (ICMP), lai noteiktu, vai konkrēts resursdators ir pieejams. ICMP ir tīkla slāņa protokols, kas nodrošina plūsmas kontroli, kļūdu ziņojumus, maršrutēšanu un citus datus starp interneta mitinātājiem. ICMP galvenokārt izmanto lietojumprogrammu izstrādātāji tīkla ping izveidošanai.

Kas ir Ping?

Pingings ir atbalss ziņojuma nosūtīšanas process uz IP adresi un atbildes lasīšana, lai pārbaudītu savienojumu starp TCP / IP resursdatori. Ja jūs rakstāt jaunu lietojumprogrammu, jums labāk būs izmantot Winsock 2 neapstrādātu ligzdu atbalstu, kas ieviests Indija, piemēram.

Tomēr, lūdzu, ņemiet vērā, ka Windows NT un Windows 2000 ieviešanai neapstrādātās ligzdas tiek pakļautas drošības pārbaudēm un ir pieejamas tikai administratora grupas dalībniekiem. Icmp.dll nodrošina funkcionalitāti, kas ļauj izstrādātājiem rakstīt interneta ping lietojumprogrammas Windows sistēmās bez Winsock 2 atbalsta.

Ņemiet vērā, ka pirms ICMP.DLL atklāto funkciju izmantošanas ir jāizsauc Winsock 1.1 WSAStartup funkcija. Ja jūs to nedarīsit, pirmais zvans uz IcmpSendEcho neizdosies ar kļūdu 10091 (WSASYSNOTREADY).

instagram viewer

Zemāk atrodams Ping vienības avota kods. Šeit ir divi lietošanas piemēri.

1. piemērs: koda fragments

izmanto Ping; ...
const
ADP_IP = '208.185.127.40'; (* http://delphi.about.com *)
sāktJa
Ping. Ping (ADP_IP) tad ShowMessage ('Par Delphi programmēšanu pieejama!');
beigas
;

2. piemērs: konsoles režīma Delphi programma

Nākamais mūsu piemērs ir konsoles režīms Delphi programma kas izmanto Ping bloku:. Šeit ir Ping vienības avots:

vienība Ping;
saskarnes

Windows, SysUtils, klases;
tips

TSunB = iesaiņots ieraksts
s_b1, s_b2, s_b3, s_b4: baits;
beigas
;
TSunW = iesaiņots ieraksts
s_w1, s_w2: vārds;
beigas
;
PIPAddr = ^ TIPAddr;
TIPAddr = ieraksts
lietu
vesels skaitlis no
0: (S_un_b: TSunB); 1: (S_un_w: TSunW); 2: (S_addr: longword);
beigas
; IPAddr = TIPAddr;
funkcija
IcmpCreateFile: Thandle; stdcall; ārējs 'icmp.dll';
funkcija
IcmpCloseHandle (icmpHandle: THandle): Būla;
stdcall
; ārējs 'icmp.dll'
funkcija
IcmpSendEcho
(IcmpHandle: Thandle; Galamērķa adrese: IPAddr;
RequestData: rādītājs; RequestSize: Smallint;
RequestOptions: rādītājs;
ReplyBuffer: rādītājs;
ReplySize: DWORD;
Taimauts: DWORD): DWORD; stdcall; ārējs 'icmp.dll';
funkcija
Ping (InetAddress: virkne): Būla;
implementācijas

WinSock;
funkcija
Ielādēt (var Ieeja: virkne;
const
ADelim: virkne = ' ';
const
ADelete: Būla = patiesa)
: virkne;
var

iPos: vesels skaitlis;
sākt
ja
ADelim = # 0 tad sāc
// AnsiPos nedarbojas ar numuru 0

iPos: = Pos (ADelim, AInput);
beigas vēl sākas

iPos: = Pos (ADelim, AInput);
beigas
;
ja
iPos = 0 tad sāc
Rezultāts: = A ieeja;
ja
ADelete tad sāc
Ieeja: = '';
beigas
;
beigas vēl sākas

rezultāts: = Kopēt (AInput, 1, iPos - 1);
ja
ADelete tad sāc
Dzēst (AInput, 1, iPos + Length (ADelim) - 1);
beigas
;
beigas
;
beigas
;
procedūra
TranslateStringToTInAddr (AIP: virkne; var AInAddr);
var

phe: PHostEnt; pac: PChar; GInitData: TWSAData;
sākt

WSAStartup (USD 101, GInitData);
mēģiniet

phe: = GetHostByName (PChar (AIP));
ja
Piešķirts (phe) tad sāk
pac: = phe ^ .h_addr_list ^;
ja
Piešķirts (pac) tad
sākt
ar
TIPAddr (AInAddr) .S_un_b jāsāk
s_b1: = baits (pac [0]); s_b2: = baits (pac [1]); s_b3: = baits (pac [2]); s_b4: = baits (pac [3]);
beigas
;
beigas
cits
sākt
paaugstināt
Izņēmums. Izveidot ('Kļūda, iegūstot IP no HostName');
beigas
;
beigas
cits
sākt
paaugstināt
Izņēmums. Izveidot ('Kļūda iegūstot HostName');
beigas
;
izņemot

FillChar (AInAddr, SizeOf (AInAddr), # 0);
beigas
; WSACleanup;
beigas
;
funkcija
Ping (InetAddress: virkne): Būla;
var

Rokturis: Rokturis;
InAddr: IPAddr;
DW: DWORD;
rep: masīvs[1..128] no baits;
sākt

rezultāts: = nepatiess; Rokturis: = IcmpCreateFile;
ja
Rokturis = INVALID_HANDLE_VALUE tad
Izeja;
TranslateStringToTInAddr (InetAddress, InAddr);
DW: = IcmpSendEcho (Rokturis, InAddr, nulle, 0, nulle, @rep, 128, 0); Rezultāts: = (DW 0); IcmpCloseHandle (Rokturis);
beigas
;​
beigas
.
instagram story viewer