winpcap驱动简介

winpcap驱动简介
winpcap驱动简介

【winpcap 驱动简介】

winpcap(windows packet capture)是windows平台下一个免费,公共的网络访问系统。开发winpcap这个项目的目的在于为win32应用程序提供访问网络底层的能力。它提供了以下的各项功能:

1> 捕获原始数据包,包括在共享网络上各主机发送/接收的以及相互之间交换的数据包;

2> 在数据包发往应用程序之前,按照自定义的规则将某些特殊的数据包过滤掉;

3> 在网络上发送原始的数据包;4> 收集网络通信过程中的统计信息。

winpcap的主要功能在于独立于主机协议(如TCP-IP)而发送和接收原始数据包。也就是说,winpcap不能阻塞,过滤或控制其他应用程序数据包的发收,它仅仅只是监听共享网络上传送的数据包。因此,它不能用于QoS调度程序或个人防火墙。目前,wi npcap开发的主要对象是windows NT/2000/XP,这主要是因为在使用winpcap的用户中只有一小部分是仅使用windows 95/98/Me,并且M$也已经放弃了对win9x的开发。因此本文相关的程序T-ARP也是面向NT/2000/XP用户的。其实winpcap中的面向9x 系统的概念和NT系统的非常相似,只是在某些实现上有点差异,比如说9x只支持AN SI编码,而NT系统则提倡使用Unicode编码。有个软件叫sniffer pro.可以作网管软件用,有很多功能,可监视网络运行情况,每台网内机器的数据流量,实时反映每台机器所访问IP以及它们之间的数据流通情况,可以抓包,可对过滤器进行设置,以便只抓取想要的包,

比如POP3包,smtp包,ftp包等,并可从中找到邮箱用户名和密码,还有ftp用户名和密码.它还可以在使用交换机的网络上监听,不过要在交换机上装它的一个软件.还有一个简单

的监听软件叫Passwordsniffer,可截获邮箱用户名和密码,还有ftp用户名和密码,它只能用在用HUB网络上著名软件tcpdump及ids snort都是基于libpcap编写的,此外Nma p扫描器也是基于libpcap来捕获目标主机返回的数据包的。

winpcap提供给用户两个不同级别的编程接口:一个基于libpcap的wpcap.dll,另一个是较底层的packet.dll。对于一般的要与unix平台上libpcap兼容的开发来说,使用wpcap.dll是当然的选择。

【Winpcap的内部结构】

Winpcap的各个组成部分

Winpcap是针对Win32平台的抓包和网络分析的一个架构。它包括一个核心态的包过滤器,一个底层的动态链接库(packet.dll)和一个高层的不依赖于系统的库(wpcap.dll)。

为什么使用“architecture”而不是“library”呢?因为抓包是一个要求与网络适配器(网卡)和操作系统交互的底层机制,而且与网络的实施也有密切关系,所以仅用“library”

不能充分表达Winpcap的作用。下图表明了Winpcap的各个组成部分:首先,抓包系统必须绕过操作系统的协议栈来访问在网络上传输的原始数据包(raw packet),这就要求一部分运行在操作系统核心内部,直接与网络接口驱动交互。这个部分是系统依赖(system dependent)的,在Winpcap的解决方案里它被认为是一个设备驱动,称作NPF(Netgroup Packet Filter)。Winpcap开发小组针对Windows95,Windows98,WindowsME,Windows NT 4,Windows2000和WindowsXP提供了不同版本的驱动。这些驱动不仅提供了基本的特性(例如抓包和injection),还有更高级的特性(例如可编程的过滤器系统和监视引擎)。前者可以被用来约束一个抓包会话只针对网络通信中的一个子集(例如,仅仅捕获特殊主机产生的ftp通信的数据包),后者提供了一个强大而简单的统计网络通信量的机制(例如,获得网络负载或两个主机间的数据交换量)。

其次,抓包系统必须有用户级的程序接口,通过这些接口,用户程序可以利用内核驱动提供的高级特性。Winpcap提供了两个不同的库:packet.dll和wpcap.dll。前者提供了一个底层API,伴随着一个独立于Microsoft操作系统的编程接口,这些API可以直接用来访问驱动的函数;后者导出了一组更强大的与libpcap一致的高层抓包函数库(c apture primitives)。这些函数使得数据包的捕获以一种与网络硬件和操作系统无关的方式进行。

〖NPF驱动〗

网络数据包过滤器(Netgroup Packet Filter,NPF)是Winpcap的核心部分,它是Winpcap完成困难工作的组件。它处理网络上传输的数据包,并且对用户级提供可捕获(capture)、发送(injection)和分析性能(analysis capabilities)。

〖NPF和NDIS〗

NDIS(Network Driver Interface Specification)是一个定义网络适配器(或者说成是管理网络适配器的驱动程序)与协议驱动(例如TCP/IP的实现)之间通信的规范。NDIS最主要的目的是作为一个允许协议驱动发送和接收网络(LAN或WAN)上的数据包而不必关心特定的适配器或特定的Win32操作系统的封装。

NDIS支持三种类型的网络驱动:

(1)网络接口卡或NIC驱动(Network interface card or NIC drivers)。NIC 驱动直接管理着网络接口卡(NIC)。NIC驱动接下边与硬件连接,从上边表现为一个接口,该接口允许高层发送数据包到网络上,处理中断,重置NIC,停止NIC,查询和设置驱动的运行特征。NIC驱动可以是小端口(miniport)或完全的NIC驱动(full NIC d river)。

Miniport驱动仅仅实现了管理NIC的必要操作,包括在NIC上发送和接收数据。对于所有最底层的NIC驱动的操作由NDIS提供,例如同步(synchronization)。小端口(miniport)不直接调用操作系统函数,它们对于操作系统的接口是NDIS。

小端口仅仅是向上传递数据包给NDIS并且NDIS确保这些数据包被传递给正确的协议。

完全NIC驱动(Full NIC driver)完成硬件细节的操作和所有由NDIS完成的同步和查询操作。例如,完全NIC驱动维持接收到的数据的绑定信息。

(2)中间层驱动(Intermediate drivers)中间层驱动位于高层驱动(例如协议驱动)和小端口之间。对于高层驱动,中间层驱动看起来像是小端口;对于小端口,中间层驱动看起来像协议驱动。一个中间层协议驱动可以位于另一个中间层驱动之上,尽管这种分层可能对系统性能带来负面影响。开发中间层驱动的一个关键原因是在现存的遗留协议驱动(legacy protocol driver)和小端口之间形成媒体的转化。例如,中间层驱动可以将LAN协议转换成ATM协议。中间层驱动不能与用户模式的应用程序通信,但可以与其他的NDIS驱动通信。

(3)传输驱动或协议驱动(Transport drivers or protocol drivers)协议驱动实现了网络协议栈,例如IPX/SPX或TCP/IP,在一个或多个网络接口卡上提供它的服务。在协议驱动的上面,它为应用层客户程序服务;在它的下面,它与一个或多个NIC驱动或中间层NDIS驱动连接。

NPF在NDIS栈中的位置

NPF是一个协议驱动。从性能方面来看,这不是最好的选择,但是它合理地独立于MAC层并且有权使用原始通信(raw traffic)。下图表现了NPF在NDIS栈中的位置:

