ARP协议(3)ARP编程--winpcap&vs2012配置

好,之前说了那么多,终于到了,我们可以操刀的时候了。

在对ARP协议编程前,我们必须要能控制网络适配器(网卡),这个部分就是驱动!

“我们要编写网卡驱动?”,对,但是,至少我们现阶段不需要。网络上有写好的驱动和开发包,我们拿来就可以用。我这里使用的是winpcap的驱动以及开发包,因此我们首先要安装和搭建我们的编程环境:

1、下载winpcap驱动。

如果是安装了wireshark的话,它就自动帮我们装了winpcap驱动。(wireshark是基于winpcap开发的)

http://www.winpcap.org/install/default.htm 这个是winpcap官网下载页面,我下载的是4.1.3版本的。

下载到本地后,直接双击安装就可以了。

2、下载winpcap开发包

http://www.winpcap.org/devel.htm 这个是winpcap官网的开发包下载,主要它的版本要和驱动版本一致。

下载到本地后,解压缩就可以了。里面有winpcap的库、头文件,以及例子和使用文档

http://www.ferrisxu.com/WinPcap/ 这个是winpcap相关函数的使用说明(中文)

http://www.winpcap.org/docs/docs_412/html/main.html 英文说明

3、环境配置。

vs环境设置

3.1  向vs2012导入头文件

有两种方式,这两种方式都可以,但我更倾向于第2中,因为第1中存在污染源库的风险

(1) 直接把 ...\WpdPack\Include\(这个目录是第2步中开发包解压后的目录) 下的所有文件都复制到 vs2012 的include 目录下

(2) 在vs2012中配置:

项目属性 -->配置属性 -->c/c++ --> 常规; 右侧【附加包含目录】 在这一选项中把路径加进去,如图:

3.2 向vs中导入库

有两种方式,这两种方式都可以,但我更倾向于第2中,因为第1中存在污染源库的风险

(1) 直接把
...\WpdPack\lib\(这个目录是第2步中开发包解压后的目录) 下的所有文件都复制到 vs2012 的lib 目录下

(2)  在vs2012中配置:

(i)
项目属性 -->配置属性 --> 链接器 --> 右侧的 附加库目录,在这一选项中把路径加进去,如图:

(ii) 项目属性 -->配置属性 --> 链接器 --> 输入 右侧的 附加依赖项 把库加进去,如图 :

3.3 增加编译选项WIN32

如果按以上步骤操作后,编译的话,回报: pcap/pcap.h 找不到<system/time.h>

我们打开pcap/pcap.h这个文件,可以看到:

应该是没有 WIN32 的定义,于是只要加一个这样的定义即可,如图:

4、测试:

我们的环境基本上已经配置好了,现在我们来测试下,是否可以正常运行。

以下这段代码来自:http://www.winpcap.org/docs/docs_412/html/group__wpcap__tut1.html,主要功能是获取机器上的所有网络适配器(网卡)。

在实现的时候,得加上 #define HAVE_REMOTE 这个宏,因为pcap_findalldevs_ex()这个函数是定义在remote-ext.h中,而要正确使用这个函数的话,需要有这个宏的定义。(读者可以进入pcap.h查找remote-ext.h这个文件的包含)

#define HAVE_REMOTE
#include "pcap.h"

void main()
{
    pcap_if_t *alldevs;// 适配器列表,它是一个链表的数据结构
    pcap_if_t *d; // 保存某个适配器
    int i=0;
    char errbuf[PCAP_ERRBUF_SIZE];

    //获取本地设备列表
    /* Retrieve the device list from the local machine */
    if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL /* auth is not needed */, &alldevs, errbuf) == -1)
    {
        fprintf(stderr,"Error in pcap_findalldevs_ex: %s\n", errbuf);
        exit(1);
    }

    /* Print the list */
    for(d= alldevs; d != NULL; d= d->next)
    {
        printf("%d. %s", ++i, d->name);
        if (d->description)
            printf(" (%s)\n", d->description);
        else
            printf(" (No description available)\n");
    }

    if (i == 0)
    {
        printf("\nNo interfaces found! Make sure WinPcap is installed.\n");
        return;
    }

    /* We don't need any more the device list. Free it */
    pcap_freealldevs(alldevs);
}

这里对一些关键代码作下简单说明,关于其他的详细说明及使用,大家可以参考winpcap的技术文档。

pcap_if_t *alldevs;// 适配器列表,它是一个链表的数据结构
//查找网络适配器,并把结果保存在 alldevs 里
pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL /* auth is not needed */, &alldevs, errbuf)
// 用完之后要释放
 pcap_freealldevs(alldevs);


版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-10 17:04:35

ARP协议(3)ARP编程--winpcap&vs2012配置的相关文章

ARP协议及ARP欺骗详解

ARP协议及ARP欺骗详解 地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议.主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址:收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源.ARP缓存是个用来储存IP地址和MAC地址的缓冲区,其本质就是一个IP地址-->MAC地址的对应表,表中每一个条目分别记

