当前位置:文档之家› 基于WinPcap的程序开发

基于WinPcap的程序开发

基于WinPcap的程序开发
基于WinPcap的程序开发

基于WinPcap的程序开发

一、WinPcap介绍

1、WinPcap简介

大多数Unix操作系统提供了一套允许应用程序直接与网络相互联系的系统调用。这些指令对于那些需要通过网络捕获连续的包数据而不用内核进行过多的干预的包捕获应用程序非常有用。在Windows 环境下,WinPcap就是这样一类工具。

WinPcap是一个在Windows操作系统下的免费、公开的用于直接访问网络的开发工具包(编程API)。大多数Windows网络应用程序都是通过Winsock API(Windows套接口)这类高级编程接口访问网络的。这种方法允许在网络上进行简单的数据传送,因为操作系统的TCP/IP协议栈实现软件会处理底层细节(协议操作、流程重组等等),并提供一个类似于读写文件的函数接口。

然而,有时候“简便方法”并不能满足实际需要。有些程序希望绕过TCP/IP协议栈,直接处理底层网络中的通信数据,它们需要对网络进行底层进行直接访问,即在没有类似协议栈(TCP/IP协议栈)的实体介入条件下对网络进行原始访问。

基于Winsock API编程,应用程序是通过调用操作系统提供的编程接口访问TCP/IP协议栈实现网络通信的。基于WinPcap编程,网

络程序实际上是绕开操作系统的TCP/IP协议栈直接通过底层网络发送数据,因此,网络程序可以实现一些更低级、更灵活的功能。

2、WinPcap的目的和用途

开发WinPcap的目的是为Win32应用程序提供一种直接访问底层网络的能力。通过WinPcap,网络应用程序可以实现如下功能:

1)捕获原始数据包,包括发送到本主机以及在共享网络上的数据

包。

2)数据过滤。在将数据包发送给应用程序之前按照用户的规定对

捕获的数据包进行过滤。

3)发送原始数据包。向网络发送原始数据包。

4)数据包统计。对网络通信进行统计。

上述功能都通过一个设备驱动(这个驱动程序安装在Win32内核的网络部分)和一组动态连接库(DLL)获得。所有这些功能部件都通过一个强大的编程接口来实现,应用程序能易于开发并且能移植到各种操作系统中。

3、基于WinPcap可以开发的网络应用程序

基于WinPcap可以开发很多网络应用程序,典型的包括:

1)网络和协议分析软件

2)网络监听软件

3)网络通信量记录软件

4)网络数据生成软件

5)用户机网桥和路由器

6)网络入侵探测系统

7)网络扫描软件

8)网络安全工具

4、WinPcap的局限性

WinPcap可以独立于主机的协议(如TCP/IP协议)进行接收和发送数据包。这意味着WinPcap不能阻塞、过滤或处理本机上其它程序产生的数据。它仅仅能嗅探在网线上传输的数据包。因此,WinPcap 不能在traffic shapers(即流量整形,它是是一种主动调整流量输出速率的措施。一个典型应用是基于下游网络结点的tp 指标来控制本地流量的输出。)、QoS schedulers和个人防火墙这类应用程序中使用。

5、WinPcap的开发和运行环境

目前,winpcap主要的开发和运行环境是windows NT/2000/XP。由于winpcap的用户中只有很小一部分使用windows 95/98/Me,并且微软也已经放弃了对win9x的开发和支持。实际上,winpcap中的面

向9x系统的概念和NT系统的非常相似,只是在某些实现上有点差异,比如说9x只支持ANSI编码,而NT系统则提倡使用Unicode 编码。

简单来讲,WinPcap典型的开发和运行环境是windows NT/2000/XP。当然,早期的WinPcap也支持windows 95/98/Me,但是,我们不推荐在windows 95/98/Me下开发和运行基于WinPcap的网络应用。

二、WinPcap的体系结构分析

1、WinPcap的组成与结构

如图2.1,WinPcap由一个数据包监听设备驱动程序(NPF)、一个底层的动态连接库(packet.dll)和一个高层的不依赖于操作系统的静态库(wpcap.dll)共三个部分构成。这里,NPF在操作系统的内核级,packet.dll、wpcap.dll在用户级。

1)数据包监听设备驱动程序Array技术实现上,为了实现抓包,系统必须

绕过操作系统的协议栈来访问在网络上传

输的原始数据包(raw packet)。这就要求

WinPcap的一部分运行在操作系统核心内

部,直接与网络接口驱动交互。由于这个部

分是系统依赖(system dependent)的,在

图2.1 WinPcap的组成和结构

