Pemrograman Delphi untuk mengimplementasikan operasi Ping
Zhang Taili
Pengguna yang pernah menggunakan Internet sudah familiar dengan perintah "Ping". Ini adalah file yang dapat dieksekusi di bawah DOS. Biasanya digunakan untuk memeriksa kualitas koneksi jaringan. Prinsip dasarnya adalah menggunakan fungsi dalam protokol ICMP dalam paket protokol TCP/ip, yaitu mengirim permintaan ke komputer tertentu, dan komputer yang menerima permintaan tersebut mengembalikan respons untuk menentukan apakah komputer berjalan pada Internet atau untuk memeriksa jaringan. Apakah koneksi stabil dan dapat diandalkan? Selama pelaksanaan program Ping, kedua komputer mengkonsumsi sumber daya yang sangat sedikit, sehingga merupakan alat yang sangat praktis.
Operasi "Ping" dapat kita implementasikan melalui pemrograman dan memperbaikinya sehingga memiliki gaya antarmuka Windows dan tampilan lebih intuitif daripada DOS.
Pertama, penjelasan singkat tentang pustaka tautan dinamis yang diperlukan dalam pemrograman: Di direktori Sistem Windows, Anda dapat menemukan file Icmp.dll. Pustaka tautan dinamis ini menyediakan semua fungsi protokol ICMP panggilan perpustakaan tautan dinamis.
Fungsi pemanggilan dalam file Icmp.dll dijelaskan sebagai berikut:
1. IcmpCreateFile
Membuka pegangan yang melaluinya Anda dapat mengirim pesan gema permintaan ICMP.
2. IcmpCloseHandle
Tutup pegangan yang Anda buka melalui fungsi IcmpCreateFile.
3. IcmpSendEcho
Kirim permintaan ICMP melalui pegangan yang Anda buka dan kembalikan setelah batas waktu atau penerimaan pesan respons. Parameternya pada dasarnya konsisten dengan struktur rangkanya. Silakan lihat bagian program di bawah ini. Untuk arti spesifiknya, Anda dapat merujuk ke buku tentang protokol ICMP.
Setelah pemahaman awal tentang ketiga fungsi di atas, kita dapat memulai pemrograman.
Pertama, program kita harus memiliki fungsi dasar yang ditunjukkan pada Gambar 1 setelah dijalankan. Untuk melakukan ini, pertama-tama kita dapat meletakkan kontrol yang ditunjukkan pada gambar kanan atas di jendela Delphi, seperti tombol, kotak edit, dan kotak tampilan teks.
(G72.JPG)
Diagram skema operasi rutin
Kemudian WinSocket diinisialisasi di awal program (FormCreate). Fungsinya untuk mendeklarasikan informasi versi yang digunakan sekaligus memanggil perpustakaan Icmp.dll.
jenis
PIPOptionInformation = ^TIPOptionInformasi;
TIPOptionInformation = catatan yang dikemas
TTL: Byte;
KL: Byte;
Bendera: Byte;
PilihanUkuran: Byte;
OpsiData: PChar;
akhir;
PIcmpEchoReply = ^TIcmpEchoReply;
TICmpEchoReply = rekaman yang dikemas
Alamat: DWord;
Status: DWORD;
RTT: DWORD;
Ukuran Data: Kata;
Dicadangkan: Kata;
Data: Penunjuk;
Pilihan: TIPOptionInformation;
akhir;
TICmpCreateFile = fungsi: Pegangan;
TICmpCloseHandle = fungsi(IcmpHandle: THandle): Boolean;
TicmpSendEcho = fungsi(IcmpHandle:THandle;
Alamat Tujuan: DWORD;
Data Permintaan: Penunjuk;
Ukuran Permintaan: Kata;
Opsi Permintaan: Informasi PIPOption;
ReplyBuffer: Penunjuk;
Ukuran Balasan: DWord;
Batas waktu: DWord
): DWord;
TMyPing = kelas(TForm)
Panel1: TPanel;
Label1: Label;
PingEdit: TEdit;
ExeBtn: Tombol T;
Tombol2: Tombol T;
Tombol3: Tombol T;
Pertunjukan Status: TMemo;
Prosedur Button3Click(Pengirim: TObject);
prosedur FormCreate(Pengirim: TObject);
procedure ExeBtnClick(Pengirim: TObject);
pribadi
{Deklarasi pribadi}
hICMP: TANDLE;
IcmpCreateFile: TicmpCreateFile;
IcmpCloseHandle: TicmpCloseHandle;
IcmpSendEcho: TicmpSendEcho;
publik
{Pernyataan publik}
akhir;
procedure TMyPing.FormCreate(Pengirim: TObject);
var
Data WSA: Data TWSA;
hICMPdll: HMODULE;
mulai
WSAStartup($101, Data WSA);
// Muat barang icmp.dll
hICMPdll := LoadLibrary('icmp.dll');
@ICMPCreateFile := GetProcAddress(hICMPdll, 'IcmpCreateFile');
@IcmpCloseHandle := GetProcAddress(hICMPdll, 'IcmpCloseHandle');
@IcmpSendEcho := GetProcAddress(hICMPdll, 'IcmpSendEcho');
hICMP := IcmpCreateFile;
StatusShow.Teks := ';
StatusShow.Lines.Add('Waktu pengembalian byte alamat IP tujuan (milidetik)');
akhir;
Selanjutnya saatnya melakukan proses pemrograman sebenarnya dari operasi Ping seperti gambar di bawah ini.
prosedur TMyPing.ExeBtnClick(Pengirim: TObject);
var
IPOpt:TIPOptionInformation;//Pilihan IP untuk paket yang akan dikirim
Alamat FIPA: DWORD;
pReqData,pRevData:PChar;
PIPE:PIcmpEchoReply;//buffer balasan ICMP Echo
Ukuran: DWORD;
String Saya:string;
FTimeOut:DWORD;
Ukuran Buffer: DWORD;
mulai
jika PingEdit.Teks <> ' lalu
mulai
Alamat FIPA := inet_addr(PChar(PingEdit.Teks));
Ukuran := 40;
BufferSize := SizeOf(TICMPEchoReply) + FSize;
GetMem(pRevData,FSize);
GetMem(pipa,Ukuran Buffer);
FillChar(pipa^, Ukuran(pipa^), 0);
pipa^.Data := pRevData;
MyString := 'Halo, Dunia';
pReqData := PChar(String Saya);
FillChar(IPOpt, Ukuran(IPOpt), 0);
IPOpt.TTL := 64;
FTimeOut := 4000;
IcmpSendEcho(hICMP, FIPAddress, pReqData, Panjang(MyString), @IPOpt, pipa, BufferSize, FTimeOut);
jika pReqData^ = pipa^.Options.OptionsData^ maka
mulai
StatusShow.Lines.Add(PChar(PingEdit.Text) + ' ' +IntToStr(pIPE^.DataSize) + ' ' +IntToStr(pIPE^.RTT));
akhir;
FreeMem(pRevData);
FreeMem(pipa);
akhir
akhir;
Melalui pemrograman di atas, kami telah mengimplementasikan operasi antarmuka fungsi Ping. Faktanya, ada banyak fungsi protokol ICMP yang dapat diwujudkan melalui pemanggilan fungsi ke Icmp.dll.