Libpcap开发集介绍

【计网 从头自己构建协议】一、libpcap 介绍 & 手撕以太网帧 理论的学习总是枯燥的,想要加深对理论的理解,最好的方法就是自己实践一遍。想要亲手实现各种协议,就必须能够接触底层 API。可惜的是,底层的 API 要么是在驱动里,要么是在系统里,都不对外开放,一般只能接触到运输层的 TCP/UDP。我们必须借助第三方库才能实现对底层操控。libpcap就是这样一个库,它帮我们实现了底层驱动,并将控制权向上开放,提供了发送和监听数据包的功能。著名的网络分析工具 Wireshark 就是基于这个库实现的。 阅读详情

libpcap是一个C语言库,libpcap的英文意思是 Packet Capture library,即数据包捕获函数库,其功能是通过网卡抓取网络以太网中的数据包。这个库为不同的平台提供了一致的c函数编程接口,在安装了 libpcap 的平台上,以 libpcap 为接口写的程序、应用,能够自由地跨平台使用。它支持多种操作系统。libpcap 结构简单,使用方便;它提供了20多个api封装函数,我们利用这些api函数即可完成本网络探测器所需的网络数据包监听功能。

Libpcap开发库的应用

  • 网络统计软件
  • 入侵检测系统
  • 网络调试
  • 数据包过滤,支持过滤机制BPF

Libpcap开发库使用说明

基于pcap的嗅探器程序的总体架构,其流程如下:

  1. 首先要决定用哪一个接口进行嗅探开始。在Linux中,这可能是eth0,而在BSD系统中则可能是xl1等等。我们也可以用一个字符串来定义这个设备,或者采用pcap提供的接口名来工作。
  2. 初始化pcap。在这里需要告诉pcap对什么设备进行嗅探。假如愿意的话,我们还可以嗅探多个设备。怎样区分它们呢?使用 文件句柄。就像打开一个文件进行读写一样,必须命名我们的嗅探“会话”,以此使它们各自区别开来。
  3. 如果只想嗅探特定的传输(如TCP/IP包,发往端口23的包等等),我们必须创建一个规则集合,编译并且使用它。这个过程分为三个相互紧密关联的阶段。 规则集合被置于一个字符串内,并且被转换成能被pcap读的格式(因此编译它)。编译实际上就是在我们的程序里调用一个不被外部程序使用的函数。接下来我 们要告诉 pcap使用它来过滤出我们想要的那一个会话。(此步骤可选)
  4. 最后,我们告诉pcap进入它的主体执行循环。在这个阶段内pcap一直工作到它接收了所有我们想要的包为止。每当它收到一个包就调用另一个已经定义好的 函数,这个函数可以做我们想要的任何工作,它可以剖析所部获的包并给用户打印出结果,它可以将结果保存为一个文件,或者什么也不作。
  5. 在嗅探到所需的数据后,我们要关闭会话并结束。

Libpcap库主要函数说明

函数名称:pcap_t *pcap_open_live(char *device, int snaplen, int promisc, int to_ms, char *ebuf)
函数功能:获得用于捕获网络数据包的数据包捕获描述字。
参数说明:device 参数为指定打开的网络设备名。snaplen参数定义捕获数据的最大字节数。promisc指定是否将网络接口置于混杂模式。to_ms参数指*定超时时 间(毫秒)。ebuf参数则仅在pcap_open_live()函数出错返回NULL时用于传递错误消息。

函数名称:pcap_t *pcap_open_offline(char *fname, char *ebuf)
函数功能:打开以前保存捕获数据包的文件,用于读取。
参数说明:fname参数指定打开的文件名。该文件中的数据格式与tcpdump和tcpslice兼容。”-“为标准输入。ebuf参数则仅在pcap_open_offline()函数出错返回NULL时用于传递错误消息。

函数名称:pcap_dumper_t *pcap_dump_open(pcap_t *p, char *fname)
函数功能:打开用于保存捕获数据包的文件,用于写入。
参数说明:fname 参数为”-“时表示标准输出。出错时返回NULL。p参数为调用pcap_open_offline()或pcap_open_live()函数后返回的 pcap结构指针。fname参数指定打开的文件名。如果返回NULL,则可调用pcap_geterr()函数获取错误消 息。

函数名称:char *pcap_lookupdev(char *errbuf)
函数功能:用于返回可被pcap_open_live()或pcap_lookupnet()函数调用的网络设备名指针。参数说明:如果函数出错,则返回NULL,同时errbuf中存放相关的错误消息。

