欢迎来到天天文库
浏览记录
ID:27917534
大小:421.00 KB
页数:33页
时间:2018-12-07
《winpcap与arp协议》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、- Winpcap网络编程九之Winpcap实战,ARP协议获得MAC表及主机通信标签: winpcap2014-10-1820:45 2164人阅读 评论(2) 收藏 举报 分类: 计算机网络(9) C++(9) C(16) 版权声明:本文为博主原创文章,未经博主允许不得转载。大家好,本次我们需要完成的任务是: 完成两台主机之间的数据通信(数据链路层)·仿真ARP协议获得网段内主机的MAC表·使用帧完成两台主机的通信(Hello!I’m…) 声明:本文章的目的是为大家的Winpcap编程带来一
2、定的借鉴,希望对大家的课程设计有一定的帮助。总之,我相信,大家看了前几篇Winpcap编程基础知识,再加上这篇文章的讲解,一步一步做下来,相信你能成功的。P.S.对Winpcap编程的基础知识有一定了解的就不用再去费工夫学习咯。我也是一点一点学习的,在此提供给大家一个学习文档,Winpcap中文文档P.P.S.另外....CSDN略坑爹....我的代码它可能自动转码...我都为此改了好多次了...代码有显示问题与我联系...邮箱 1016903103@qq.com ...以后转自己个人空间...好了话不多
3、说,我们步入正题...首先我们要理解ARP是干嘛的,ARP主要作用就是通过IP地址来获取MAC地址。那么怎样获取呢?本机向局域网内主机发送ARP包,ARP包内包含了目的IP,源IP,目的MAC,源MAC,其中目的MAC地址为广播地址,.---FF-FF-FF-FF-FF-FF,即向局域网内所有主机发送一个ARP请求,那么其他主机收到这个请求之后则会向请求来源返回一个数据包。在这个返回的数据包中包含了自身的MAC地址。那么本机收到这些返回的数据包进行解析之后便会得到局域网内所有主机的MAC地址了..编程开始
4、:新建一个C++项目,配好环境,引入Winpcap相关的库,这些不再赘述。头文件引入[cpp] viewplain copy 1.#define HAVE_REMOTE 2.#define WPCAP 3.#include 4.#include 5.#include 在main函数中首先声明一系列变量如下[cpp] viewplain copy 1.char *ip_addr;
5、 //IP地址 2.char *ip_netmask; //子网掩码 3.unsigned char *ip_mac; //本机MAC地址 为这三个变量分配地址空间[cpp] viewplain copy 1.ip_addr = (char *) malloc(sizeof(char) * 16); //申请内存存放IP地址 2. if (ip_addr == NULL) 3. { 4.
6、 printf("申请内存存放IP地址失败!"); 5. return -1; 6. } 7. ip_netmask = (char *) malloc(sizeof(char) * 16); //申请内存存放NETMASK地址 8. if (ip_netmask == NULL) 9. { 10. printf("申请内存存放NETMASK地址失败!"); 11. return -1; .---1. }
7、2. ip_mac = (unsigned char *) malloc(sizeof(unsigned char) * 6); //申请内存存放MAC地址 3. if (ip_mac == NULL) 4. { 5. printf("申请内存存放MAC地址失败!"); 6. return -1; 7. } 接下来就是烂大街的程序,获取适配器列表并选中相应的适配器,注释已经在代码中了,如果还有不明白的请参照前几次的讲解。[cpp] vie
8、wplain copy 1.//获取本地适配器列表 2. if(pcap_findalldevs_ex(PCAP_SRC_IF_STRING,NULL,&alldevs,errbuf) == -1){ 3. //结果为-1代表出现获取适配器列表失败 4. fprintf(stderr,"Error in pcap_findalldevs_ex:",errbuf); 5.
此文档下载收益归作者所有