不使用原始套接字实现ping

Windows支持Internet控制消息协议(ICMP)来确定特定主机是否可用。ICMP是一种网络层协议,用于在Internet主机之间传递流量控制、错误消息、路由和其他数据。ICMP主要由应用程序开发人员用于网络ping。...

Windows支持Internet控制消息协议(ICMP)来确定特定主机是否可用。ICMP是一种网络层协议,用于在Internet主机之间传递流量控制、错误消息、路由和其他数据。ICMP主要由应用程序开发人员用于网络ping。

Man using laptop at home

什么是阿平(a ping)?

ping是向IP地址发送回显消息并读取回复以验证TCP/IP主机之间连接的过程。如果您正在编写一个新的应用程序,那么最好使用Winsock 2原始套接字支持,例如在Indy中实现。

但是,请注意,对于Windows NT和Windows 2000实施,原始套接字将接受安全检查,并且只能由管理员组的成员访问。Icmp.dll提供的功能允许开发人员在不支持Winsock 2的情况下在Windows系统上编写Internet ping应用程序。

请注意,在使用ICMP.DLL公开的函数之前,必须先调用Winsock 1.1 WSAStartup函数。如果不执行此操作,对IcmpSendEcho的第一次调用将失败,并出现错误10091(WSAsysonTready)。

您可以在下面找到Ping单元的源代码。下面是两个用法示例。

示例1:代码片段