Winpcap的解决方案中它被视为是一个设备驱动,称作NPF(Netgroup Packet Filter)。Winpcap开发小组针对Windows95,Windows98,WindowsME,Windows NT 4,Windows2000和WindowsXP提供了不同版本的驱动(在Windows95/98/ME中是VXD文件,在WindowsNT/2000中是SYS文件)。这些驱动不仅提供了基本的特性(例如抓包、发送原始数据包——注入数据包),还有更高级的特性(例如可编程的过滤器系统和监视引擎)。前者可以被用来约束一个抓包会话只针对网络通信中的一个子集(例如,只捕获特殊主机产生的ftp通信数据包),后者提供了一个强大而简单的统计网络通信量的机制(例如,获得网络负载或两个主机间的数据交换量)。

概括地讲,数据包监听设备驱动程序直接从数据链路层抓取网络数据包并过滤,将数据包不加修改地传递给运行在用户层的应用程序。它在不同的WINDOWS系统下是不同。数据包监听设备驱动程序支持BPF过滤机制,可以灵活地设置过滤规则。

2)底层的动态连接库(packet.dll)和高层静态库(wpcap.dll)为了方便编程,WinPcap必须提供一个编程接口(API),这就是WinPcap的底层的动态连接库(packet.dll)和高层静态库(wpcap.dll)。这里,packet.dll提供了一个底层API,伴随着一个独立于Microsoft 操作系统的编程接口,这些API可以直接用来访问驱动的函数;wpcap.dll导出了一组更强大的与libpcap一致的高层抓包函数库(capture primitives),这些函数使得数据包的捕获以一种与网络硬件和操作系统无关的方式进行。

底层动态链接库运行在用户层,它将应用程序和数据包监听设备驱动程序隔离开来,使得应用程序可以不加修改地在不同的WINDOWS系统上运行。高级的静态链接库和应用程序编译在一起,它使用低级动态链接库提供的服务,向应用程序提供完善的监听接口。

概括来讲,WinPcap包含了一个最优化的内核模式驱动——称作Netgroup Packet Filter(NPF),和一套与libpcap兼容的用户级函数库。WinPcap使Unix平台下的应用程序能方便的移植到Win32平台下,并且它能使一套很大的Unix函数库只需通过简单的重新编译就立刻在Win32平台下使用。而且,由于网络监听的重要性,WinPcap还为此提供了特殊的系统调用函数。

实际上,Windows环境下的WinPcap与Unix环境下的Berkeley Packet Filter(BPF)在体系架构上是基本一致的。在Unix环境下,程序员只需要了解Libpcap提供的编程接口即可,Libpcap将应用程序与操作系统内核之间的相互作用隐藏起来,提供了一套与用户程序联系的函数和强大的捕获数据包的抽象接口。在Windows环境下,程序员主要基于wpcap.dll提供的编程接口开发应用程序。当然,程序要也可以使用packet.dll、NPF提供的编程接口,只是后者提供的API 更加底层。

2、WinPcap 的技术细节

1)NPF 驱动

网络数据包过滤器(Netgroup Packet Filter ,简称NPF )是Winpcap 的核心部分,它是Winpcap 完成困难工作的核心组件。NPF 负责处理网络上传输的数据包,并向上层提供各种服务,包括数据包的捕获(capture )、发送(injection )和分析性能(analysis capabilities )。

2)NPF 和NDIS

NDIS (Network Driver Interface Specification )是Windows 环境下的一个定义网络适配器(或者说成是管理网络适配器的驱动程序)与协议驱动(例如TCP/IP 的实现)之间通信的规范,如图2.2。基于NDIS ,顶层应用(例如TCP/IP 协议)可以发送和接收网络(LAN 或W AN )上的数据包而不必关心特定的适配器硬件或特定的Win32操作系统版本。

NDIS 支持三种类型的网络驱动: ① 网络接口卡或NIC 驱动(Network interface card or NIC drivers )。NIC 驱动直接管理着网络接口卡(NIC )。NIC 驱动接下边与硬件连接,从上边表现为一个接口,该接口允许高层发送数据包到网络上,处理中断,重置

NIC ,停止NIC ,查询和设置驱动的运行特征。

NIC 驱动可以是小端口(miniport )或完全的NIC 驱动(full NIC driver )。

图2.2 NDIS 的作用和地位

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

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

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

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

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

3)NPF 在Windows 系统中的位置

如图2.3,NPF 是一个协议驱动。从性能方面来看,这不是最好的选择,但是它合理地独立于MAC 层并且有权使用原始通信(raw traffic )。可以看出,NPF 在NDIS 之上,它与TCP/IP 协议栈的实现在同一层次。因此,应用程序不通过

Winsock 也可以实现数据的发送和接受。

3、WinPcap 的基本原理

抓包是WinPcap 的基本功能,也

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

如图2.4,WinPcap 的NPF 抓包主要依靠两个组件。

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

