用MFC创建一个ping的小程序

过程如下:

①设计界面如下:

用MFC创建一个ping的小程序_第1张图片

主要控件有:列表控件,ip控件,按钮,静态文本

②为相应的控件添加变量

用MFC创建一个ping的小程序_第2张图片

③根据过程,添加相应的源代码

Ping程序实现步骤

创建类型为SOCK_RAW的一个套接字,同时设定协议IPPROTO_ICMP

创建并初始化ICMP头。

调用sendtoWSASendto,将ICMP请求发给远程主机。

调用recvfromWSARecvfrom,以接收任何ICMP响应。

 

④相应代码展示:

用MFC创建一个ping的小程序_第3张图片

用MFC创建一个ping的小程序_第4张图片

用MFC创建一个ping的小程序_第5张图片

用MFC创建一个ping的小程序_第6张图片

用MFC创建一个ping的小程序_第7张图片


⑦参考博文链接:

http://blog.csdn.net/ivy8966/article/details/54612601?locationNum=6&fps=1

 

⑧转载部分博文:

ping的过程是向目的IP发送一个type=8ICMP响应请求报文,目标主机收到这个报文之后,会向源IP(发送方,我)回复一个type=0ICMP响应应答报文。

那上面的字节、往访时间、TTL之类的信息又是从哪来的呢?这取决于IPICMP的头部。

 

IP头部:

用MFC创建一个ping的小程序_第8张图片

头部内容有点多,我们关心的只有以下几个:

IHL:首部长度。因为IP的头部不是定长的,所以需要这个信息进行IP包的解析,从而找到Data字段的起始点。

 另外注意这个IHL是以4个字节为单位的,所以首部实际长度是IHL*4字节。

Time to Live:生存时间,这个就是TTL了。

Data:这部分是IP包的数据,也就是ICMP的报文内容。

 

ICMP响应请求/应答报文头部:


Type:类型,type=8表示响应请求报文,type=0表示响应应答报文。

Code:代码,与type组合,表示具体的信息,参考这里

Checksum:检验和,这个是整个ICMP报文的检验和,包括TypeCode...Data

Identifier:标识符,这个一般填入本进程的标识符。

Sequence Number:序号

Data:数据部分

上面是标准的ICMP报文,一般而言,统计ping的往返时间的做法是,在ICMP报文的Data区域写入4个字节的时间戳。

在收到应答报文时,取出这个时间戳与当前的时间对比即可。


你可能感兴趣的:(用MFC创建一个ping的小程序)