函数名称:int pcap_lookupnet(char *device, bpf_u_int32 *netp,bpf_u_int32 *maskp, char *errbuf)
函数功能:获得指定网络设备的网络号和掩码。
参数说明:netp参数和maskp参数都是bpf_u_int32指针。如果函数出错,则返回-1,同时errbuf中存放相关的错误消息。

函数名称:int pcap_dispatch(pcap_t *p, int cnt,pcap_handler callback, u_char *user)
函数功能:捕获并处理数据包。
参数说明:cnt 参数指定函数返回前所处理数据包的最大值。cnt=-1表示在一个缓冲区中处理所有的数据包。cnt=0表示处理所有数据包,直到产生以下错误之一:读取 到EOF;超时读取。callback参数指定一个带有三个参数的回调函数,这三个参数为:一个从pcap_dispatch()函数传递过来的 u_char指针,一个pcap_pkthdr结构的指针,和一个数据包大小的u_char指针。如果成功则返回读取到的字节数。读取到EOF时则返回零 值。出错时则返回-1,此时可调用pcap_perror()或pcap_geterr()函数获取错误消息。

函数名称:int pcap_loop(pcap_t *p, int cnt,pcap_handler callback, u_char *user)
函数功能: 功能基本与pcap_dispatch()函数相同,只不过此函数在cnt个数据包被处理或出现错误时才返回,但读取超时不会返回。而如果为 pcap_open_live()函数指定了一个非零值的超时设置,然后调用pcap_dispatch()函数,则当超时发生时 pcap_dispatch()函数会返回。cnt参数为负值时pcap_loop()函数将始终循环运行,除非出现错误。

函数名称:void pcap_dump(u_char *user, struct pcap_pkthdr *h,u_char *sp)
函数功能:向调用pcap_dump_open()函数打开的文件输出一个数据包。该函数可作为pcap_dispatch()函数的回调函数。

函数名称:int pcap_compile(pcap_t *p, struct bpf_program *fp,char *str, int optimize, bpf_u_int32 netmask)
函数功能:将str参数指定的字符串编译到过滤程序中。
参数说明:fp是一个bpf_program结构的指针,在pcap_compile()函数中被赋值。optimize参数控制结果代码的优化。netmask参数指定本地网络的网络掩码。

函数名称:int pcap_setfilter(pcap_t *p, struct bpf_program *fp)
函数功能:指定一个过滤程序。
参数说明:fp参数是bpf_program结构指针,通常取自pcap_compile()函数调用。出错时返回-1;成功时返回0。

函数名称:u_char *pcap_next(pcap_t *p, struct pcap_pkthdr *h)
函数功能:返回指向下一个数据包的u_char指针。

函数名称:int pcap_datalink(pcap_t *p)
函数功能:返回数据链路层类型,例如DLT_EN10MB。

函数名称:int pcap_snapshot(pcap_t *p)
函数功能:返回pcap_open_live被调用后的snapshot参数值。

函数名称:int pcap_is_swapped(pcap_t *p)
函数功能:返回当前系统主机字节与被打开文件的字节顺序是否不同。

函数名称:int pcap_major_version(pcap_t *p)
函数功能:返回写入被打开文件所使用的pcap函数的主版本号。

函数名称:int pcap_minor_version(pcap_t *p)
函数功能:返回写入被打开文件所使用的pcap函数的辅版本号。

函数名称:int pcap_stats(pcap_t *p, struct pcap_stat *ps)
函数功能:向pcap_stat结构赋值。成功时返回0。这些数值包括了从开始捕获数据以来至今共捕获到的数据包统计。如果出错或不支持数据包统计,则返回-1,且可调用pcap_perror()或pcap_geterr()函数来获取错误消息。

函数名称:FILE *pcap_file(pcap_t *p)
函数功能:返回被打开文件的文件名。

函数名称:int pcap_fileno(pcap_t *p)
函数功能:返回被打开文件的文件描述字号码。

函数名称:void pcap_perror(pcap_t *p, char *prefix)
函数功能:在标准输出设备上显示最后一个pcap库错误消息。以prefix参数指定的字符串为消息头。

函数名称:char *pcap_geterr(pcap_t *p)
函数功能:返回最后一个pcap库错误消息。

