网络编程学习日记(3)_利用WinPcap实现ARP的发送和接受

网络编程学习日记(2)_利用WinPcap实现ARP的发送和接受

网络编程学完以太网帧的结构,就开始正式进入IP层的学习了,在学习编程之前,对网络协议的有一定的了解,而且还要知道每个数据包,或者是报文,或者是帧他们每个字节 的含义

玩ARP么,肯定得知道他的原理,我就不做什么说明了,书上一大堆的

首先是ARP的接收,来看一下程序的流程

获取网络设备列表

pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf)

然后人机交互一下,获得需要工作的网卡

打开需要的网卡

(adhandle= pcap_open(d->name, // 设备名

65536, // 要捕捉的数据包的部分

// 65535保证能捕获到不同数据链路层上的每个数据包的全部内容

PCAP_OPENFLAG_PROMISCUOUS, // 混杂模式

1000, // 读取超时时间

NULL, // 远程机器验证

errbuf // 错误缓冲池

)

检查数据链路层,我们只考虑以太网

pcap_datalink(adhandle) != DLT_EN10MB

编译过滤器

pcap_compile(adhandle …

more ...

ARP

挺累的,连续两天忙到3点睡觉,早上9点起来继续做

开始挺没状态,但后来写着写着状态来了,一个一个新的想法也加入了。代码就变得丰富多彩起来。

这是网络编程,也就是我的专业方向课的第一份作业,我特别看中这次,当初分方向时候,鑫爷和大妈都去了软件,我留在网络了。似乎都觉得网络好学,简单,不要写程序

那么我就写

第一次将c++与系统底层结合起来,去操作网络上的数据包,感觉真是,太perfect了,不再是呆板的代码,而是真实的数据,真实的操作,甚至我感觉通过键盘,我能 控制一切的感觉

从连接网卡,获取数据,过滤数据包,容错纠正,类型匹配,发送数据,匹配数据包,发送伪装数据攻击,我甚至写出了一套简单的ARP病毒…

其实说起来也不难,只要稍微组合一下几个函数而已

呵呵,挺开心的,自己做东西真好,真实在

唔…睡觉了…

手机打字还是挺累的…

待会儿放上详细流程

more ...

网络编程学习日记(2)_WinPcap自带教程的一些例子的学习

1.编译时候会出现函数问题

‘pcap_findalldevs_ex’ : undeclared identifier

‘PCAP_SRC_IF_STRING’ : undeclared identifier

‘pcap_open’ : undeclared identifier

‘PCAP_OPENFLAG_PROMISCUOUS’ : undeclared identifier

‘=’ : cannot convert from ‘int’ to ’struct pcap *’

等一系列函数找不到的问题,导致这些问题的关键在于他们的函数声明并不包含在pcap.h这个

头文件里面,而是包含在remote-ext.h这个函数里面,所以只需要在

#include “pcap.h”后面加上

#include “remote-ext.h”

就可以编译通过了。

网上有网友戏称说是WinPcap开发小组故意做的恶作剧或者是撰写doc说明时候忘记加入了

= =#

2.出现连接错误

Cpp3.obj : error LNK2001: unresolved external symbol __imp__ntohs@4

Debug/Cpp3 …

more ...

网络编程学习日记(1)_WinPcap和VC的配置

下学期有网络变成,用的是《计算机网络高级软件编程技术》,研究生教材,感觉书写的很泛泛,毕竟是给研究生用的书籍,很多基础的细节都没有写清楚,搞不懂学校怎么弄这 种书,叹一个。

直接导致了我很多东西都得一点一点去网上查找。

很多函数都是用的WinPcap的,所以我又抓紧时间看WinPcap的入门知识。

WinPcap开发包下载:http://www.winpcap.org/install/default.htm

里面有开发者包Developer’s Pack和普通使用的安装程序,宽带上网助手就是普通的安装包,而开发要使用的则是Developer’s Pack。

下来之后,安装到某个目录,然后配置VC,把那个目录的include和lib两个目录放到VC的选项->目录里面。

WinPcap目录下有doc文档,里面的东西相当全面。我运行了两个,都不能直接运行。

第一个简单程序是获取网卡适配器信息,里面一个函数pcap_findalldevs_ex找不到,网上资料说是因为这个函数属于远程网卡获取,它的声明在#incl ude “remote-ext.h”里面,加上去就可以运行了。

第二个程序错误更多,

F:学习网络WiPcap8_08_202Cpp1 …

more ...