WINSOCK在网络测试编程中使用.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
WINSOCK在网络测试编程中使用

WINSOCK在网络测试编程中使用摘要:计算机网络技术已经飞速,越来越多的深入到各行各业中,对于网络应用技术的编程方法与技巧也广为大家了解和喜爱。本文通过对网络最基本的应用实例,阐述了WINSOCK在网络测试编程中的广泛应用。 关键词:计算机网络 WINSOCK 测试编程 中图分类号:TP393 文献标识码:A 文章编号:1007-9416(2012)08-0023-01 1、引言 当前在计算机应用中,Windows与网络已是最为广泛和不可缺少的应用。在Windows下的各种网络编程接口中,Windows Sockets越来越得到大家的重视,这是因为Windows Sockets规范是一套开放的、支持多种协议的Windows下的网络通信编程的API接口,也是Windws网络编程的事实标准,研究和开发在Windows下的网络编程技术具有普遍的应用价值。 本文通过对网络最基本的应用实例——网络测试程序的分析,使初学网络编程的人对Windows Sockets的使用有一个基本的了解。网络测试是网络编程中最基本的应用,用来测试与网络上另一个主机的网络连接是否正常。工作原理是:向网络上的另一个主机系统发送ICMP报文,如果指定系统得到了报文,它将把报文原样传回给发送者,发送者通过与原报文对比及发送和接收报文的时间差得知网络通讯的好坏。下面就测试网络的C++程序进行分析,来了解Windows Sockets的使用。 2、网络测试程序的原理 通过向测试机发送ICMP回应请求消息,并接收ICMP回应回复消息,通过这些消息来判断与主机的网络连通状况。 ICMP(Internet Control Message Protocol)即Internet控制消息协议(RFC-792),它是TCP/IP协议集中的一个子协议,属于网络层协议。应用中,它使用IP做为底层支持,但ICMP不是高层协议,而是IP层的协议。通常ICMP报文被IP层或更高层协议(TCP或UDP)使用,每一种IP模块必须实现ICMP。ICMP报文有两种类型,ICMP错误报告报文和ICMP查询报文,每个ICMP报头均包含类型、编码和校验,其余选项则随ICMP的功能不同而不同。这里只使用ICMP报文中的两种:请求回送和请求回应。 网络测试程序发送ICMP回应请求消息并记录收到ICMP回应回复消息,通过这些消息作为测试网络或主机是否正常的一个依据。 3、网络测试程序分析 要使用WinSock在程序开始应有#include ,程序开始用WSAStartup(wVer,wsaData)对WinSock进行初始化,其中wVer是WinSock需要的版本号,wsaData通过WSADATA wsaData定义,然后创建一个SOCK个例rawSocket: SOCKET rawSocket=socket(AF_INET,SOCK_RAW,IPPROTO_ICMP); 如果rawSocket不是SOCKET_ERROR,说明创建成功,就可以使用此Sock了,把ICMP设为请求回送方式(ICMP_ECHOREQ),填充当前时间及其它项目,其中校验和使用网际校验和算法,把被校验的数据16位进行累加,然后取反码,若数据字节长度为奇数,则数据尾部补一个字节的0以凑成偶数。 向要测试主机的IP地址发送ICMP包,发送程序如下: int SendEchoRequest(SOCKET s,LPSOCKADDR_IN lpstToAddr) { static ECHOREQUEST echoReq; static nId = 1; static nSeq = 1; int nRet; //填写ICMP头部为响应请求 echoReq.icmpHdr.Type = ICMP_ECHOREQ; echoReq.icmpHdr.Code = 0; echoReq.icmpHdr.Checksum= 0; echoReq.icmpHdr.ID = nId++; echoReq.icmpHdr.Seq = nSeq++; //置发送数据 for (nRet = 0; nRet REQ_DATASIZE; nRet++) echoReq.cData[nRet] = ‘‘ ‘‘+nRet; //记下发送的时间标记 echoReq.dwTime = GetTickCount(); //计算校验和 echoReq.icmpHdr.Checksum=in_cksum((u_short*)echoReq,sizeof(ECHOREQUEST)); //发送响应请求ICMP nRet = sendto(s,

文档评论(0)

linsspace + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档