函数名称:char *pcap_strerror(int error)
函数功能:如果strerror()函数不可用,则可调用pcap_strerror函数替代。

函数名称:void pcap_close(pcap_t *p)
函数功能:关闭p参数相应的文件,并释放资源。

函数名称:void pcap_dump_close(pcap_dumper_t *p)
函数功能:关闭相应的被打开文件。

Libpcap开发库安装

  1. 到网站 www.tcpdump.org下载最新版 libpcap-0.9.6.tar.gz
  2. 解压安装包:tar –zxvf libpcap-0.9.6.tar.gz, 产生目录libpcap-0.9.6
  3. cd libpcap-0.9.6
  4. ./configure
  5. Make;make installl

在Turbolinux系列产品中,libpcap已经是基本库之一,不必再进行下载配置。

Libpcap开发库使用举例

下面是一段数据包捕获程序test.c,每捕获一个数据包时打印信息“A packet is captured!”。

  #include <stdio.h>
  #include <pcap.h>

  int main (int argc, char* argv[])
  {
          /*the printer running when packet have captured*/
          void printer()
          {
                  printf("A packet is captured!\n");
                  return;
          }

          /*the error code buf of libpcap*/
          char ebuf[PCAP_ERRBUF_SIZE];
          /*create capture handler of libpcap*/
          pcap_t *pd = pcap_open_live ("eth0", 68, 0, 1000, ebuf);

          /*start the loop of capture, loop 5 times, enter printer when capted*/
          pcap_loop (pd, 5, printer, NULL);

          pcap_close (pd);
          return 0;
  }
  1. 编译gcc –o test test.c –lpcap
  2. 运行./test
  3. 输出结果:
  A packet is captured!
  A packet is captured!
  A packet is captured!
  A packet is captured!
  A packet is captured!
libpcap详解 libpcap(packet capture library),即数据包捕获函数库,是Unix/Linux平台下的网络数据包捕获函数库。它是一个独立于系统的用户层的包捕获API接口,为底层网络监测提供了一个可移植的框架。 一、工作原理 libpcap主要由两部分组成:网络分接头(network tap)和数据过滤器(packet filter)。网络分接头从网络设备驱动程序中收集数据进行拷贝,过滤器决定是否接收该数据包。libpcap利用BSD packet filter(BPF)算法对网卡接收到的链路层数 阅读详情

相关推荐

【数据包捕获技术】libpcap原理

在当前高速网络环境中,如何实时、高效、完整、快速捕获数据包是能否准确分析网络数据的基础和网络安全防护系统的关键技术。目前已经有从硬件/软件/软硬结合多种解决方案被不断的提出,用于提升数据包转发与捕获的性能。 libpcap (Packet Capture Library),即数据包捕获函数库,是 Unix/Linux 平台下的网络数据包捕获函数库。它是一个独立于系统的用户层包捕获的 API 接口,为底层网络监测提供了一个可移植的框架。 libpcap 工作原理 libpcap 主要由两部份组成: 网

yilun的专栏 5665

libpcap库学习

下面开始正式讲解如何使用libpcap: 首先要使用libpcap,我们必须包含pcap.h头文件,可以在/usr/local/include/pcap/pcap.h找到,其中包含了每个类型定义的详细说明。 1.获取网络接口 首先我们需要获取监听的网络接口: 我们可以手动指定或让libpcap自动选择,先介绍如何让libpcap自动选择:char *pcap_lookupdev(char * errbuf)上面这个函数返回第一个合适的网络接口的字符串指针,如果出错,则errbuf存放出错信息字符串,e.

Kolane的博客 1453

libpcap 编程二(libpcap函数库介绍)