图2.3 NPF 在Windows 系统中的位置

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

2)循环缓冲区(Buffer)。NPF的循环缓冲区用来保存数据包以免丢失(如果一个包符合过滤器的要求,就被复制到循环缓冲区)。一个保存在缓冲区中的数据包有一个头,它包含了一些主要的信息,例如时间戳和数据包的大小,注意:它不是协议头。另外,循环缓冲区以队列插入的方式来保存数据包,提高数据的存储效率。程序员可以以组的方式将数据包从NPF缓冲区拷贝到应用程序,这样就提高了性能,因为它降低了读的次数。如果一个数据包到来的时候缓冲区已经满了,那么该数据包将被丢弃,这时就发生了丢包现象。

3)Network Tap是一个用于探听网络中所有数据流的函数。

4)数据统计

如图2.4,为了提高数据处理的速度,WinPcap将统计和监听功能移到内核中,这样避免了将任何数据都传递给用户。WinPcap通过使用从NPF中得到的过滤器来执行一个内核级的可编统计模块,这使其变成一个强大的分级引擎,而不只是个简单的包过滤器。应用程

序可以构造这个模块来监听网络活动的任意方面(例如:网络负荷、两台主机间的流量、每秒web请求的次数等等),并在预定的时间间隔内接收内核传来的数据。

Buffer1Buffer2

图2.4 Wincap的内部结构和原理

统计模式避免了复制数据包并且执行0-copy机制(当包仍存放在NIC(网络接口卡)驱动的内存中时开始进行统计,随后丢弃这个包)。而且,环境转换的次数可以保持最低,这是因为结果通过一次系统调用就可以返回给用户。它不需要缓冲区(内核或用户),因此当监听开始时不用为它分配内存。可见,统计模式是一种很有效的网络监听方式,在高速网络中利用libpcap来工作也没任何问题。

WinPcap为程序员提供了一套系统调用和高层函数来进行网络监听,这使得已经知道libpcap API的程序员能很容易使用。

5)构造数据包

BPF和NPF都提供了构造包的函数,使用户可以将原始数据包发送到网络中。然而,Unix程序员一般不用libpcap提供的这些函数,因为在Unix平台上,应用程序可以使用原始套接字来发送伪造的数据包。在Windows环境下,只有Windows2000提供了原始套接字,而且非常有限。因此在Windows环境下,WinPcap就成为首选的构造数据包的函数库,它提供了一套标准稳定的函数。另外,NPF增加了一些新的函数,这些函数可以使数据包通过一次用户和内核模式之间的转换就发送几次。数据复制到内核中,然后通过调用一次NDIS 将包发送到网络中。

尽管WinPcap提供了一套新的函数来开发这些特性,但它没有提供那些强大的创建数据包的抽象函数,这需要通过其它现有的工具来实现。程序员可以利用著名的Libnet Packet Assembly Library的Windows版本实现,这个函数库增加了数据包结构层并在WinPcap 上构造数据包。

三、基于WinPcap的网络编程

1、编程API接口的选择

如前所述,WinPcap由三部分模块组成——NPF、packet.dll和wpcap.dll。编程方面,我们主要使用packet.dll和wpcap.dll提供的编程接口。packet.dll提供了Win32平台下的捕获包的驱动普通接口。实际上,不同版本的Windows都提供了不同的内核模块和应用程序编程接口。packet.dll提供一套独立于操作系统的API来处理这些不同。基于packet.dll编写的程序可以不经过重新编译就在各种Win32平台下实现捕获数据包。另外,packet.dll还包含

了其他一些函数,它可以进行一些底层的操作,如获取网络适配器名或动态的加载驱动程序。通过packet.dll还可以取得一些系统信息,如主机的MAC地址、一些硬件计数,例如以太网上冲突次数等。packet.dll和NPF都严重依赖于操作系统,并且由于Windows95/98和WindowsNT/2000之间OS结构的不同而在不同版本的操作系统上有所不同。

为了提高应用程序的可移植性,WinPcap提供了基于wpcap.dll的编程方式。这里,wpcap.dll不依赖于操作系统,它包含了一些其它高层的函数,比如:过滤器生成器、用户定义的缓冲区和高层特性(数据统计和构造数据包)。因此程序员可以使用两类API:1)直接映射到内核调用的原始函数,包含在packet.dll中;2)wpcap.dll提供的高层函数,这些函数更强大,用户更容易掌握。wpcap.dll能自动调用packet.dll。一个“高层”调用会被译成几个NPF系统调用。程序员一般使用wpcap.dll,只有在为数不多的程序中才直接使用packet.dll。

2、创建第一个基于wpcap.dll 的命令行应用程序

