| Код | procedure ; var hIP : THandle; pingBuffer : array of char; pIpe : ^icmp_echo_reply; pHostEn : PHostEnt; wVersionRequested : WORD; lwsaData : WSAData; error : DWORD; destAddress : In_Addr; begin SetLength(pingBuffer,PackSize ); Try If Assigned(parent.FOnStart) Then parent.FOnStart(parent); parent.FIP := ''; hIP := IcmpCreateFile(); GetMem( pIpe, sizeof(icmp_echo_reply) + sizeof(pingBuffer)); pIpe.Data := @pingBuffer; pIpe.DataSize := sizeof(pingBuffer); pIpe.Options.Ttl := parent.FTTL;
wVersionRequested := MakeWord(1,1); error := WSAStartup(wVersionRequested,lwsaData); if (error <> 0) then begin parent.AddS('Ошибка при выполнении Ping : '+InttoStr(error)); Exit; end;
pHostEn := gethostbyname(pchar(parent.fHost)); error := GetLastError(); if (error <> 0) then begin parent.AddS('Ошибка при выполнении Ping : '+InttoStr(error)); Exit; end;
destAddress := PInAddr(pHostEn^.h_addr_list^)^;
parent.FIP := inet_ntoa(destAddress); IcmpSendEcho(hIP, destAddress.S_addr, pingBuffer, sizeof(pingBuffer), Nil, pIpe, sizeof(icmp_echo_reply) + sizeof(pingBuffer), parent.FTimeOut);
error := GetLastError(); if (error <> 0) then begin parent.AddS('Ошибка при выполнении Ping : '+InttoStr(error)); Exit; end;
IcmpCloseHandle(hIP); WSACleanup(); FreeMem(pIpe); If Not Terminated Then Pointer(parent.FPingThread) := Nil; If Assigned(parent.FOnEnd) Then parent.FOnEnd(parent); except ShowMessage('Ошибка процедуры Execute!'); end; end;
|
У меня одна трудная проблема, код я смог написать а вот проблему не решил : В самом начале есть такая переменная - pingBuffer : array of char; она служит для передачи инфы Рамера пакета для пинга. В этом и есть проблема если я укажу так pingBuffer : array[0..19] of char; то размер пакета будет 20 байт. Вот собствено и проблема как мне указать на размер пакета из переменной например есть переменная PackSize ?? Я пробывал SetLength(pingBuffer,PackSize ); не как вообще не идёт,IcmpSendEcho считает его за 0-е составляющие.. Вот и всё. Можно ещё и так задать - как в этом коде можно указать чтоб размер пакета брлся из переменной PackSize : Integer; Это вопрос думаю сложный так что нужен гуру как я ...... ахахахха
|