1)libpcap,全名为packet capture library,即数据包捕获函数库。 2)libpcap的应用:1. 入侵检测系统2. 网络调试3. 数据包捕获、过滤4. 网络统计软件5. 网络嗅探器 3)libpcap库中的主要函数说明/******************************************************

Veini的专栏 2430

libpcap的简单应用

(Packet Capture Library),即数据包捕获函数库。在网络包抓取中libpcap是非常常用的一个库,著名的tcpdump就是用它来实现的。libpcap是一个 与实现无关的访问操作系统所提供的分组捕获函数库,用于访问数据链路层。这个库为不同的平台提供了一致的C函数编程接口,在安装了 libpcap 的平台上,以 libpcap 为接口写的程序、应用,能够自由地跨平台使用。它支持多种操作系统。

m0_67407774的博客 1389

交叉编译 tcpdump & libpcap

tcpdump 是一个强大的命令行包分析器,libpcap 是一个可移植的用于网络流量捕获的 C/C++ 库。tcpdump 依赖于 libpcap 库,同属于 tcpdump 项目。

bluebird_shao的专栏 2502

3. ChaosBlade-Box平台安装

参考自:https://chaosblade.io/docs/about-chaosblade/box-introduce/通过ChaosBlade-Box可实现chaosblade等已托管工具自动化部署,按照社区的建立的混沌实验模型统一实验场景,根据主机、Kubernetes、应用来划分目标资源,通过目标管理器来控制,在实验创建页面,可以实现白屏化的目标资源选择。

lldhsds的专栏 2485

libpcap 函数介绍

Libpcap开发集介绍libpcap是一个C语言库,libpcap的英文意思是 Packet Capture library,即数据包捕获函数库,其功能是通过网卡抓取网络以太网中的数据包。这个库为不同的平台提供了一致的c函数编程接口,在安装了 libpcap 的平台上,以 libpcap 为接口写的程序、应用,能够自由地跨平台使用。它支持多种操作系统。libpcap 结构简单,使用方便;

starshift的专栏 1443

Linux环境下离线升级GCC-9.4.0的完整实践指南

本文详细介绍了在Linux环境下离线升级GCC-9.4.0的完整实践指南,包括准备工作、依赖库安装、编译配置及常见问题解决。特别适用于企业内网或安全要求严格的服务器环境,帮助开发者高效完成GCC离线升级,提升编译性能并支持现代编程语言特性。

weixin_29288313的博客 670

libpcap原理及使用

2.9 libpcap 本文最初整理在我的github上SDN-Learning-notes libpcap(Packet Capture Library)即数据包捕获函数库,是Unix/Linux平台下的网络数据包捕获函数库。它是一个独立于系统的用户层包捕获的API接口,为底层网络监测提供了一个可移植的框架。著名的软件TCPDUMP就是在libpcap的的基础上开发而成的libpcap可以实现

虾米的博客 3万+

手把手教你用STM32H743+FreeRTOS+LWIP搭建物联网网关(附完整工程)

本文详细介绍了如何使用STM32H743微控制器结合FreeRTOS实时操作系统和LWIP协议栈构建高性能物联网网关。内容涵盖硬件配置、FreeRTOS任务设计、LWIP协议栈优化及物联网协议集成,提供完整工程示例,助力开发者快速实现稳定可靠的网络通信枢纽。

weixin_42623010的博客 502

libpcap函数库详细介绍

libpcap是一个C语言库,libpcap的英文意思是 Packet Capture library,即数据包捕获函数库,其功能是通过网卡抓取网络以太网中的数据包。这个库为不同的平台提供了一致的c函数编程接口,在安装了 libpcap 的平台上,以 libpcap 为接口写的程序、应用,能够自由地跨平台使用。它支持多种操作系统。libpcap 结构简单,使用方便;它提供了20多个api封装函数,我们利用这些api函数即可完成本网络探测器所需的网络数据包监听功能。 函数名称:pcap_t *pcap_ope

Kolane的博客 4637

从ViT到CLIP:OpenAI如何用4亿张图‘教会’AI看懂世界?一次讲透对比学习与Prompt工程

本文深入解析OpenAI的CLIP模型如何通过4亿图文对的对比学习实现跨模态理解,详细探讨了对比学习、数据构建、模型架构及Prompt工程等核心技术。CLIP利用Transformer架构和精心设计的Prompt模板,在Zero-Shot分类、图像检索等场景展现出强大能力,为多模态AI应用开辟新方向。

weixin_27027459的博客 372

libpcap介绍

libpcap(Packet Capture Library),即数据包捕获函数库,是Unix/Linux平台下的网络数据包捕获函数库。它是一个独立于系统的用户层包捕获的API接口,为底层网络监测提供了一个可移植的框架。 一、libpcap工作原理 libpcap主要由两部份组成:网络分接头(Network Tap)和数据过滤器(Packet Filter)。网络分接头从网络设备驱动程序中收集数据拷贝,过滤器决定是否接收该数据包。Libpcap利用BSD Packet F...

zgjxhgh的专栏 536

从零到飞:在Ubuntu 22.04上为你的无人机搭建PX4-Autopilot开发环境

本文详细指导在Ubuntu 22.04上搭建PX4-Autopilot开发环境,涵盖系统依赖安装、源码获取、编译目标选择及Gazebo仿真测试。通过优化构建过程和调试技巧,帮助开发者快速为无人机部署稳定的飞控系统,实现从仿真到实机的平滑过渡。

weixin_26878995的博客 489

基于NB-IoT的智慧路灯监控系统(NB-IoT专栏—实战篇1:项目简介)

基于NB-IoT技术的城市道路智慧路灯监控系统,在每个照明节点上安装一个集成了NB-IoT模组的单灯控制器,单灯控制器再经运营商的网络,与路灯控制平台实现双向通信,路灯控制平台直接对每个灯进行控制,包括开关灯控制、光照检测、自动调节明暗、电耗分析等操作。

不脱发的程序猿 5万+

libpcap介绍(一)

一、libcap的简介 Libpcap是Packet Capture Libray的英文缩写,即数据包捕获开源的C函数库,用于捕获网卡数据或分析pcap格式的抓包报文。Tcpdump和wireshark均是以此为基础的。 主要功能有:网络报文抓取;网络报文的构建;抓包文件的分析;自定义BFP过滤。 二、网络报文 网络报文是按照协议层次逐层构建的,简单按照四层协议来理解就是在应用层数据和协议的基础上构建传输层报文,在传输层协议的基础上构建网络层报文,在网络层报文的基础上构建数据链路/物理层报文。 图1.网络分

bob的博客 2430

NVIDIA平台Xavier/TX2板摄像头驱动开发与TP2850方案开发

本文介绍了在NVIDIA平台上开发Xavier/TX2板摄像头驱动的过程,并结合TP2850方案实现了多路模拟相机输入。我们提供了初始化摄像头和连接TP2850方案的示例代码,并介绍了相关的步骤和注意事项。需要注意的是,以上示例代码仅提供了基本的摄像头初始化和与TP2850通信的框架,你需要根据具体的需求进行进一步开发和配置。你可能需要参考摄像头和TP2850的数据手册以及相关的开发文档,以了解更多详细的配置和操作。此外,你还需要一个支持TP2850方案的硬件设备,并将其连接到Xavier/TX2板上。

PixelLancer的博客 592

tcpdump libnet libpcap 介绍及编译

在Unix系统平台上的网络安全工具开发中,目前最为流行的C API library有libnet、libpcap、libnids和libicmp等。它们分别从不同层次和角度提供了不同的功能函数。使网络开发人员能够忽略网络底层细节的实现,从而专注于程序本身具体功能的设计与开发。其中,  * libnet提供的接口函数主要实现和封装了数据包的构造和发送过程。  * libpcap提供的接口函数主要

zhangliang_571的专栏 1118

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

libpcap库的安装与使用

1 安装 sudo apt-get install libpcap-dev 2 使用 需要包含的头文件: #include <pcap.h 编译的时候需要加: -lpcap 利用libpcap函数库开发应用程序的基本步骤: 打开网络设备 设置过滤规则(可选) 捕获数据 关闭网络设备 常用函数: pcap_lookupdev( )(可选) 查看设备名,返回网卡名 pcap_t *pcap_open_live(const char *device,int snaplen,int promisc,

qq_45164331的博客 5262

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

libpcap的安装

最近参加了一个实训项目,是把一个WireShark抓到的pcapng文件用libpcap库还原成原始的TS流,需求分析弄了一天,安装环境用了一天,接下来再开始写代码,让我们一起完成这个项目吧。 首先是安装CentOS环境(其实只要是Linux就可以),这里给出资源网站:https://www.centos.org/download/ 可以选择DVD download或者最小化安装。 这里注意,如果...

NCU_CirclePlan的博客 2140

【编程笔记】libpcap下载、安装与编程

Libpcap库的基本认识、手动编译以及接口函数的基础使用

xiongcha的博客 5667

libpcap的一些主要函数和结构介绍

一) 数据结构 •1) typedef struct _ADAPTER ADAPTER //描述一个网络适配器; •2) typedef struct _PACKET PACKET //描述一组网络数据报的结构; •3) typedef struct NetType NetType //描述网络类型的数据结构; •4) typedef struct npf_if_addr npf_if_

petershina的专栏 6633
上一篇: 求最长非升子序列长度
下一篇: libpcap的使用
Scutware
博客等级 码龄14年 4粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值