delphi 域名转ip并判断ip是否可以联通 复制代码


本文整理自网络,侵删。

 
unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls,WinSock;

type

TForm1 = class(TForm)

Button1: TButton;

Button2: TButton;

Edit1: TEdit;

Edit2: TEdit;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

function PingHost(HostIP: String): Boolean;

type

PIPOptionInformation = ^TIPOptionInformation;

TIPOptionInformation = packed record

TTL: Byte;

TOS: Byte;

Flags: Byte;

OptionsSize: Byte;

OptionsData: PChar;

end;

PIcmpEchoReply = ^TIcmpEchoReply;

TIcmpEchoReply = packed record

Address: DWORD;

Status: DWORD;

RTT: DWORD;

DataSize: Word;

Reserved: Word;

Data: Pointer;

Options: TIPOptionInformation;

end;

TIcmpCreateFile = function: THandle; stdcall;

TIcmpCloseHandle = function(IcmpHandle: THandle): Boolean; stdcall;

TIcmpSendEcho = function(IcmpHandle:THandle;

DestinationAddress: DWORD;

RequestData: Pointer;

RequestSize: Word;

RequestOptions: PIPOptionInformation;

ReplyBuffer: Pointer;

ReplySize: DWord;

Timeout: DWord

): DWord; stdcall;

var

hICMP :THandle;

hICMPdll :THandle;

IcmpCreateFile :TIcmpCreateFile;

IcmpCloseHandle :TIcmpCloseHandle;

IcmpSendEcho :TIcmpSendEcho;

pIPE :PIcmpEchoReply;// ICMP Echo reply buffer

FIPAddress :DWORD;

FSize :DWORD;

FTimeOut :DWORD;

BufferSize :DWORD;

pReqData,pRevData:PChar;

MyString:string;

begin

Result :=False;

hICMPdll :=LoadLibrary('icmp.dll');

if hICMPdll=0 then exit;

@ICMPCreateFile :=GetProcAddress(hICMPdll,'IcmpCreateFile');

@IcmpCloseHandle :=GetProcAddress(hICMPdll,'IcmpCloseHandle');

@IcmpSendEcho :=GetProcAddress(hICMPdll,'IcmpSendEcho');

hICMP :=IcmpCreateFile;

if (hICMP=INVALID_HANDLE_VALUE)then exit;

FIPAddress :=inet_addr(PChar(HostIP));

MyString :='Hello,World'; //send data buffer

pReqData :=PChar(MyString);

FSize :=40; //receive data buffer

BufferSize :=SizeOf(TICMPEchoReply)+FSize;

GetMem(pIPE,BufferSize);

FillChar(pIPE^,SizeOf(pIPE^),0);

GetMem(pRevData,FSize);

pIPE^.Data :=pRevData;

FTimeOut :=1000;

try

Result :=IcmpSendEcho(hICMP,FIPAddress,pReqData,

Length(MyString),nil,pIPE,BufferSize,FTimeOut)>0;

finally

IcmpCloseHandle(hICMP);

FreeLibrary(hICMPdll);

FreeMem(pRevData);

FreeMem(pIPE);

end;

end;

function HostToIP(Name: string; var Ip: string): Boolean;

var

wsdata : TWSAData;

hostName : array [0..255] of char;

hostEnt : PHostEnt;

addr : PChar;

begin

WSAStartup ($0101, wsdata);

try

gethostname (hostName, sizeof (hostName));

StrPCopy(hostName, Name);

hostEnt := gethostbyname (hostName);

if Assigned (hostEnt) then

if Assigned (hostEnt^.h_addr_list) then begin

addr := hostEnt^.h_addr_list^;

if Assigned (addr) then begin

IP := Format ('%d.%d.%d.%d', [byte (addr [0]),

byte (addr [1]), byte (addr [2]), byte (addr [3])]);

Result := True;

end

else

Result := False;

end

else

Result := False

else begin

Result := False;

end;

finally

WSACleanup;

end

end;

procedure TForm1.Button1Click(Sender: TObject);

var

IP:String;

flag:Boolean;

begin

//IP:='123.125.114.118';

IP:=edit2.text;

flag:=PingHost(IP);

if flag=true then

MessageBox(0,'ping1','通路',MB_ICONASTERISK and MB_ICONINFORMATION)

else

MessageBox(0,'ping2','断路',MB_ICONASTERISK and MB_ICONINFORMATION);

end;

procedure TForm1.Button2Click(Sender: TObject);

var

hqw:string;

begin

HostToIP(edit1.text,hqw);

edit2.text:=hqw;

end;

end.

来源:https://www.cnblogs.com/yzryc/p/6402056.html

相关阅读 >>

Delphi实现win10下Delphi 10.3.1 inline hook 域名转向之internetconnecta

Delphi 正则提取txt中的email 数据

Delphi 命令行程序调用单元函数

Delphi xe firemonkey的stylebook皮肤控件的使用

Delphi创建密钥文件

Delphi ado组件动态连接access数据库

Delphi 取得ie下面输入框内容

Delphi一个综合实用的单元

Delphi (vcl及fmx[firemonkey])启动时的欢迎窗口实现代码

Delphi 字符串替换函数[单元文件 sysutils]

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...