作为WinPcap编程的开始,首先我们编写一个Windows下的DOS命令行应用程序——一个简单的数据包捕获程序。本程序可以在WinPcap开发包WpdPack_4_0_2.zip的Examples-pcap目录下找到。源程序文件名为:pktdump_ex。更详细的文献可以参考:1)WinPcap中文帮助手册.chm —>“获取设备列表”—> “使用WinPcap编程”

2)如何使用WinPcap进行编程-中国协议分析网.htm

以下是利用Microsoft Visual C++ 创建应用程序的基本步骤。

1)在VC++ 6.0下创建一个DOS命令行程序,工程名:MyPacketDump

2)打开main()函数,在主程序中增加如下头文件和常量定义:Array

在main()

pcap_if_t *alldevs, *d;

pcap_t *fp;

u_int inum, i=0;

char errbuf[PCAP_ERRBUF_SIZE];

int res;

struct pcap_pkthdr *header;

const u_char *pkt_data;

printf("pktdump_ex: prints the packets of the network using WinPcap.\n");

printf(" Usage: pktdump_ex [-s source]\n\n"

" Examples:\n"

" pktdump_ex -s file.acp\n"

" pktdump_ex -s \\Device\\NPF_{C8736017-F3C3-4373-94AC-9A34B7DAD998}\n\n");

if(argc < 3)

{

printf("\nNo adapter selected: printing the device list:\n");

/* The user didn't provide a packet source: Retrieve the local device list */

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

{

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

exit(1);

/* Print the list */

for(d=alldevs; d; d=d->next)

{

printf("%d. %s\n ", ++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 ((fp = 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 (nonzero means promiscuous)

1000, // read timeout

errbuf // error buffer

)) == NULL)

fprintf(stderr,"\nError opening adapter\n");

return -1;

}

}

else

{

/* Do not check for the switch type ('-s') */

if ((fp = pcap_open_live(argv[2], // 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 (nonzero means promiscuous)

1000, // read timeout

errbuf // error buffer

)) == NULL)

{

fprintf(stderr,"\nError opening adapter\n");

return -1;

}

}

/* Read the packets */

while((res = pcap_next_ex( fp, &header, &pkt_data)) >= 0)

{

if(res == 0)

/* Timeout elapsed */

continue;

/* print pkt timestamp and pkt len */

printf("%ld:%ld (%ld)\n", header->https://www.doczj.com/doc/f73516465.html,_sec, header->https://www.doczj.com/doc/f73516465.html,_usec, header->len);

/* Print the packet */

for (i=1; (i < header->caplen + 1 ) ; i++)

{

printf("%.2x ", pkt_data[i-1]);

if ( (i % LINE_LEN) == 0) printf("\n");

}

printf("\n\n");

}

if(res == -1)

{

printf("Error reading the packets: %s\n", pcap_geterr(fp));

return -1;

}

pcap_close(fp);

return 0;

3)为编译器指定包含文件和库文件搜索目录。

假定WinPcap开发包WpdPack_4_0_2.zip被解压缩到C盘,如下图:

在VC++6.0下,打开Tools菜单,选择Options,然后选择Directories选项卡,指定WinPcap 包含文件和库文件目录。

4)指定链接的库文件。

打开Project菜单,选择Settings,选择Link选项卡,然后把wpcap.lib、ws2_32.lib添加到Object/Library modules下的文本框中。

5)将工程文件存盘、编译即可

本程序是命令行程序,因此必须在DOS窗口下运行测试。打开DOS窗口,在Debug 目录下找到编译后的可执行文件——My PacketDump.exe,输入My PacketDump执行即可。程序测试的启动界面如下:

程序测试包捕获界面如下:

四、VS2008下应用程序开发

1、启动VS2008,创建一个DOS命令行程序,工程名:MyPacketDump,

基于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.doczj.com/doc/f73516465.html, 如果应用程序出现一下提示,那就是没有安装驱动程序的原因了。 也可以不安装WinPcap驱动程序。但是需要把上面提到的四个动态链接库文件拷贝到系统分区/WINDOWS/system32目录下。(似乎有些问题) 2、配置编程环境。 1> 从https://www.doczj.com/doc/f73516465.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.doczj.com/doc/f73516465.html,/install/default.htm下载安装winpcap 驱动和DLL组件。 注意下图被红线圈起来的地方,即使下载地址,点击进入 然后到https://www.doczj.com/doc/f73516465.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.doczj.com/doc/f73516465.html,/view/696423.htm这里有Winpcap的详细介绍。 下面说一下你在编译Winpcap之前要做的事情。 1 下载Winpcap安装包,地址https://www.doczj.com/doc/f73516465.html,/install/default.htm。 2 然后到https://www.doczj.com/doc/f73516465.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平台下的网络分析工具快速移植过来,便于开

相关主题
文本预览
相关文档 最新文档