伴随着NPF驱动细节的Winpcap的结构

〖NPF结构基础〗下图表现了伴随着NPF驱动细节的Winpcap的结构。

〖抓包〗抓包是NPF最重要的操作。在抓包的时候,驱动使用一个网络接口监视着数据包,并将这些数据包完整无缺地投递给用户级应用程序。

抓包过程依赖于两个主要组件:一个数据包过滤器,它决定着是否接收进来的数据包并把数据包拷贝给监听程序。数据包过滤器是一个有布尔输出的函数。如果函数值是true,抓包驱动拷贝数据包给应用程序;如果是false,数据包将被丢弃。NPF数据包过滤器更复杂一些,因为它不仅决定数据包是否应该被保存,而且还得决定要保存的字节数。被NPF驱动采用的过滤系统来源于BSD Packet Filter(BPF),一个虚拟处理器可以执行伪汇编书写的用户级过滤程序。应用程序采用用户定义的过滤器并使用wpcap.

dll将它们编译进BPF程序。然后,应用程序使用BIOCSETF IOCTL写入核心态的过滤器。这样,对于每一个到来的数据包该程序都将被执行,而满足条件的数据包将被接收。与传统解决方案不同,NPF不解释(interpret)过滤器,而是执行(execute)它。由于性能的原因,在使用过滤器前,NPF提供一个JIT编译器将它转化成本地的80x86函数。当一个数据包被捕获,NPF调用这个本地函数而不是调用过滤器解释器,这使得处理过程相当快。

一个循环缓冲区,用来保存数据包并且避免丢失。一个保存在缓冲区中的数据包有一个头,它包含了一些主要的信息,例如时间戳和数据包的大小,但它不是协议头。此外,以队列插入的方式来保存数据包可以提高数据的存储效率。可以以组的方式将数据包从NPF缓冲区拷贝到应用程序。这样就提高了性能,因为它降低了读的次数。如果一个数据包到来的时候缓冲区已经满了,那么该数据包将被丢弃,故发生了丢包。【Winpcap程序实例】

获得网卡接口。在普通的SOCKET编程中,对双网卡编程是不行的。当主机为双网卡时,本程序可分别获得两张网卡各自的描述结构及地址,然后可以对它们分别进行操作。返回的alldevs队列首部为逻辑网卡,一般不对它进行什么操作。

(一)获得网卡接口

#i nclude "pcap.h"

void main(){

pcap_if_t *alldevs;

/*struct pcap_if_t{

pcap_if_t *next;

char *name;

char *description;

pcap_addr *addresses;

U_int falgs;

}*/

pcap_if_t *d;

int i=0;

char errbuf[PCAP_ERRBUF_SIZE];

/* Retrieve the device list */

if (pcap_findalldevs(&alldevs, errbuf) == -1)//返回网卡列表,alldevs指向表头{

fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf);exit(1);

}

/* Print the list */

for(d=alldevs;d;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);

}

--------------------------------------------------------------------------------

(二)抓包本程序俘获局域网内UDP报文。

#i nclude "pcap.h"

/* 4 bytes IP address */

typedef struct ip_address{

u_char byte1;

u_char byte2;

u_char byte3;

u_char byte4;

}ip_address;

/* IPv4 header */

typedef struct ip_header{

u_char ver_ihl; // Version (4 bits) + Internet header length (4 bits) u_char tos; // Type of service

u_short tlen; // Total length

u_short identification; // Identification

u_short flags_fo; // Flags (3 bits) + Fragment offset (13 bits)

u_char ttl; // Time to live

u_char proto; // Protocol

u_short crc; // Header checksum

ip_address saddr; // Source address

ip_address daddr; // Destination address

u_int op_pad; // Option + Padding

}ip_header;

/* UDP header*/

typedef struct udp_header{

u_short sport; // Source port

u_short dport; // Destination port

u_short len; // Datagram length

u_short crc; // Checksum

}udp_header;

/* prototype of the packet handler */

void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data);

main(){

pcap_if_t *alldevs;

pcap_if_t *d;

int inum;

int i=0;

pcap_t *adhandle;

char errbuf[PCAP_ERRBUF_SIZE];

u_int netmask;

char packet_filter[] = "ip and udp";

struct bpf_program fcode;

/* Retrieve the device list */

if (pcap_findalldevs(&alldevs, errbuf) == -1){

fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf);

exit(1);

}

/* Print the list */

for(d=alldevs; d; 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 -1;

}

printf("Enter the interface number (1-%d):",i);

scanf("%d", &inum);

if(inum < 1 || inum > i)

{

printf("\nInterface number out of range.\n");

/* Free the device list */

pcap_freealldevs(alldevs);

return -1;

}

/* Jump to the selected adapter */

for(d=alldevs, i=0; i< inum-1 ;d=d->next, i++);

/* Open the adapter */

if ( (adhandle= pcap_open_live(d->name, // name of the device

65536, // portion of the packet to capture.

// 65536 grants that the whole packet will be captured on all the MACs.

1, // promiscuous mode

1000, // read timeout

errbuf // error buffer

) ) == NULL)

{

fprintf(stderr,"\nUnable to open the adapter. %s is not supported b y WinPca p\n");

/* Free the device list */

pcap_freealldevs(alldevs);

return -1;

}

/* Check the link layer. We support only Ethernet for simplicity. */

if(pcap_datalink(adhandle) != DLT_EN10MB)

{

fprintf(stderr,"\nThis program works only on Ethernet networks.\n");

/* Free the device list */

pcap_freealldevs(alldevs);

return -1;

}

if(d->addresses != NULL)

/* Retrieve the mask of the first address of the interface */

netmask=((struct sockaddr_in *)(d->addresses->netmask))->sin_addr.S_un.S_a ddr;

else

/* If the interface is without addresses we suppose to be in a C class net work */

netmask=0xffffff;

//compile the filter

if(pcap_compile(adhandle, &fcode, packet_filter, 1, netmask) <0 ){

fprintf(stderr,"\nUnable to compile the packet filter. Check the syntax.\n");

/* Free the device list */

pcap_freealldevs(alldevs);

return -1;

}

//set the filter

if(pcap_setfilter(adhandle, &fcode)<0){

fprintf(stderr,"\nError setting the filter.\n");

/* Free the device list */

pcap_freealldevs(alldevs);

return -1;

}

printf("\nlistening on %s...\n", d->description);

/* At this point, we don't need any more the device list. Free it */

pcap_freealldevs(alldevs);

/* start the capture */

pcap_loop(adhandle, 0, packet_handler, NULL);

return 0;

}

/* Callback function invoked by libpcap for every incoming packet */

void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data)

