`
isiqi
  • 浏览: 16035743 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论
阅读更多

函数1:

int pcap_datalink(pcap_t* p)

返回链路层上的一个适配器。返回链路层的类型,链路层的类型包括:

DLT_NULL: BSD回路封装;链路层协议头是一个4字节的域,以主机字节顺序(host byte order),包含一个从socket.h来的PF_value。主机字节顺序(host byte order)是捕获数据包的机器的字节顺序,而PF_value是捕获数据包的机器的OS。如果一个读取一个文件,字节顺序和PF_value不一定是抓取文件的那些机器。

DLT_EN10MB: 以太网(10Mb, 100Mb, 1000Mb, 或者更高)。

DLT_IEEE802: IEEE802.5令牌环网。

DLT_ARCNET:ARCNET。

DLT_SLIP:SLIP。

DLT_PPP:PPP;如果第一个字节是0xff或0x03,它是类HDLC帧上的PPP。

DLT_FDDI:FDDI

DLT_ATM_RFC1483:RFC1483LLC/SNAP ATM;数据包以IEEE802.2 LLC头开始。

DLT_RAW:原始IP(raw IP);数据包以IP头开始。

DLT_PPP_SERIAL:按照RFC1662,基于类HDLC帧的PPP,或者按照RFC1547的4.3.1,基于HDLC帧的Cisco PPP;前者的第一个字节是0xFF,后者的第一个字节是0x0F或0x8F。

DLT_PPP_ETHER:按照RFC2516,PPPoE;数据包以PPPoE头开始。

DLT_C_HDLC:按照RFC1547的4.3.1,基于HDLC帧的Cisco PPP。

DLT_IEEE802_11:IEEE 802.11无线局域网。

DLT_FRELAY:帧中继(Frame Relay)。

DLT_LOOP:OpenBSD回路封装。

DLT_LINUX_SLL:Linux抓包封装。

DLT_LTALK:苹果的LocalTalk,数据包以AppleTalk LLAP头开始。

DLT_PFLOG:OpenBSD pflog。

DLT_PRISM_HEADER:后接802.11头的棱镜监视器模式(Prism monitor mode)信息。

DLT_IP_OVER_FC:RFC2625 IP-over-Fiber 频道,以RFC2625中定义的Network_Header开始。

DLT_SUNATM:SunATM设备。

DLT_IEEE802_11_RADIO:后接802.11头的链路层信息。

DLT_ARCNET_LINUX:没有异常帧的ARCNET。

DLT_LINUX_IRDA:Linux-IrDA数据包,DLT_LINUX_SLL头后接IrLAP头。

函数2:

int pcap_compile(pcap_t*p,

struct bpf_program*fp,

char*str,

intoptimize,

bpf_u_int32netmask)

编译一个数据包过滤器,将一个能被核心态(kernel-level)过滤器引擎解释的程序中的高层过滤表达式(filtering expression)进行转化。pcap_compile()被用来将字符串str编译进过滤器程序(fp),程序(fp)是一个指向bpf_program结构体并被pcap_compile()赋值的指针。optimize控制是否对目标代码(resulting code)的性能进行优化。Netmask表明IPv4掩码,它仅在检查过滤器程序中的IPv4广播地址的时候被使用。如果网络掩码对于程序是不可知的或者数据包是在Linux的”任何(any)”伪接口上被捕获的,则赋值0;IPv4广播地址的测试将不被正确进行,但过滤器程序中的其他所有的测试都不会有问题。返回-1表示发生了错误,此时,pcap_geterr()将被用来显示错误信息。

函数3:

int pcap_setfilter(pcap_t*p,

struct bpf_program* fp)

把一个过滤器同一次抓包关联起来。pcap_setfilter被用来指定一个过滤器程序。fp是一个指向bpf_program结构体的指针,通常是pcap_compile()执行的结果。当失败时返回-1,此时,pcap_geterr()被用来显示错误信息;返回0表示成功。

首先,首先我们设置过滤器为“ip and udp”。用这个方法我们可以确保packet_handler()仅接收IPv4上的UDP数据包:这就简化了解析过程并且提高了程序的效率。

我们还创建了IP和UDP两个结构体,这些结构体被packet_handler()用来定位不同的头域。

packet_handler()展现了像tcpdump/WinDump这些复杂的嗅探器(sniffer)如何解析网络数据包。因为我们不关心MAC头,所以我们跳过它。为了简便起见,抓包前我们用pcap_datalink()检查MAC层,以确保我们处理的是以太网。该方法可以确保MAC头是14字节。

IP头的定位在MAC头定位之后。我们从IP包头中取出源IP地址和目标IP地址。

展开UDP包头有点复杂,因为IP包头不是定长的。因此,我们使用IP包头的长度域来获得它的大小。一旦我们知道了UDP头的位置,我们可以取出源端口和目的端口。

分享到:
评论

相关推荐

    winpcap函数集合(附代码实例)

    winpcap函数集合(附代码实例),网上搜集各种版本的集合

    基于winpcap网络嗅探器 VC++源码+说明文档资料.zip

    2、捕获所有流经网卡的数据包,并利用 WinPcap 函数库设置过滤规则。 3、分析捕获到的数据包的包头和数据,按照各种协议的格式进行格式化显 示。 4、将所开发工具的捕获和分析结果与常用的嗅探器,如 Wireshark,...

    Winpcap常用函数

    Winpcap常用函数

    基于WinPcap端口扫描器的设计和实现.pdf

    基于WinPcap 端口扫描器 设计和实现 pdf

    基于winpcap网络嗅探器 Visual C++ 语言源码+说明文档资料.zip

    2、捕获所有流经网卡的数据包,并利用 WinPcap 函数库设置过滤规则。 3、分析捕获到的数据包的包头和数据,按照各种协议的格式进行格式化显 示。 4、将所开发工具的捕获和分析结果与常用的嗅探器,如 Wireshark,...

    winpcap在vc6下配置环境

    winpcap在vc6下配置环境,winpcap函数 四步骤捕获报文.

    网络编程底层函数库WinPCAP资料.rar

    网络编程底层函数库WinPCAP资料,WinPcap网络程序开发包下载及安装说明,以及WinPcap的开发教程。

    基于WinPcap和MFC实现的网络嗅探器

    基于WinPcap和MFC实现的网络嗅探器 ,捕获所有流经网卡的数据包,并利用 WinPcap 函数库设置过滤规则, 分析捕获到的数据包的包头和数据,按照各种协议的格式进行格式化显示 winPcap+MFC实现网络嗅探器

    winpcap的相关原理

    winpcap函数的相关原理及分析,还有一些函数功能以及数据包的捕获机制

    基于C语言实现网络Sniffer(嗅探器)【100011972】

    捕获所有流经网卡的数据包,并利用WinPcap函数库设置过滤规则; 分析捕获到的数据包的包头和数据,按照各种协议的格式进行格式化显示; 支持协议:TCP、UDP、ARP、ICMP、HTTP、IPv4、IPv6 可以本地文件的形式来保存...

    winpcap教程 函数 用法

    winpcap基本模块的详细讲解 函数用法 关键数据结构

    WinPcap+中文技术文档

    WinPcap用户指南 定义 输出函数 过滤串表达式的语法 使用WinPcap编程 WinPcap教程: 循序渐进教您... 对于提供远程捕获的函数引用, 请参阅WinPcap 输出函数 章节的 "Windows-specific Extensions" . 核心数据结构与定义

    嗅探工具_探针_

    捕获所有流经网卡的数据包,并利用WinPcap函数库设置过滤规则。 ? 分析捕获到的数据包的包头和数据,按照各种协议的格式进行格式化显示。 ? 将所开发工具的捕获和分析结果与常用的Sniffer进行比较,完善程序代码。

    ethereal的使用详解

    Ethereal是一个开放源码的网络分析系统,也是是目前最好的开放源码的网络协议分析器,...Ethereal网络分析系统也需要一个底层的抓包平台,在Linux中是采用Libpcap函数库抓包,在windows系统中采用winpcap函数库抓包。

    实验二- 网络数据包的监听与分析.doc

    在Window系统中,意大利人Fulvio Risso和Loris Degioanni提出并实现了Winpcap函数库,其实现思想来源于BPF。 2. Wireshark的简单操作方法 安装Wireshark之前,需要安装Winpcap,安装过程比较简单。安装完成后,启动...

    计算机网络课程实验总结报告(4).doc

    " " "Ethereal网络分析系统也需要一个底层的抓包平台,在Linux中是采用" " "Libpcap函数库抓包,在windows系统中采用winpcap函数库抓包 " " "2.层次化的数据包协议分析方法 " " " 取得捕包函数捕回的数据包后就...

    网卡数据捕获SDK,封装winpcap基础函数

    Mypcap由winpcap提取基础功能而得来,必须安装wpcap才能使用,提供三个C语言函数 1. 获取网卡驱动(网络设备)信息 int GetNetworkDrive(ND* pNetworkDrives, int maxNetworkDriveNum); 2. 接收网卡数据 int ...

    winpcap中文帮助

    第一部分内容主要适合那些需要利用WinPcap开发应用程序的编程人员: 它包含了WinPcap API的所有函数和数据结构的信息, 说明部分解释了如何编写一个数据包过滤器,而另一个页面则解释了如何将它包含到应用程序中。...

    利用winpcap工具实现的抓包程序

    使用WinPcap的函数pcap_finidalldevs()获主机的网络设备名,选择一个有线网卡,用函数pcap_open_live()打开该设备,通过把网卡设置为混杂模式,接收一切数据包,可以定义一些过滤规则来捕获特定的数据包。...

Global site tag (gtag.js) - Google Analytics