ARP协议(4)ARP编程

之前的几篇文章,分别介绍了 ARP 协议格式,在vs2012里配置winpcap环境,我们该做的准备都已经做完了,现在我们真正来实现了. 一.定义数据结构 根据ARP的协议格式,设计一个ARP协议格式 根据ARP的分组格式,我们知道它有两部分组成: 1.以太网首部,这是数据包在数据链路层上传输所必不可缺的部分,它的后面跟着相关的协议数据包(ARP/IP等) 2.ARP数据包 所以,我们有这么几个数据结构: // 以太网的首部 typedef struct EthHead { u_char des

9、网络知识(路由交换和ARP协议)+配置单网卡多ip和配置默认路由

网络知识详解 提问:网络到底是什么?我们在电缆中传输的都是电信号(高电压或者是低电压),所以高电压就是1,低电压就是0,所以规定一定的时间传输固定的高低电压来当做是接收的数据我们所谓的10Mbps:每秒中可以传输10M个bit所以别人说你的是4M的带宽,指的就是4Mbps,要除以8才是实际的速率那就是4Mbps=4/8MBs=0.5MBs=0.51024KBs=(41024)Kbps=512KB/s的下载速率我们平时说的下载速度就是以KB/s为单位的1KB/S=8Kbps 512KB/S=8K*

ARP协议(2)ARP协议格式详解

一.协议格式 ARP协议的格式如下: 分两大块来讲解: 1.红色框起来的是:以太网的首部,共14字节. 这部分是你不管发送什么以太网协议的数据包,它都是需要的,而且是必须的.各字段的说明: 字段 所占字节数 说明 以太网目的地址 6 要向哪台主机发送信息,主机的MAC地址 以太网源地址 6 信息是从哪台机器发送出来的,主机的MAC地址 帧类型 2 表示这是什么类型的数据包.如果是RAP的话,该值为:0x0806 2.蓝色框起来的部分,这就是ARP协议的格式(请求/应答) 字段 所占字节数 说明

ARP协议(5)ARP攻击和防护

一.ARP攻击 我们先来看ARP的功能:ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的进行. ARP的具体实现方式,我在<ARP协议(1)什么是ARP协议>已有说明: Q:这张映射表是如何生成的? A: (1)这张表中,每条记录(非静态)的生存时间一般为20分钟,起始时间从被创建开始算起,一旦过期,将在这张表中删除.(手动删除全部,可以用 arp -d *命令). (2)当A主机要发送信息给B时,A先在ARP高速缓存里查询B的IP是否有对应的MAC地址,

浅析ARP协议及ARP攻击

一. ARP数据包结构 (1)硬件类型:指明发送方想知道的硬件接口类型,以太网的值为1:(2)协议类型:指明发送方提供的高层协议类型:它的值为 0x0800 即表示 IP地址.(3)硬件地址长度和协议长度: 指明硬件地址和高层协议地址的长度,这样ARP报文就可以在任意硬件和任意协议的网络中使用:对于以太网上IP地址的ARP请求或应答来说,它们的值分别为6和4.(4)op:操作字段用来表示这个报文的类型,ARP请求为1,ARP响应为2,RARP请求为3,RARP响应为4: ARP协议解析过程: 1

从零开始学安全(四十二)●利用Wireshark分析ARP协议数据包

wireshark:是一个网络封包分析软件.网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料.Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换,是目前全世界最广泛的网络封包分析软件 什么是ARP协议    协议分析篇第一个要研究的就是ARP协议.ARP(Address Resolution Protocol,地址解析协议)用于将IP地址解析为物理地址(MAC地址).这里之所以需要使用MAC地址,是因为网络中用于连接各个设备的交换机使用了内容可寻址

计算机网路之ARP协议初见

今天在做题的时候发现ARP协议不是很懂,于是我去搜了一些资料,学习了一下,这里记录一下自己的总结. 一.为什么会有ARP协议的产生呢? 答:这是因为在直接相连的网络中,两个节点是利用彼此的MAC地址互相传送帧的.但是当网络层数据报交付给源端系统时,该端系统只能获得目的端系统的ip地址,依然不能进行数据的传送,所以需要一个协议来根据已知的ip地址获得对应得MAC地址,这个时候就产生了ARP协议,ARP协议将解析到的目的IP和MAC地址存储在本地的ARP缓冲中(地址映射表),供下次使用.ARP全称是

网络工程:2.1.ARP协议与PC间通信

ARP协议功能:通过解析网路层IPV4地址来找寻数据链路层MAC地址的一个网络传输协议 ARP协议格式 每台带ARP协议设备表格式  1.PC间正常通信原则一(双方PC能相互访问) ① 需求:1.1.1.2与1.1.1.3正常通信(本机无其他设备ARP信息) 1) 结果:小明正确的把自己的MAC填进题目中并提交回去(通信成功) 最终请求协议如下: 最终应答协议如下: 最终1.1.1.2点ARP表如下 主机 IP地址 MAC地址 A 1.1.1.2 0C:3E...... B 1.1.1.3 QW