winpcap与ARP协议.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文档。上传文档
查看更多
winpcap与ARP协议.doc

? Winpcap网络编程九之Winpcap实战,ARP协议获得MAC表及主机通信 标签:?winpcap 2014-10-18 20:45?2164人阅读?评论 2 ?收藏?举报 ?分类: 计算机网络(9)??C++(9)??C(16)? 版权声明:本文为博主原创文章,未经博主允许不得转载。 大家好,本次我们需要完成的任务是: ?完成两台主机之间的数据通信(数据链路层) 仿真ARP协议获得网段内主机的MAC表 使用帧完成两台主机的通信(Hello! I’m … 声明:本文章的目的是为大家的Winpcap编程带来一定的借鉴,希望对大家的课程设计有一定的帮助。总之,我相信,大家看了前几篇 Winpcap 编程基础知识,再加上这篇文章的讲解,一步一步做下来,相信你能成功的。 P.S. 对Winpcap编程的基础知识有一定了解的就不用再去费工夫学习咯。我也是一点一点学习的,在此提供给大家一个学习文档,Winpcap中文文档 P.P.S. 另外....CSDN略坑爹....我的代码它可能自动转码...我都为此改了好多次了...代码有显示问题与我联系...邮箱?101座机电话号码@?...以后转自己个人空间... 好了话不多说,我们步入正题... 首先我们要理解ARP是干嘛的,ARP主要作用就是通过IP地址来获取MAC地址。那么怎样获取呢?本机向局域网内主机发送ARP包,ARP包内包含了目的IP,源IP,目的MAC,源MAC,其中目的MAC地址为广播地址,FF-FF-FF-FF-FF-FF,即向局域网内所有主机发送一个ARP请求,那么其他主机收到这个请求之后则会向请求来源返回一个数据包。在这个返回的数据包中包含了自身的MAC地址。那么本机收到这些返回的数据包进行解析之后便会得到局域网内所有主机的MAC地址了.. 编程开始: 新建一个C++项目,配好环境,引入Winpcap相关的库,这些不再赘述。 头文件引入 [cpp]?view plain?copy? #define?HAVE_REMOTE?? #define?WPCAP?? #include #include #include 在main函数中首先声明一系列变量如下 [cpp]?view plain?copy? char?*ip_addr; //IP地址?? char?*ip_netmask; //子网掩码?? unsigned?char?*ip_mac; //本机MAC地址?? 为这三个变量分配地址空间 [cpp]?view plain?copy? ip_addr? ? char?* ?malloc sizeof char ?*?16 ;?//申请内存存放IP地址 if? ip_addr? ?NULL printf 申请内存存放IP地址失败!\n ; return?-1; ip_netmask? ? char?* ?malloc sizeof char ?*?16 ;?//申请内存存放NETMASK地址 if? ip_netmask? ?NULL printf 申请内存存放NETMASK地址失败!\n ; return?-1; ip_mac? ? unsigned?char?* ?malloc sizeof unsigned?char ?*?6 ;?//申请内存存放MAC地址 if? ip_mac? ?NULL printf 申请内存存放MAC地址失败!\n ; return?-1; 接下来就是烂大街的程序,获取适配器列表并选中相应的适配器,注释已经在代码中了,如果还有不明白的请参照前几次的讲解。 [cpp]?view plain?copy? //获取本地适配器列表 if pcap_findalldevs_ex PCAP_SRC_IF_STRING,NULL,alldevs,errbuf -1 //结果为-1代表出现获取适配器列表失败 fprintf stderr,Error?in?pcap_findalldevs_ex:\n,errbuf ; //exit 0 代表正常退出,exit other 为非正常退出,这个值会传给操作系统 exit 1 ; for d? ?alldevs;d?! NULL;d? ?d- next printf if d- description //打印适配器的描述信息 printf description:%s\n,d- description ; else //适配器不存在描述信息 printf description:%s,no?description\n ; //打印本地环回地址 printf \tLoopback:?%s\n, d- flags??PCAP_IF_LOOPBACK ?yes:no ; /** pcap_addr?*??n

文档评论(0)

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

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

1亿VIP精品文档

相关文档