uses Ping;...​const ADP_IP = '208.185.127.40'; (* http://delphi.about.com *)beginIf Ping.Ping(ADP_IP) then ShowMessage('About Delphi Programming reachable!');end;

示例2:控制台模式delphi程序

我们的下一个示例是一个控制台模式的Delphi程序,它使用Ping单元:。以下是Ping单元的来源:

unit Ping;​interfaceusesWindows, SysUtils, Classes;typeTSunB = packed records_b1, s_b2, s_b3, s_b4: byte;end;TSunW = packed records_w1, s_w2: word;end;PIPAddr = ^TIPAddr;TIPAddr = recordcase integer of0: (S_un_b: TSunB);1: (S_un_w: TSunW);2: (S_addr: longword);end;IPAddr = TIPAddr;function IcmpCreateFile : THandle; stdcall; external 'icmp.dll';function IcmpCloseHandle (icmpHandle : THandle) : boolean;stdcall; external 'icmp.dll'function IcmpSendEcho(IcmpHandle : THandle; DestinationAddress : IPAddr;RequestData : Pointer; RequestSize : Smallint;RequestOptions : pointer;ReplyBuffer : Pointer;ReplySize : DWORD;Timeout : DWORD) : DWORD; stdcall; external 'icmp.dll';function Ping(InetAddress : string) : boolean;implementationusesWinSock;function Fetch(var AInput: string;const ADelim: string = ' ';const ADelete: Boolean = true): string;variPos: Integer;beginif ADelim = #0 then begin// AnsiPos does not work with #0iPos := Pos(ADelim, AInput);end else beginiPos := Pos(ADelim, AInput);end;if iPos = 0 then beginResult := AInput;if ADelete then beginAInput := '';end;end else beginresult := Copy(AInput, 1, iPos - 1);if ADelete then beginDelete(AInput, 1, iPos + Length(ADelim) - 1);end;end;end;procedure TranslateStringToTInAddr(AIP: string; var AInAddr);varphe: PHostEnt;pac: PChar;GInitData: TWSAData;beginWSAStartup($101, GInitData);tryphe := GetHostByName(PChar(AIP));if Assigned(phe) thenbeginpac := phe^.h_addr_list^;if Assigned(pac) thenbeginwith TIPAddr(AInAddr).S_un_b do begins_b1 := Byte(pac[0]);s_b2 := Byte(pac[1]);s_b3 := Byte(pac[2]);s_b4 := Byte(pac[3]);end;endelsebeginraise Exception.Create('Error getting IP from HostName');end;endelsebeginraise Exception.Create('Error getting HostName');end;exceptFillChar(AInAddr, SizeOf(AInAddr), #0);end;WSACleanup;end;function Ping(InetAddress : string) : boolean;varHandle : THandle;InAddr : IPAddr;DW : DWORD;rep : array[1..128] of byte;beginresult := false;Handle := IcmpCreateFile;if Handle = INVALID_HANDLE_VALUE thenExit;TranslateStringToTInAddr(InetAddress, InAddr);DW := IcmpSendEcho(Handle, InAddr, nil, 0, nil, @rep, 128, 0);Result := (DW 0);IcmpCloseHandle(Handle);end;​end.

  • 发表于 2021-10-07 07:02
  • 阅读 ( 198 )
  • 分类:数学

你可能感兴趣的文章

rpc(rpc)和rmi公司(rmi)的区别

...全机制,还提供了一个支持使用非TCP自定义传输层协议的套接字工厂。此外,RMI提供了绕过防火墙的方法。RMI中发生的步骤与RPC类似。RMI的实现负责内部网络细节,程序员不必担心这些细节。 rpc(rpc)和rmi公司(rmi)的区别 •RPC是语...

  • 发布于 2020-10-25 11:28
  • 阅读 ( 223 )

cpu插槽类型说明:插槽5到bga

你的电脑处理器有一个家:插座。CPU套接字很少被提及,因为它不会帮助或阻碍性能。相反,它为特定一代cpu提供了一个标准化的形状。 ...

  • 发布于 2021-03-20 10:13
  • 阅读 ( 226 )

ssh是什么?它代表什么?

... 安全套接字层(SSL)及其后续层传输层安全性(TLS)提供了一个加密的通信隧道。你每天在发送电子邮件或浏览网页时都会使用TLS。SSL和TLS是应用层协议。在因特网通信网络中...

  • 发布于 2021-03-28 08:50
  • 阅读 ( 321 )

如何使用ping命令测试网络

...据和获得响应所用的时间。这是一个方便的工具,您可以使用它来快速测试网络的各个点。下面是如何使用它。 ping是如何工作的? Ping来自声纳技术中的一个术语,它发出声音脉冲,然后监听回声返回。在计算机网络上,ping...

  • 发布于 2021-04-05 07:03
  • 阅读 ( 235 )

如何从linux终端使用网络:您需要知道的11个命令

...etstat命令可以显示许多不同的接口统计信息,包括打开的套接字和路由表。不带任何选项运行netstat命令,您将看到打开的套接字列表。 你可以用这个命令做更多的事情。例如,使用netstat-p命令查看与打开的套接字关联的程序。...

  • 发布于 2021-04-12 13:12
  • 阅读 ( 122 )

如何在linux上使用ss命令

...(TCP)、用户数据报协议(UDP)、Unix(进程间)和原始套接字的统计信息。原始套接字在网络OSI级别运行,这意味着TCP和UDP头必须由应用程序软件处理,而不是由传输层处理。Internet控制消息协议(ICMP)消息和ping实用程序都使...

  • 发布于 2021-04-14 18:48
  • 阅读 ( 159 )

如何在linux上使用netstat

...。学习如何使用它。 端口、进程和协议 可以连接网络套接字,也可以等待连接。连接使用网络协议,如传输控制协议(TCP)或用户数据报协议UDP。他们使用互联网协议地址和网络端口建立连接。 sockets一词可能会让人联想到导...

  • 发布于 2021-04-14 19:17
  • 阅读 ( 165 )

超级分类账资源管理器

...责与所有其他组件交互并维护必要的查询服务器响应。web套接字用于服务器和Hyperledger Explorer的各种客户端组件之间的通信。数据库用于存储有关区块链组件的必要详细信息,如有关区块、交易和智能合约的信息,并且可以查询...

  • 发布于 2021-06-12 10:52
  • 阅读 ( 124 )

发送(send)和写(write)的区别

...络由两个不同的节点相互连接以执行编程。在两个节点或套接字中,一个往往位于IP连接的特定端口上,而另一方面,另一个套接字或节点延伸到另一个端口,最终在网络中形成连接。发送(send) vs. 写(write)Send和Write之间的区别在...

  • 发布于 2021-07-11 16:41
  • 阅读 ( 786 )

什么是套接字错误10060的常见原因?(the common causes of socket error 10060?)

套接字错误10060是使用电子邮件时发生的错误,它特别指与电子邮件提供商服务器通信时超时。原因可以在电子邮件设置、身份验证设置、防火墙设置、防病毒程序以及Intern...

  • 发布于 2021-12-08 14:23
  • 阅读 ( 141 )
Lily女神
Lily女神

0 篇文章

相关推荐