{

struct tm *ltime;

char timestr[16];

ip_header *ih;

udp_header *uh;

u_int ip_len;

/* convert the timestamp to readable format */

ltime=localtime(&header->https://www.360docs.net/doc/d73636353.html,_sec);

strftime( timestr, sizeof timestr, "%H:%M:%S", ltime);

/* print timestamp and length of the packet */

/* retireve the position of the ip header */

ih = (ip_header *) (pkt_data +

14); //length of ethernet header

/* retireve the position of the udp header */

ip_len = (ih->ver_ihl & 0xf) * 4;

uh = (udp_header *) ((u_char*)ih + ip_len);

/* convert from network byte order to host byte order */

printf("%s.%.6d len:%d ", timestr, header->https://www.360docs.net/doc/d73636353.html,_usec, header->len);

/* print ip addresses */

printf("%d.%d.%d.%d -> %d.%d.%d.%d\n",

ih->saddr.byte1,

ih->saddr.byte2,

ih->saddr.byte3,

ih->saddr.byte4,

ih->daddr.byte1,

ih->daddr.byte2,

ih->daddr.byte3,

ih->daddr.byte4

);

}

--------------------------------------------------------------------------------

(三)发包

要在命令行下运行,给与参数:网卡描述符。或者添加代码findalldevs(),那样应很方便。

#i nclude

#i nclude

#i nclude

void usage();

void main(int argc, char **argv) {

pcap_t *fp;

char error[PCAP_ERRBUF_SIZE];

u_char packet[100];

int i;

/* Check the validity of the command line */

if (argc != 2)

{

printf("usage: %s inerface", argv[0]);

return;

}

/* Open the output adapter */

if((fp = pcap_open_live(argv[1], 100, 1, 1000, error) ) == NULL)

{

fprintf(stderr,"\nError opening adapter: %s\n", error);

return;

}

/* Supposing to be on ethernet, set mac destination to 1:1:1:1:1:1 */ packet[0]=1;

packet[1]=1;

packet[2]=1;

packet[3]=1;

packet[4]=1;

packet[5]=1;

/* set mac source to 2:2:2:2:2:2 */

packet[6]=2;

packet[7]=2;

packet[8]=2;

packet[9]=2;

packet[10]=2;

packet[11]=2;

/* Fill the rest of the packet */

for(i=12;i<100;i++){

packet=i%256;

}

/* Send down the packet */

pcap_sendpacket(fp,

packet,

100);

return;

}

基于winpcap的嗅探器设计与实现

基于winpcap的嗅探器设计与实现

计算机与信息学院 《计算机网络系统实践》报告 设计题目:嗅探器的设计与实现 学生姓名:*** 学号:2010**** 专业班级:信息安全****

2013 年9 月25 一、设计要求 1.不限平台,可以使用Libpcap、WinPcap 或 Linux的原始套接字; 2.实现一个功能比较简单的、具有图形界面的Sniffer,主线程响应用户界 面操作,工作线程完成抓包等工作; 3.能够解析出IP层和传输层的协议头,能够过滤TCP、UDP等数据包; 4.能够输出文本方式传送的数据包的内容; 5.能够进行简单的流量统计。 二、开发环境与工具

操作系统:windows7 开发工具:visual studio 开发语言:C++ 附加库:Winpcap 三、设计原理 网络嗅探器是一种常用的监听网络的工具。所谓嗅探器( Sniffer) ,是一种利用计算机网络接口截获网络数据的软件或硬件,可用于网络管理、网络协议分析以及网络安全等众多方面。嗅探器不同于一般的键捕获工具,后者只能捕获当地终端控制台上的按键内容,而嗅探器所“嗅”到的是动态的以信息包形式( 如IP 数据包或者以太网包) 封装的信息流。其中可能携带了重要数据或敏感信息。可以将这些捕获到的信息包存档,以利用相应工具可以作进一步分析。 计算机网络的设计为嗅探器的使用创造了最基本的条件。在目前的网络环境中,所有计算机节点都是共享传输介质,任意节点发出或发往任意节点的数据帧必将经过网内每一个节点的网络接口,此时只需对嗅探节点的网络接口( 网卡) 进行适当的设置便可为实现嗅探的做好准备工作。在计算机网络系统中,网卡是用来接收网络上其他节点发来的数据帧,其内嵌的单片处理程序会检测数据帧来源的MAC 地址,并根据网卡所设置的接收方式来是否接收处理数据,如果认为应该处理,则网卡就会产生中断信号通知中央处理器,接收该数据帧并传输给操作系统处理。否则就简单丢弃,所对应节点的网卡就截断,计算机的中央处理器并不参与。 网卡是网络中节点主机的关键硬件设备。对数据的接收一般有四种设置模式: 广播模式: 接收在网络中进行广播数据信息。组播模式: 接收组播数据信息。单播模式: 只有匹配的目的网卡才能接收数据信息。混杂模式: 网卡能够可以接收一切通过它的数据信息。 四、系统功能描述及软件模块划分 系统功能设计 本系统的基本功能为实现网络数据包的捕获, 并将其数据内容解析显示。网络数据包捕获功能主要负责从网络中捕获和过滤数据,这可以通过调

Excel中常用函数应用举例

Excel中常用函数应用举例 1.求和函数SUM 求和 SUM(number1,number2,...)。 使用求和函数SUM,操作步骤如下: (1)打开“员工业绩表”工作簿,选择D10单元格,如图所示。 (2)单击“插入函数”按钮,在弹出的“插入函数”对话框中选择SUM函数,单击“确定”按钮,如图所示。

(3)在打开的“函数参数”对话框中,“Number1”文本框中默认引用D3:D9单元格区域,单击“确定”按钮,如图所示。 (4)求出的和值即可显示在D10单元格中,如图所示。

2.平均值函数A VERAGE 平均值函数的原理是将所选单元格区域中的数据相加,然后除以单元格个数,返回作为结果的算术平均值,其语法结构为:A VERAGE(number1,number2,...)。 使用平均值函数A VERAGE,操作步骤如下: (1)打开“员工业绩表”工作簿,选择D11单元格,如图所示。

(2)单击“插入函数”按钮,在弹出的“插入函数”对话框中选择A VERAGE函数,单击“确定”按钮,如图所示。 (3)在打开的“函数参数”对话框中,在“Number1”文本框中输入D3:D9,设定计算平均值的单元格区域,单击“确定”按钮,如图所示。

(4)求出的平均值即显示在D11单元格中,如图所示。 3.条件函数IF 条件函数可以实现真假值的判断,它根据逻辑计算的真假值返回两种结果。该函数的语法结构为:IF(logical_test,value_if_true,value_if_false)。其中,logical_test表示计算结果为true或false的任意值或表达式;value_if_true表示当logical_test为true时返回的值;value_if_false表示当logical_test为false时返回的值。

使用Winpcap示例程序的时候解疑

使用Winpcap示例程序的时候,会出现很多错误(转) WINPCAP编程环境设置 2008-05-19 12:41 一、WINPCAP编程环境设置 在正式WinPcap编程之前,要配置运行环境。 1、运行环境设置 Win32 平台下WinPcap应用程序需要以下四个动态链接库才能正常运行:wpcap.dll Packet.dll WanPacket.dll pthreadVC.dll 这四个动态链接库在WinPcap驱动程序里。 如果没有这个驱动程序,需要到WinPcap官方网站上下载,下载地址为:https://www.360docs.net/doc/d73636353.html, 如果应用程序出现一下提示,那就是没有安装驱动程序的原因了。 也可以不安装WinPcap驱动程序。但是需要把上面提到的四个动态链接库文件拷贝到系统分区/WINDOWS/system32目录下。(似乎有些问题) 2、配置编程环境。 1> 从https://www.360docs.net/doc/d73636353.html,上下载WINPCAP SDK -WpdPack,WinPcap SDk里面包含库文件,头文件,文档文件和一些例子。解压到一个指定的目录。解压缩后把Include目录添加到IDE的包含文件中(VC6.0 Tools->Option->Directory; VS 2003/2005 工具->选项->项目和解决方案/项目->VC++目录); lib目录添加为新的库文件目录(VC6.0 Tools->Option->Directory; VS 2003/2005 工具->选项->项目和解决方案/项目->VC++目录)如下图所示。

2> 如果一个源文件使用了WinPcap提供的库函数,那么就需要在该文件开始的位置添加pcap.h包含文件(或者在引用的文件中),即#include “pcap.h” 也许会出现下面的错误: fatal error C1083: 无法打开包括文件:“pcap.h”: No such file or directory 这个错误表明找不到pcap.h文件,这个头文件在驱动程序安装完成后也是没有的,它是开发包里面的一个头文件,所以,如果要运行程序还需要到官方网站上去下载WinPcap SDK,并按步骤1添加到项目中。 3> 在程序中添加wpcap.lib。如果出现下面错误 error LNK2019: 无法解析的外部符号_pcap_findalldevs_ex,该符号在函数XXX 中被引用,如果发生上面的错误就表明缺少库文件,需要添加wpcap.lib到工程中(VC6.0 Project->Settings->Link->Object/library modules; VS 2003/2005 项目->添加现有项->所有文件)如下图所示:

WinPcap开发-零基础知识入门基础

WinPcap开发(一):零基础入门 *原创作者:追影人 0×00 前言 网络编程在网络安全方面具有举足轻重的作用,如何快捷高效的监听、分析、构造网络流量,成为很多安全从业者需要解决的重点问题。而winpcap这一免费开源项目恰好可以为win32应用程序提供访问网络底层的能力,所以其成为了相关网络编程的首选开发工具。 0×01 winpcap是什么? winpcap(windows packet capture)是windows平台下一个免费的网络访问系统,可用于windows系统下的网络编程。著名的wireshark便是基于winpcap开发的,大家在安装wireshark中可以看到winpcap驱动程序的安装过程。 有关winpcap的介绍网络上很多,百科里面介绍的也很详细,我就不再copy了。需要注意的一点是,winpcap并不是一个简单的library,而是一个针对Win32平台上的抓包和网络分析的一个架构,它包括一个核心态的包过滤器,一个底层的动态链接库(packet.dll)和一个高层的不依赖于系统的库(wpcap.dll)。所以它只能“嗅探”到物理线路上的数据包,而不具备拦截的能力,因此不适用于个人防火墙等项目。 0×02 你需要准备些什么?

本系列文章主要带大家认识和了解如何利用winpcap网络编程技术进行网络的协议分析、流量统计及网络探测扫描等,这里我们并不会去深硬的解读相关源代码,而是以轻松的方式结合实验来对相关原理进行深入理解。在本系列文章中,笔者从简到难,简明介绍winpcap架构原理、相关环境搭建及快速编写核心代码。但是在开始前,读者需要有一些相关基础:了解网络协议相关基础知识,掌握一门winpc ap开发库支持的编程语言,自己能动手实践编写一些例子。Winpcap提供的开发接口原生是c语言的,不过热心肠的程序猿们已经为其他语言的使用提供了封装,比如java、.net、python,好像连易语言都有。本系列文章将使用c语言来进行各种实验,有兴趣的读者可以将其转换成自己熟悉的语言来动手实践。 0×03 你能学到什么? 有关winpcap开发的文章在网上很容易找到,但是更多的都是对于代码的讲解,笔者在本文尽量系统性的从原理层面结合各个应用场景来介绍相关知识:

工作中最常用的excel函数公式大全

工作中最常用的e x c e l函 数公式大全 -标准化文件发布号:(9556-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII

工作中最常用的excel函数公式大全,帮你整理齐了,拿来即用 一、数字处理 1、取绝对值 =ABS(数字) 2、取整 =INT(数字) 3、四舍五入 =ROUND(数字,小数位数) 二、判断公式 1、把公式产生的错误值显示为空 公式:C2 =IFERROR(A2/B2,"") 说明:如果是错误值则显示为空,否则正常显示。 2、IF多条件判断返回值 公式:C2 =IF(AND(A2<500,B2="未到期"),"补款","")

说明:两个条件同时成立用AND,任一个成立用OR函数。 三、统计公式 1、统计两个表格重复的内容 公式:B2 =COUNTIF(Sheet15!A:A,A2) 说明:如果返回值大于0说明在另一个表中存在,0则不存在。 2、统计不重复的总人数 公式:C2 =SUMPRODUCT(1/COUNTIF(A2:A8,A2:A8))

说明:用COUNTIF统计出每人的出现次数,用1除的方式把出现次数变成分母,然后相加。 四、求和公式 1、隔列求和 公式:H3 =SUMIF($A$2:$G$2,H$2,A3:G3) 或 =SUMPRODUCT((MOD(COLUMN(B3:G3),2)=0)*B3:G3) 说明:如果标题行没有规则用第2个公式 2、单条件求和 公式:F2

=SUMIF(A:A,E2,C:C) 说明:SUM IF函数的基本用法 3、单条件模糊求和 公式:详见下图 说明:如果需要进行模糊求和,就需要掌握通配符的使用,其中星号是表示任意多个字符,如"*A*"就表示a前和后有任意多个字符,即包含A。 4、多条件模糊求和 公式:C11

WinPcap编程

WinPcap编程 WinPcap是一个开源的、运行于Win32平台下的体系结构,它的主要功能是进行数据包捕获和网络分析。它允许应用程序通过协议栈捕获和传输网络数据包,也包括内核级别的数据包过滤、网络静态引擎和支持远程数据包捕获等有用的功能。 WinPcap由两部分组成: 1. 驱动程序: 扩展操作系统功能提供低层次的网络访问 2. 动态链接库:运行在Win32平台上的应用程序可以非常方便地访问网络低层次的数据。Ethereal是大名鼎鼎的捕获数据包专业软件,它的运行是在WinPcap的支持之下的,如果没有安装WinPcap,Ethereal也无法正常捕获数据包。 在正式WinPcap编程之前,要配置运行环境。 Win32 平台下WinPcap应用程序需要以下四个动态链接库才能正常运行: 这四个动态链接库在WinPcap驱动程序里。 如果应用程序出现一下提示,那就是没有安装驱动程序的原因了。 被过滤广告 也可以不安装WinPcap驱动程序。但是需要把上面提到的四个动态链接库文件拷贝到系统分区/WINDOWS/system32目录下 或者 接下来配置编程环境。 如果一个源文件使用了WinPcap提供的库函数,那么就需要在该文件开始的位置添加包含文件(或者在引用的文件中),即#include “” 也许会出现下面的错误: fatal error C1083: 无法打开包括文件:“”: No such file or directory 这个错误表明找不到文件 这个头文件在驱动程序安装完成后也是没有的,它是开发包里面的一个头文件 所以,如果要运行程序还需要到官方网站上去下载WinPcap SDK―WpdPack WinPcap SDk里面包含库文件,头文件,文档文件和一些例子。 解压缩后把Include目录添加到IDE的包含文件中( Tools->Option->Directory; VS 2003/2005 工具->选项->项目和解决方案/项目->VC++目录) error LNK2019: 无法解析的外部符号_pcap_findalldevs_ex,该符号在函数XXX 中被引用 如果发生上面的错误就表明缺少库文件,需要添加到工程中Project->Settings->Link->Object/library modules; VS 2003/2005 项目->添加现有项->所有文件) error C2065: “PCAP_SRC_IF_STRING”: 未声明的标识符 error C3861: “pcap_findalldevs_ex”: 找不到标识符 error C2065: “PCAP_OPENFLAG_PROMISCUOUS”: 未声明的标识符 error C3861: “pcap_open”: 找不到标识符 新的版本里WinPcap支持远程数据包获取,发生上面的错误很有可能是新的版本导致不兼容的问题,所以还应当添加一个头文件,即

工作中最常用的excel函数公式大全

工作中最常用的excel函数公式大全,帮你整理齐了,拿来即用 一、数字处理 1、取绝对值 =ABS(数字) 2、取整 =INT(数字) 3、四舍五入 =ROUND(数字,小数位数) 二、判断公式 1、把公式产生的错误值显示为空 公式:C2 =IFERROR(A2/B2,"") 说明:如果是错误值则显示为空,否则正常显示。 2、IF多条件判断返回值 公式:C2 =IF(AND(A2<500,B2="未到期"),"补款","")

说明:两个条件同时成立用AND,任一个成立用OR函数。 三、统计公式 1、统计两个表格重复的内容 公式:B2 =COUNTIF(Sheet15!A:A,A2) 说明:如果返回值大于0说明在另一个表中存在,0则不存在。 2、统计不重复的总人数 公式:C2

=SUMPRODUCT(1/COUNTIF(A2:A8,A2:A8)) 说明:用COUNTIF统计出每人的出现次数,用1除的方式把出现次数变成分母,然后相加。 四、求和公式 1、隔列求和 公式:H3 =SUMIF($A$2:$G$2,H$2,A3:G3) 或 =SUMPRODUCT((MOD(COLUMN(B3:G3),2)=0)*B3:G3) 说明:如果标题行没有规则用第2个公式 2、单条件求和

公式:F2 =SUMIF(A:A,E2,C:C) 说明:SUM IF函数的基本用法 3、单条件模糊求和 公式:详见下图 说明:如果需要进行模糊求和,就需要掌握通配符的使用,其中星号是表示任意多个字符,如"*A*"就表示a前和后有任意多个字符,即包含A。

4、多条件模糊求和 公式:C11 =SUMIFS(C2:C7,A2:A7,A11&"*",B2:B7,B11) 说明:在sumifs中可以使用通配符* 5、多表相同位置求和 公式:b2 =SUM(Sheet1:Sheet19!B2) 说明:在表中间删除或添加表后,公式结果会自动更新。 6、按日期和产品求和 公式:F2

WinpCap 编写抓包程序

利用WinpCap 编写抓包程序 网友:yeahilly 发布于:2008.05.20 11:12(共有条评论) 查看评论| 我要评论 WinpCap是一个公开的免费的抓包驱动加开发包,利用它,可以大大缩短我们的开发周期。 首先,先枚举系统中的所有网卡: /* 获取设备列表*/ if (pcap_findalldevs(&alldevs, errbuf) == -1) { fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf); exit(1); } /* 数据列表*/ for(d=alldevs; d; d=d->next) { printf("%d. %s", ++i, d->name); if (d->description) printf(" (%s)\n", d->description); else printf(" (No description available)\n"); } 然后选择网卡,然后设备。 if ( (adhandle= pcap_open_live(d->name, //设备名 65536, // 捕捉完整的数据包 1 , // 混在模式 1, // 读入超时

errbuf // 错误缓冲 ) ) == NULL) { printf("Unable to open the adapter"); pcap_freealldevs(alldevs); return; } 打开设备之后,我们就可以利用adhandle句柄来正式抓包了,先新建一个回调函数,形如 void packet_handler(u_char* packets,const struct pcap_pkthdr *header,const u_char *data) { } 然 后调用pcap_loop(adhandle, 0, packet_handler, NULL);pcap_loop的最后一个参数和packet_handler的packets参数是对应的,用于在函数间传递数据。WinpCap每收 到一个包就自动调用packet_handler函数,将包的内容作为data参数,我们对data作强制类型转化就可以得到数据包各部分的内容。 事实上,WinpCap开发包除了可以用回调函数抓包外,还可以用非回调的方法。在得到adhandle后不调用pcap_loop,而用下面的方法:while(1) { res = pcap_next_ex(adhandle,&header,&data); if(res==0) { Sleep(100); continue; } } 用pcap_next_ex读取数据包内容,至于if(res==0)这一段是为了防止没数据包到达时重复循环。

winpcap环境部署(VC6.0出现找不到“pcap.h_'”文件解决方法)

Winpcap 环境部署 (VC6.0出现“pcap.h': No such file or directory”问题解决方法)Winpcap简介及Winpcap安装包和开发包下载地址: Winpcap是一个强大的网络开发库,可以实现许多功能:获取可用的网络适配器;获取指定适配器信息(比如名称和描述信息);捕获指定网卡的数据封包;发送数据封包;过滤捕获的包以获取特定包等。 首先到https://www.360docs.net/doc/d73636353.html,/install/default.htm下载安装winpcap 驱动和DLL组件。 注意下图被红线圈起来的地方,即使下载地址,点击进入 然后到https://www.360docs.net/doc/d73636353.html,/devel.htm.下载winpcap开发包,解压到指定目录,这里我解压到C:\WpdPack_4_0_2\WpdPack,可以看到里面包含了:Lib,Include,文档

和示例程序。 把安装包和开发包下载下来后,执行安装包,这样你的机子就能运行winpcap程序了,解压开发包里面有 具体解决方法: 这里的include和lib文件夹里的东西因为vc6.0里没有,所以编译一些程序时我们要手动添加。如果出现fatal error C1083: Cannot open include file: 'pcap.h': No such file or directory这个问题,就需要添加了。 下面是具体添加步骤: 第一步:

点菜单栏上的“工具”,再点击下拉菜单中的“选项”弹出“选项”对话框 点“目录”在“目录【S】”的下面选择include files然后按底下的添加符号,把你写的winpcap 开发包解压到的具体路径添加进去,如上图我的路径是

工作中最常用的excel函数公式大全

工作中最常用的excel函数公式大全 一、数字处理 1、取绝对值=ABS(数字) 2、取整=INT(数字) 3、四舍五入=ROUND(数字,小数位数) 二、判断公式 1、把公式产生的错误值显示为空 公式:C2=IFERROR(A2/B2,"") 说明:如果是错误值则显示为空,否则正常显示。 2、IF多条件判断返回值公式: C2=IF(AND(A2<500,B2="未到期"),"补款","") 说明:两个条件同时成立用AND,任一个成立用OR函数。

1、统计两个表格重复的内容 公式:B2=COUNTIF(Sheet15!A:A,A2) 说明:如果返回值大于0说明在另一个表中存在,0则不存在。 2、统计不重复的总人数 公式:C2=SUMPRODUCT(1/COUNTIF(A2:A8,A2:A8)) 说明:用COUNTIF统计出每人的出现次数,用1除的方式把出现次数变成分母,然后相加。

1、隔列求和 公式:H3=SUMIF($A$2:$G$2,H$2,A3:G3) 或=SUMPRODUCT((MOD(COLUMN(B3:G3),2)=0)*B3:G3) 说明:如果标题行没有规则用第2个公式 2、单条件求和 公式:F2=SUMIF(A:A,E2,C:C) 说明:SUMIF函数的基本用法

3、单条件模糊求和 公式:详见下图 说明:如果需要进行模糊求和,就需要掌握通配符的使用,其中星号是表示任意多个字符,如"*A*"就表示a前和后有任意多个字符,即包含A。 4、多条件模糊求和 公式:C11=SUMIFS(C2:C7,A2:A7,A11&"*",B2:B7,B11) 说明:在sumifs中可以使用通配符*

EXCEL中常用函数及使用方法

EXCEL中常用函数及使用方法 Excel函数一共有11类:数据库函数、日期与时间函数、工程函数、财务函数、信息函数、逻辑函数、查询和引用函数、数学和三角函数、统计函数、文本函数以及用户自定义函数。 1.数据库函数 当需要分析数据清单中的数值是否符合特定条件时,可以使用数据库工作表函数。例如,在一个包含销售信息的数据清单中,可以计算出所有销售数值大于1,000 且小于2,500 的行或记录的总数。Microsoft Excel 共有12 个工作表函数用于对存储在数据清单或数据库中的数据进行分析,这些函数的统一名称为Dfunctions,也称为D 函数,每个函数均有三个相同的参数:database、field 和criteria。这些参数指向数据库函数所使用的工作表区域。其中参数database 为工作表上包含数据清单的区域。参数field 为需要汇总的列的标志。参数criteria 为工作表上包含指定条件的区域。 2.日期与时间函数 通过日期与时间函数,可以在公式中分析和处理日期值和时间值。 3.工程函数 工程工作表函数用于工程分析。这类函数中的大多数可分为三种类型:对复数进行处理的函数、在不同的数字系统(如十进制系统、十六进制系统、八进制系统和二进制系统)间进行数值转换的函数、在不同的度量系统中进行数值转换的函数。 4.财务函数 财务函数可以进行一般的财务计算,如确定贷款的支付额、投资的未来值或净现值,以及债券或息票的价值。财务函数中常见的参数: 未来值(fv)--在所有付款发生后的投资或贷款的价值。 期间数(nper)--投资的总支付期间数。 付款(pmt)--对于一项投资或贷款的定期支付数额。 现值(pv)--在投资期初的投资或贷款的价值。例如,贷款的现值为所借入的本金数额。 利率(rate)--投资或贷款的利率或贴现率。 类型(type)--付款期间内进行支付的间隔,如在月初或月末。 5.信息函数 可以使用信息工作表函数确定存储在单元格中的数据的类型。信息函数包含一组称为IS 的工作表函数,在单元格满足条件时返回TRUE。例如,如果单元格包含一个偶数值,ISEVEN 工作表函数返回TRUE。如果需要确定某个单元格区域中是否存在空白单元格,可以使用COUNTBLANK 工作表函数对单元格区域中的空白单元格进行计数,或者使用ISBLANK 工作表函数确定区域中的某个单元格是否为空。 6.逻辑函数 使用逻辑函数可以进行真假值判断,或者进行复合检验。例如,可以使用IF 函数确定条件为真还是假,并由此返回不同的数值。

基于WinPcap的网络数据包捕获与分析

基于WinPcap的网络数据包捕获与分析 一、WinPcap介绍 1.WinPcap简介 WinPcap是一个在Windows操作系统下的免费、公开的用于直接访问网络的开发工具包(编程API)。大多数Windows网络应用程序都是通过Winsock API(Windows套接口)这类高级编程接口访问网络的。这种方法允许在网络上进行简单的数据传送,因为操作系统的TCP/IP协议栈实现软件会处理底层细节(协议操作、流程重组等等),并提供一个类似于读写文件的函数接口。 然而,有时候“简便方法”并不能满足实际需要。有些程序希望绕过TCP/IP协议栈,直接处理底层网络中的通信数据,它们需要对网络进行底层进行直接访问,即在没有类似协议栈(TCP/IP协议栈)的实体介入条件下对网络进行原始访问。 基于Winsock API编程,应用程序是通过调用操作系统提供的编程接口访问TCP/IP协议栈实现网络通信的。基于WinPcap编程,网络程序实际上是绕开操作系统的TCP/IP协议栈直接通过底层网络发送数据,因此,网络程序可以实现一些更低级、更灵活的功能。 2.WinPcap的组成与结构 如图 1.1,WinPcap由一个数据包监听设备驱动程序(NPF)、一个底层的动态连接库(packet.dll)和一个高层的不依赖于操作系统的静态库(wpcap.dll)共三个部分构成。这里,NPF在操作系统的内核级,packet.dll、wpcap.dll在用户级。 1)数据包监听设备驱动程序Array技术实现上,为了实现抓包,系统必须绕过操作系统 的协议栈来访问在网络上传输的原始数据包(raw packet)。这就要求WinPcap的一部分运行在操作系统核心 内部,直接与网络接口驱动交互。由于这个部分是系统依 赖(system dependent)的,在Winpcap的解决方案中它被 视为是一个设备驱动,称作NPF(Netgroup Packet Filter)。 图1.1 WinPcap的组成和结构

EXCEL常用函数大全

EXCEL常用函数大全(做表不求人!) 2013-12-03 00:00 我们在使用Excel制作表格整理数据的时候,常常要用到它的函数功能来自动统计处理表格中的数据。这里整理了Excel中使用频率最高的函数的功能、使用方法,以及这些函数在实际应用中的实例剖析,并配有详细的介绍。 1、ABS函数 函数名称:ABS 主要功能:求出相应数字的绝对值。 使用格式:ABS(number) 参数说明:number代表需要求绝对值的数值或引用的单元格。 应用举例:如果在B2单元格中输入公式:=ABS(A2),则在A2单元格中无论输入正数(如100)还是负数(如-100),B2中均显示出正数(如100)。 特别提醒:如果number参数不是数值,而是一些字符(如A等),则B2中返回错误值“#VALUE!”。

2、AND函数 函数名称:AND 主要功能:返回逻辑值:如果所有参数值均为逻辑“真(TRUE)”,则返回逻辑“真(TRUE)”,反之返回逻辑“假(FALSE)”。 使用格式:AND(logical1,logical2, ...) 参数说明:Logical1,Logical2,Logical3……:表示待测试的条件值或表达式,最多这30个。 应用举例:在C5单元格输入公式:=AND(A5>=60,B5>=60),确认。如果C5中返回TRUE,说明A5和B5中的数值均大于等于60,如果返回FALSE,说明A5和B5中的数值至少有一个小于60。 国美提醒:如果指定的逻辑条件参数中包含非逻辑值时,则函数返回错误值“#VALUE!”或“#NAME”。 3、AVERAGE函数 函数名称:AVERAGE 主要功能:求出所有参数的算术平均值。

基于WinPcap的网络分析研究与实现

基于WinPcap的网络分析研究与实现 摘要近几年,我国经济发展迅速,各个领域的事业都趋于完善。在网络信息技术的不断发展下,通过对WinPcap的应用,真正实现了Windows下网络数据包的捕获技术,下文将详细阐述IP、Tcp等等协议的解析过程。网络数据的储存通过msspl来实现,进而建立系统硬件运行环境。对局域网,通过测试实现了全局监控。 关键词信息技术;网络分析;分析与研究;运行环境;数据包;源代码 1 应用环境 网络监控系统承载介质中,硬件与软件监控系统共同构成网络监控。网络监控系统标准功能是对局域网中的违规行为进行记录与监控。在国外一些发达国家,有两款软件Ethereal与Sniffer,后者主要任务就是给网管及时提供网络监视情况与数据包捕以及故障分析等内容,这样能方便网管对现场进行迅速的故障处理以及诊断能力。与此同时,还能使用户得到更好的网络管理以及故障分析功能。前者作为一种可以捕获数据包,并且将这个数据包的信息显示出来,这样的一款网络数据包分析软件,在通用许可证的保障范围内,其数据包分析软件用户能免费得到。除此之外,还可以得到其源代码,并且也能够根据自身的需要来将其源代码进行修改。现阶段,Wireshark是全球应用最多的一种网络数据包分析软件[1]。 2 Win Pcap研究 抓包的过程,是通过用户级的程序接口来完成的。在这些接口中,用户程序能够利用内核驱动提供的高级特性。作为WinPcap所提供的2个库,PACKET 提供一个底层api,应用这个库能够访问驱动的函数。这些函数能够实现来抓包时,网络硬件与操作系统独立。NDIS作为一种管理网络适配器的驱动程序和协议驱动之间的规范。其还是一个可以让协议驱动发生与接收数据包并且不用看特定的适配器或者特定的Win32操作系统的封装。捕获数据包是通过NPF来实现的。在进行数据包的捕获时,数据包的监控任务是一个网络接口,进而应用程序才能够完整抹除这部分数据包。Bpf是一种虚拟的处理器,其能够编写一个用户过滤程序,过滤系统的基础就是这里。 2.1 NDIS驱动器接口标准 在传输层还有网络层以及数据链路层之间,是NDIS。其规范了网卡驱动与应用层协议驱动的通信接口。这与物理层没有关联。这样一来,就使上层协议驱动程序与底层任意类型的网卡进行通信。在进行网络驱动开发时,就不用研究操作系统的内核以及其他的驱动程序接口的相关事宜。将NDIS函数调用起来就可以,如此一来使操作系统的烦琐通信分离在网络驱动程序中,变得更加容易编写起来。除此之外,通过对NDIS的应用,使其封装性能够只应用在一层驱动的设

EXCEL电子表格中四个常用函数的用法

EXCEL电子表格中四个常用函数的用法 (2010-01-16 09:59:27) 转载▼ 分类:Excel学习 标签: 杂谈 EXCEL电子表格中四个常用函数的用 法 现在介绍四个常用函数的用法:COUNT(用于计算单元格区域中数字值的个数)、COUNTA(用于计算单元格区域中非空白单元格的个数)、COUNTBLANK(用于计算单元格区域中空白单元格的个数)、COUNTIF(用于计算符合一定条件的COUNTBLANK单元格个数)。 结合例子将具体介绍:如何利用函数COUNTA统计本班应考人数(总人数)、利用函数COUNT统计实际参加考试人数、利用函数COUNTBLANK统计各科缺考人数、利用函数COUNTIF统计各科各分数段的人数。首先,在上期最后形成的表格的最后添加一些字段名和合并一些单元格,见图1。 一、利用函数COUNTA统计本班的应考人数(总人数) 因为函数COUNTA可以计算出非空单元格的个数,所以我们在利用此函数时,选取本班学生名字所在单元格区域(B3~B12)作为统计对象,就可计算出本班的应考人数(总人数)。 1.选取存放本班总人数的单元格,此单元格是一个经过合并后的大单元格(C18~G18); 2.选取函数;单击菜单“插入/函数”或工具栏中的函数按钮f*,打开“粘贴函数”对话框,在“函数分类”列表中选择函数类别“统计”,然后在“函数名”列表中选择需要的函数“COUNTA”,按“确定”按钮退出“粘贴函数”对话框。 3.选取需要统计的单元格区域;在打开的“函数向导”对话框中,选取需要计算的单元格区域B3~B13,按下回车键以确认选取;“函数向导”对话框图再次出现在屏幕上,按下“确定”按钮,就可以看到计算出来本班的应考人数(总人数)了。

深度剖析WinPcap之(二)

深度剖析WinPcap之(二)——网络分析与嗅探的基础知识 工欲善其事,必先利其器。为了有利于深入了解WinPcap的内部机制,我们需要对网络分析与嗅探、网络模型与硬件基础作必要了解。 1.1 什么是网络分析与嗅探 网络分析(Network analysis) (也称为网络流量分析、协议分析、嗅探、数据包分析、窃听,等等)就是通过捕获网络流量并深入检查,来决定网络中发生了什么情况的过程。一个网络分析器对通用协议的数据包进行解码,并以可读的格式显示网络流量的内容。嗅探器(sniffer)是一种监视网络上所传输数据的程序。未经授权的嗅探器对网络安全构成威胁,因为它们很难被发现并且可在任何地方被插入,这使得它们成为黑客最喜欢使用的一种工具。 网络分析器之间的差别,在于诸如支持能解码的协议数量、用户接口、图形化与统计能力等主要特性的不同。其它的差别还包括了推理能力(比如,专家分析特性)与数据包解码的质量。尽管几个不同的网络分析器针对同一个协议进行解码,但在实际环境中可能其中的一些会比另外一些工作得更好。 图2-1为Wireshark网络分析器的显示窗口。一个典型的网络分析器用三个窗格显示所捕获的网络流量:

图2-1 Wireshark网络分析器的显示窗口 概要该窗格对所捕获的内容显示一行概要。包含日期、时间、源地址、目标地址、与最高层协议的名字与信息字段。 详情该窗格提供所捕获数据包所包含的每层细节信息(采用树形结构)。 数据该窗格用十六进制与文本格式显示原始的被捕获数据。 一个网络分析器是由硬件与软件共同组成。可以是一个带有特定软件的单独硬件设备,或者是安装在台式电脑或膝上电脑之上的一个软件。尽管每种产品之间具有差别,但都是由下列五个基本部分组成。 硬件多数网络分析器是基于软件的,并工作于标准的操作系统与网卡之上。然而,一些硬件网络分析器提供额外的功能,诸如分析硬件故障(比如循环冗余纠错(CRC)错误、电压问题、网线问题、抖动、逾限(jabber)、协商错误等等)。一些网络分析器仅支持以太网或无线网适配器,而其它的可支持多重适配器,并允许用户定制它们的配置。依据实际情况,可能也需要一个集线器或一个网线探针(cable tap)连接已有的网线。

WINPCAP编程环境设置

因为项目需要,而且以前从没用过Winpcap,所以不得不从头学起。以前虽然看过winsocket,但是,Winpcap的第一个程序,我花了很长时间才编译通过。对于初学者来说,不太好做的可能是编译程序之前应该做什么事。我就大体说一下我的过程。 首先先大体介绍下Winpcap。 winpcap(windows packet capture)windows平台下一个免费,公共的网络访问系统。开发winpcap这个项目的目的在于为win32应用程序提供访问网络底层的能力。它提供了以下的各项功能: 1> 捕获原始数据包,包括在共享网络上各主机发送/接收的以及相互之间交换的数据包; 2> 在数据包发往应用程序之前,按照自定义的规则将某些特殊的数据包过滤掉; 3> 在网络上发送原始的数据包; 4> 收集网络通信过程中的统计信息。 具体介绍参见https://www.360docs.net/doc/d73636353.html,/view/696423.htm这里有Winpcap的详细介绍。 下面说一下你在编译Winpcap之前要做的事情。 1 下载Winpcap安装包,地址https://www.360docs.net/doc/d73636353.html,/install/default.htm。 2 然后到https://www.360docs.net/doc/d73636353.html,/devel.htm下载WinPcap developer's pack包,解压,里面有配置好的例子和include library。 3 在VC6.0菜单中,点Tolls->Options->Directories中的include files 和library files中添加包里面的include和library。 然后我们就来编写一个最简单的Winpcap程序——获取已连接的网络适配器列表。 首先新建一个工程,选择Win32 Console Application,工程名我们设为winpcap.然后这这个工程中新建一个C++源文件,名字winpcap。在里面填写如下代码: #include main( )

工作中最常用的excel函数公式大全(0001)

工作中最常用的excel函数公式大全

工作中最常用的excel函数公式大全 一、数字处理 1、取绝对值 =ABS(数字) 2、取整 =INT(数字) 3、四舍五入 =ROUND(数字,小数位数) 二、判断公式 1、把公式产生的错误值显示为空 公式:C2 =IFERROR(A2/B2,"") 说明:如果是错误值则显示为空,否则正常显示。

2、IF多条件判断返回值 公式:C2 =IF(AND(A2<500,B2="未到期"),"补款","") 说明:两个条件同时成立用AND,任一个成立用OR函数。 三、统计公式 1、统计两个表格重复的内容 公式:B2 =COUNTIF(Sheet15!A:A,A2) 说明:如果返回值大于0说明在另一个表中存在,0则不存在。

2、统计不重复的总人数 公式:C2 =SUMPRODUCT(1/COUNTIF(A2:A8,A2:A8)) 说明:用COUNTIF统计出每人的出现次数,用1除的方式把出现次数变成分母,然后相加。 四、求和公式

1、隔列求和 公式:H3 =SUMIF($A$2:$G$2,H$2,A3:G3) 或 =SUMPRODUCT((MOD(COLUMN(B3:G3),2)=0)*B3:G3)说明:如果标题行没有规则用第2个公式 2、单条件求和 公式:F2 =SUMIF(A:A,E2,C:C) 说明:SUMIF函数的基本用法

3、单条件模糊求和 公式:详见下图 说明:如果需要进行模糊求和,就需要掌握通配符的使用,其中星号是表示任意多个字符,如"*A*"就表示a前和后有任意多个字符,即包含A。

利用Winpcap捕获发送数据包

利用winpcap捕获数据包、发送数据包 在上一章里面,我们学会了如何获取适配器的相关配置信息,在这一章里面,我们将继续更有意义的内容,就是捕获和发送数据包。 3.1 winpcap捕获数据包流程与相关函数 计算机是通过网卡和网络中其他的主机进行通信的,网卡相当于数据包进出的大门,我们平时讲的数据包的捕获相当于大门的门卫在检查进出的行人一样。在网络基础我们学习过,数据包的发送是一个封装的过程,而数据包的接收则是解封装的过程,但是封装和解封装都是在OS内核来完成的,一般的应用程序没办法获取数据包原始的内容,而Winpcap却能提供这样的功能,在数据链路层捕获数据包,提供最原始的信息。其中Winpcap捕获数据的原理在第一章已经介绍过了,大家可以回顾下。 另外,数据捕获只能捕获通过本主机网卡的数据,没法捕获其他主机上网卡的数据。 下面先看看Winpcap捕获数据时的工作流程。 数据捕获的流程 1. 发现网络设备的函数(find_dev_ex)以前已经介绍过了。 2.打开网卡的函数 打开设备的函数是pcap_open()。下面是参数snaplen, flags 和to_ms 的解释说明 pcap_t* pcap_open ( const char * source, // 指定的网卡的名称 int snaplen, // 帧的长度 int flags, // 网卡捕获的模式 int read_timeout, // 超时 struct pcap_rmtauth * auth, // 是否要求认证 char * errbuf // 错误信息存储 ) snaplen 制定要捕获数据包中的哪些部分。在一些操作系统中(比如xBSD 和Win32),驱动可以被配置成只捕获数据包的初始化部分:这样可以减少应用程序间复制数据的量,从而提高捕获效率。本例中,我们将值定为65535,它比我们能遇到的最大的MTU还要大。因此,我们确信我们总能收到完整的数据包。 flags: 最最重要的flag是用来指示适配器是否要被设置成混杂模式。一般情况下,适配器只接收发给它自己的数据包,而那些在其他机器之间通讯的数据包,将会被丢弃。相反,如果适配器是混杂模式,那么不管这个数据包是不是发给我的,我都会去捕获。也就是说,

开发基于winPcap的嗅探器.

网络安全课程设计报告(2015-2016 第一学期) 题目开发基于winPcap的嗅探器 专业 学号姓名 指导教师 日期

评 分分 细 评分项优秀良好中等差遵守机房规章制度 实验原理分析与设计 课题功能实现情况 设计验收与答辩 课程设计报告书写 简 短 评 语 教师签名: 年月日评 分 等 级 备 注

开发基于winPcap的嗅探器 一、实验目的 开发一个winpcap的嗅探器,用它来捕获所有流经网卡的数据包,并进行分析。二、实验环境 操作系统:Windows 2000/XP 编程环境:Visual c++6.0 附加库:Winpcap 三、实验内容和要求 内容:所开发的程序可以输出本机所有网卡的信息和捕获流经网卡的数据包并能够过滤出IP、TCP、UDP、ICM P等数据包 要求:掌握基于WinPcap的网络编程模式。 理解并能应用WinPcap设计并实现网络数据包的捕获与解析。 四、实验原理和步骤 原理:我们所要做的嗅探器是一种常用的网络数据收集软件,它是在广播式网络环境下利用计算机网络接口截获目的地为其它计算机的数据报文的一种工具。 在以太网中,信息是以明文的形式在网络上传输 ,当将网络适配器设置为混杂模式时,由于采用以太网广播信道争用的方式,使得监听系统与正常通信的网络能够并联连接,并可以捕获任何一个在同一冲突域上传输的数据包。IEEE802.3标准的以太网采用的是持续CSMA的方式,正是由于以太网采用这种广播信道争用的方式,使得各个站点可以获得其他站点发送的数据。运用这一原理使信息捕获系统能够拦截我们所要的信息,这是捕获数据包的物理基础。 首先,抓包系统必须绕过操作系统的协议栈来访问在网络上传输的原始数据包,这就要求一部分运行在操作系统核心内部,直接与网络接口驱动交互。这个部分是系统依赖的,在Winpcap的解决方案里它被认为是一个设备驱动,称作NPF(Netgroup PacketFilter)。 Winpcap提供了两个不同的库:Packet.dll和Wpcap.dll。Wpcap.dll提供了更加友好、功能更加强大的函数调用。WinPcap的优势在于提供了一套标准的抓包接口,与libpcap兼容,可使得原来许多UNIX平台下的网络分析工具快速移植过来,便于开

相关文档
最新文档