libpcap库多网卡抓包

基于libpcap多网卡抓包编程心得 公司业务需要,需要做一个libpcap项目抓包流量分析服务,网上关于此类项目不多,因此自己实现了一个关于libpcap的一些基础部分这里不再陈诉了注 : 本文因为频繁使用malloc的操作,为了防止内存碎片,均采用的jemmloc库 前提数据结构[ 注 : 下面的抄袭的nginx的ngx_string , 其实说实话,关于此类数据结构,实用性上,redis的sds实现的较为全面,数据接口多,不用你... 阅读详情

libpcap库的安装

首先,安装相关的支持环境

sudo apt get install flex
sudo apt get install bison

然后下载最新版的libpcap,下载地址:http://www.tcpdump.org/。

解压缩,在解压缩的文件夹输入以下命令

./configure
make
make install

单网卡抓包DEMO

单网卡抓包是libpcap库非常基础的功能,这里放出一个demo作为参考,方便与多网卡扩展做比较。

单网卡demo的主要功能是,由用户自行输入监听的网卡。在用户没有输入网卡时,程序会打印所有可监听的设备名称,由用户选择所要监听的网卡,当监听一定数量的网卡时(10000),程序终止。

//demo=single   
#include "pcap.h"   
#include "stdlib.h"
#include <time.h>
#include <arpa/inet.h>
#define SNAP_LEN 65536

//prototype of the packet handler 
void dispatcher_handler(u_char *temp1,
    const struct pcap_pkthdr *header, const u_char *pkt_data);

int main(int argc, char **argv)
{
    char *dev = NULL;            /* capture device name */
    char errbuf[PCAP_ERRBUF_SIZE];        /* error buffer */
    pcap_t *handle;                /* packet capture handle */
    pcap_if_t *alldev, *p;
    char filter_exp[] = "tcp";        /* filter expression [3] */
    struct bpf_program fp;            /* compiled filter program (expression) */
    bpf_u_int32 mask;            /* subnet mask */
    bpf_u_int32 net;            /* ip */
    int num_packets = 10000;            /* number of packets to capture */   
    /* check for capture device name on command-line */
    if (argc == 2) {
        dev = argv[1];
    }
    else if (argc > 2) {
        fprintf(stderr, "error: unrecognized command-line options\n\n");
        exit(EXIT_FAILURE);
    }
    else {
        /* find a capture device if not specified on command-line */ 
        int i=0,num;  
        if(pcap_findalldevs(&alldev,errbuf)==-1)  
        {  
            printf("find all devices is error\n");  
            return 0;  
        }  
        for(p=alldev;p;p=p->next)  
        {  
            printf("%d:%s\n",++i,p->name);  
            if(p->description)  
            {  
                printf("%s\n",p->description);  
            }  
        }  
        printf("please input which interface you want to use\n");  
        scanf("%d",&num);  
        if(num<1||num>i)  
        {  
            printf("interface is unavillible\n");  
            return 0;  
        }  
        for(p=alldev,i=1;i<=num;p=p->next,i++)  
            dev=p->name;  
        if (dev == NULL) {
            fprintf(stderr, "Couldn't find default device: %s\n",
             errbuf);
            exit(EXIT_FAILURE);
        }
    }
    /* print capture info */
    printf("Device: %s\n", dev);
    printf("Number of packets: %d\n", num_packets);
    printf("Filter expression: %s\n", filter_exp);
    /* open capture device */
    handle = pcap_open_live(dev, SNAP_LEN, 1, 1000, errbuf);
    if (handle == NULL) {
        fprintf(stderr, "Couldn't open device %s: %s\n", dev, errbuf);
        exit(EXIT_FAILURE);
    }
    /* make sure we're capturing on an Ethernet device [2] */
    if (pcap_datalink(handle) != DLT_EN10MB) {
        fprintf(stderr, "%s is not an Ethernet\n", dev);
        exit(EXIT_FAILURE);
    }
    /* compile the filter expression */
    if (pcap_compile(handle, &fp, filter_exp, 0, 24) == -1) {
        fprintf(stderr, "Couldn't parse filter %s: %s\n",
         filter_exp, pcap_geterr(handle));
        exit(EXIT_FAILURE);
    }
    /* apply the compiled filter */
    if (pcap_setfilter(handle, &fp) == -1) {
        fprintf(stderr, "Couldn't install filter %s: %s\n",
         filter_exp, pcap_geterr(handle));
        exit(EXIT_FAILURE);
    }
    /* now we can set our callback function */
    pcap_loop(handle, num_packets, dispatcher_handler, NULL);
    /* cleanup */
    pcap_freecode(&fp);
    pcap_close(handle);
    printf("\nCapture complete.\n");
return 0;
}

void dispatcher_handler(u_char *temp1,
    const struct pcap_pkthdr *header, const u_char *pkt_data)
{
    printf("I get one packet!\n");
}

多网卡扩展

由于libpcap库没有可以同时监听多个网卡函数,根据网友的建议,我决定使用多线程的方法分别开多个线程监听多个网卡来解决此问题。这里以双网卡监听为例,将解决方案给出,不妥之处还请读者指出:

  • 同样,用户可以先行输入所要监听的两张网卡的名称,sudo ./demo eth0 wlan0
  • 当用户没有输入所要监听的网卡参数时,程序给出所有可以监听的设备名称,由用户依次输入,两个参数分别给两个进程,用来监听数据包。
  • 关于程序的终止条件,原来的以包数量为判决在多网卡场景显然不合理,改为以监听时间为判决:开第三个线程执行sleep()函数,第三个进程结束时,结束前两个抓包进程。

代码如下:

//demo
#include "pcap.h"
#include <pthread.h>
#include "stdlib.h"
#include <time.h>
#include <arpa/inet.h>
#include "unistd.h"
#define SNAP_LEN 65535

/* prototype of the packet handler */
void dispatcher_handler(u_char *temp1,
    const struct pcap_pkthdr *header, const u_char *pkt_data);
void *thr_fn1(void *arg);
void *thr_fn2(void *arg);
void *thr_fn3(void *arg);

pcap_t *handle1, *handle2;                /* packet capture handle */
int CAP_TIME = 600;
pthread_t t1, t2, t3;

int main(int argc, char **argv)
{
    char *dev1 = NULL;
    char *dev2 = NULL;
    char errbuf[PCAP_ERRBUF_SIZE];        /* error buffer */
    pcap_if_t *alldev, *p;
    char filter_exp[] = "tcp";        /* filter expression [3] */
    struct bpf_program fp1,fp2;            /* compiled filter program (expression) */
    bpf_u_int32 mask;            /* subnet mask */
    bpf_u_int32 net;            /* ip */
     /* check for capture device name on command-line */
    if (argc == 3) {    //pre-define the two device's names to be captured
        dev1 = argv[1];
        dev2 = argv[2];
    }
    else if (argc > 3 || argc == 2) {
        fprintf(stderr, "error: unrecognized command-line options\n\n");        
        exit(EXIT_FAILURE);
    }
    else {
        /* find all capture device and tell the users to choose 2 if not specified on command-line */
        int i=0,num1,num2;  
        if(pcap_findalldevs(&alldev,errbuf)==-1)  
        {  
            printf("find all devices is error\n");  
            return 0;  
        }  
        for(p=alldev;p;p=p->next)  
        {  
            printf("%d:%s\n",++i,p->name);  
            if(p->description)  
            {  
                printf("%s\n",p->description);  
            }  
        }  
        printf("please input the 1st interface you want to use\n");  
        scanf("%d",&num1);  
        if(num1<1||num1>i)  
        {  
            printf("interface is unavillible\n");  
            return 0;  
        }  
        for(p=alldev,i=1;i<=num1;p=p->next,i++)  
            dev1=p->name; 

        printf("please input the 2nd interface you want to use\n");  
        scanf("%d",&num2);  
        if(num2<1 || num2>i || num2==num1)  
        {  
            printf("interface is unavillible\n");  
            return 0;  
        }  
        for(p=alldev,i=1;i<=num2;p=p->next,i++)  
            dev2=p->name; 
    }
    printf("please input the capture time\n");  
    scanf("%d",&CAP_TIME);    
    /* print capture info */
    printf("1st device: %s\n", dev1);
    /* open capture device */
    handle1 = pcap_open_live(dev1, SNAP_LEN, 1, 1000, errbuf);
    if (handle1 == NULL) {
        fprintf(stderr, "Couldn't open device %s: %s\n", dev1, errbuf);
        exit(EXIT_FAILURE);
    }
    /* make sure we're capturing on an Ethernet device [2] */
    if (pcap_datalink(handle1) != DLT_EN10MB) {
        fprintf(stderr, "%s is not an Ethernet\n", dev1);
        exit(EXIT_FAILURE);
    }
    /* compile the filter expression */
    if (pcap_compile(handle1, &fp1, filter_exp, 0, 24) == -1) {
        fprintf(stderr, "Couldn't parse filter %s: %s\n",
         filter_exp, pcap_geterr(handle1));
        exit(EXIT_FAILURE);
    }
    /* apply the compiled filter */
    if (pcap_setfilter(handle1, &fp1) == -1) {
        fprintf(stderr, "Couldn't install filter %s: %s\n",
         filter_exp, pcap_geterr(handle1));
        exit(EXIT_FAILURE);
    }
   /* print capture info */
    printf("2nd device: %s\n", dev2);
    printf("Filter expression: %s\n", filter_exp);  
    printf("Caputre time: %d\n", CAP_TIME);
    /* open capture device */
    handle2 = pcap_open_live(dev2, SNAP_LEN, 1, 1000, errbuf);
    if (handle2 == NULL) {
        fprintf(stderr, "Couldn't open device %s: %s\n", dev2, errbuf);
        exit(EXIT_FAILURE);
    }
    /* make sure we're capturing on an Ethernet device [2] */
    if (pcap_datalink(handle2) != DLT_EN10MB) {
        fprintf(stderr, "%s is not an Ethernet\n", dev2);
        exit(EXIT_FAILURE);
    }
    /* compile the filter expression */
    if (pcap_compile(handle2, &fp2, filter_exp, 0, 24) == -1) {
        fprintf(stderr, "Couldn't parse filter %s: %s\n",
         filter_exp, pcap_geterr(handle2));
        exit(EXIT_FAILURE);
    }
    /* apply the compiled filter */
    if (pcap_setfilter(handle2, &fp2) == -1) {
        fprintf(stderr, "Couldn't install filter %s: %s\n",
         filter_exp, pcap_geterr(handle2));
        exit(EXIT_FAILURE);
    }
    pthread_create(&t1, NULL, thr_fn1, NULL);  
    pthread_create(&t2, NULL, thr_fn2, NULL); 
    pthread_create(&t3, NULL, thr_fn3, NULL);       
    pthread_join(t1, NULL);  
    pthread_join(t2, NULL); 
    pthread_join(t3, NULL); 
    pcap_freecode(&fp1);
    pcap_freecode(&fp2);
    pcap_close(handle1);
    pcap_close(handle2);
    printf("\nCapture complete.\n");
return 0;
}
void dispatcher_handler(u_char *temp1,
    const struct pcap_pkthdr *header, const u_char *pkt_data)
{
    printf("I get one packet!\n");
}
void *thr_fn1(void *arg)
{
    pcap_loop(handle1, 0, dispatcher_handler, NULL);
    //pthread_cancel( t2 );
}
void *thr_fn2(void *arg)
{
    pcap_loop(handle2, 0, dispatcher_handler, NULL);
    //pthread_cancel( t1 );
}
void *thr_fn3(void *arg)
{
    sleep(CAP_TIME);
    pthread_cancel( t1 );
    pthread_cancel( t2 );
}

程序编译需要连接libpcap库和pthread库,使用命令gcc -g -w demo.cpp -o demo -lpcap -lpthread

注:篇幅起见,主循环仅为一句打印指令,实现不同功能可用其他网络资源替换。

从pcap到pcapng:利用libpcap进行离线抓包文件解析实战 十年前我刚入行时,接触的都是传统的pcap文件格式,但随着网络环境越来越复杂,pcapng逐渐成为主流。在实际项目中,我经常遇到这样的情况:客户提供的抓包文件既有老式的pcap,也有新式的pcapng,而我们的分析工具需要同时兼容这两种格式。我在分析一个分布式系统故障时,正是利用pcapng的注释功能标记了关键时间点,大大缩短了问题定位时间。:pcap_open_offline返回的句柄必须用pcap_close释放,否则会导致内存泄漏。我在处理一个数据中心网络问题时,pcapng的多接口特性帮了大忙。 阅读详情

相关推荐

深入解析Linux Cooked Capture v1:从tcpdump抓包到Wireshark分析

本文深入解析Linux Cooked Capture v1协议,从tcpdump抓包到Wireshark分析的完整流程。详细介绍了该协议在多网卡抓包中的统一处理机制,以及与普通以太网帧的关键区别。提供了格式转换实战方案和常见问题排查指南,帮助网络工程师高效分析虚拟化环境和容器网络中的流量。

weixin_30790841的博客 438

循序渐进学习使用WINPCAP

(一)得到网络驱动列表 用 PCAP 写应用程序的第一件事往往就是要获得本地的网卡列表。PCAP 提供了 pcap_findalldevs()这个函数来实现此功能,这个API 返回一个pcap_if 结构的链表,表的每 项内容含有全面的网卡信息:字段名字、含有名字的描述、有关驱动器的易读信息。 得到网络驱动列表的程序如下: #include "pcap.h" main() { pc

xiao628945的专栏 2600

Wireshark抓包功能深度解析:从原理到实战的完整指南

网络数据包捕获与分析是网络工程师、安全研究员和应用开发者必须掌握的核心技能。其原理基于底层抓包驱动库(如Npcap/libpcap)在混杂模式下,将网卡接收的原始比特流完整拷贝至用户空间,再通过协议解析器进行解码。这项技术的核心价值在于,它能将抽象的网络通信转化为可视化的数据流,为网络性能优化、故障精准定位和安全威胁洞察提供实证基础。在实际应用场景中,无论是排查API调用失败、分析网页加载缓慢,还是追踪潜在入侵痕迹,熟练运用捕获过滤器、显示过滤器等工具,都能实现对目标流量的精准捕获与高效分析。本文聚焦于Wi

weixin_30333885的博客 481

pcap编程深入解析

首先,该文章不限定OS不单针对Winpcap或者libpcap,对于Winpcap的特殊扩展使用了PS标示。        我以前使用过Winpcap,但并没有对pcap开发进行过深入解析。希望这篇文章可以深入浅出的讲清楚这个问题。Pcap是什么?它是个监视器,或者发生器,它可以监视,也可以发生,但它不能拦截。它可以在网络上增加一些消息,但不能阻止已经存在的消息。        获取设备列表

qdsuiyuan1984的专栏 1597

网络安全·流量收集

一、引言 ⽹络流量是单位时间内通过⽹络链路的数据包的总体,是衡量⽹络负荷和转发性能的基本指标。⽹络流量监测即抓取⽹络中传输数据包的总体数据并统计,⽽采集⽹络流量数据是对⽹络IP数据报⽂的收集。 在日常甲方工作中,我们比较常见的是直接在交换机上对流量进行监听和处理,如我们想使用应用流量审计网关的时候,可以在交换机上配置镜像流量(如所有流量均转发或复制到交换机的某一个特定的口),后续审计工作的基础都是基于流量都被完整收集的基础上来进行的。 那么,如果我们在内网放置一台流量监听设备,用于内网的入侵检测等工作,这台

不忘初心,护天下安全! 3304

冰层厚度预测为何必须用物理感知Transformer

冰层厚度预测本质上是受冰川动力学方程约束的时空耦合建模问题,传统RNN、CNN难以处理其非均匀采样、跨站点长程物理耦合及硬性本构关系等特性。Transformer通过可定制的位置编码与注意力机制,天然适配多尺度热力-力学距离建模,并支持将格陵兰高密度数据迁移至南极稀疏站点。结合物理门控注意力、PDE约束损失与反演验证,该架构不仅提升预测精度,更保障结果符合冰流方程与地质事实,适用于极地遥感、原位观测及小样本地球系统建模场景。

weixin_33795743的博客 584

pcap_loop()函数是阻塞调用吗

【代码】pcap_loop()函数是阻塞调用吗。当pcap_loop()函数开始执行时,它会一直等待符合条件的网络数据包到来。如果设置的cnt(要捕获的数据包数量)为一个正数,它会阻塞直到捕获到指定数量的数据包;如果cnt为-1,它会一直阻塞,持续捕获数据包,直到出现错误或者被手动停止(比如通过在另一个线程中发送信号来停止它)。

luotuo28的博客 704

全面掌握MentoHUST:开源网络抓包与分析工具指南

MentoHUST 是一种用于网络测试和故障诊断的工具,它通过执行网络协议分析与网络包捕获来帮助用户识别和解决问题。本章将概述 MentoHUST 的核心技术,包括其工作原理和主要功能,为深入学习后续章节提供基础。多数现代网络分析软件都内置了统计分析工具,它们可以为用户提供即刻的数据包频度统计、协议分布图、流量时间序列图等。这些工具极大地方便了用户,无需额外编写脚本或程序即可进行基本的数据包分析。以Wireshark为例,它内置了强大的统计功能。

weixin_33298352的博客 1251

linux 指定网卡发数据,linux下利用多线程循环抓取指定网卡上的数据包

用到了Libpcap 多线程,信号,临界资源,ioctl获取网卡信息。代码如下#include #include #include #include #include #include #include #include #include #include #include #include #include #include #define IP_Swap_32(x) ( (((x)>&g...

weixin_29830257的博客 642

SpringBoot 通过 JMS 集成 IBM MQ

IBM MQ 作为老牌的企业级消息中间件,虽然在当下云原生时代已不再是主流选择,但在金融、银行、保险等传统行业的核心业务系统中仍然占据着重要地位。这些行业对系统的稳定性、可靠性和事务一致性有着极高的要求,IBM MQ 正是在这些方面表现出色。尽管近年来 RabbitMQ、Apache Kafka 等新一代消息中间件在新兴项目中更受欢迎,但许多金融公司和大型企业仍在使用 IBM MQ 作为核心业务系统的消息传递基础设施。

小单的博客专栏 952

告别Quartus II的漫长等待:用VSCode+iverilog+GTKWave搭建你的轻量级Verilog仿真环境(2024保姆级教程)

本文详细介绍了如何利用VSCode、iverilog和GTKWave构建高效的Verilog/SystemVerilog开发环境,替代传统的Quartus II和ModelSim工具。通过2024年最新的保姆级教程,帮助开发者实现秒级启动、低资源消耗的轻量级仿真环境,显著提升数字电路设计的开发效率和调试体验。

weixin_33690963的博客 561

[总结] 浅谈渐进式优化LinuxPcap抓包历程(部分附代码)

最近一直在做pcap抓包,需求很简单就是指定一个或多个bpf语句抓计算机上所有网卡。不考虑性能开销和资源开销的话,实现方式很多。优化过程很长,主要考虑是线程数量的优化,以及使用非阻塞函数pcap_dispatch过程中产生pcap实例延迟问题。记下此文希望大家都能掌握这些技巧。

二次元怪兽的博客 1260

sap销售发货的流程_SAP销售订单发货后如何实现发票的自动创建?

问SAP销售订单发货后如何实现发票的自动创建?答业务场景有些快消零售企业,SAP系统单据量大,单据金额少,一般在销售发货后即可确认收入。此时无需人工在系统内操作VF01或者VF04进行开票操作,可将该操作设置成后台作业进行自动批量开票,具体操作如下:1、定义任务:VF06输入完以上信息,点击保存进入以下界面:说明:当前日期的意思是“开票的日期”等于“系统电脑中的当前日期”当前日期+/-...

weixin_42358409的博客 3365

使用libpcap tcpdump wireshark抓包

参考 tcpdump & libpcap官网 使用PCAP获取数据包纳秒(ns)级精度的时间戳(timestamp) tcpdump/libpcap中捕获数据包的时间戳 基于libpcap多网卡抓包编程心得 在LINUX系统下使用libpcap,一些流程 Python-对Pcap文件进行处理,获取指定TCP流 PCAP文件格式分析(做抓包软件之必备) pcap文件格式 Pcap文件头2......

黑客三遍猪 2912

MATLAB实战:从零推导合成孔径雷达(SAR)后向投影(BP)算法核心公式与代码实现

本文详细介绍了如何使用MATLAB从零推导合成孔径雷达(SAR)后向投影(BP)算法的核心公式与代码实现。通过基础概念讲解、数学原理推导、距离维脉冲压缩实现及完整MATLAB代码展示,帮助读者掌握SAR成像的关键技术。特别针对BP算法的优化技巧和常见问题提供了实用解决方案,适合雷达信号处理领域的开发者和研究者参考。

weixin_28683689的博客 251

宇树G1二次开发资料汇总

宇树科技G1是一款29自由度的商业级人形机器人,配备NVIDIA Jetson Orin NX计算平台和完整SDK生态。本文系统介绍了G1的硬件架构、29个关节配置、传感器外设、双计算单元设计等关键信息,并详细解析了软件生态体系,包括C++/Python SDK、ROS2接口、仿真工具和AI框架。开发者可通过DDS通信实现高层运动控制或底层关节级精确控制,支持快速二次开发。文档提供了网络配置、接口调用示例等实用指南,帮助开发者高效利用该平台进行人形机器人应用开发。

m0_47999117的博客 1318

Linux下用libpcap如何对多网卡抓包,找不到打开多网卡的函数啊!!!!

<br />pcap_lookeupdev(),只能返回一个网卡的标识,不像winpcap下的findalldev()返回的是一个链表........所以多网卡抓包对linux是不是个盲区啊

lghray的专栏 1355

主题045:四足机器人的运动仿真

四足机器人(Quadruped Robot)是模仿哺乳动物四肢运动设计的机器人系统,具有优异的地形适应性和运动稳定性。与双足机器人相比,四足机器人在静态和动态稳定性方面具有天然优势,能够在复杂地形(如楼梯、斜坡、碎石地面)上稳定行走,因此在野外探索、救援任务、军事应用等领域具有广阔的应用前景。本教程将介绍四足机器人的运动学建模、步态规划、稳定性分析和控制策略,并通过Python仿真验证相关理论。典型的四足机器人每条腿包含3个关节:常见的腿部构型包括:对于单腿,足部位置 pfoot\mathbf{p}_{fo

kkchenjj的博客 682

libpcap让我再次惊奇

        新的神州数码802.1x客户端虽然效率有待提高,代码有待优化整理,但是总算是可以使用了,接下来的事情就是关注于向linux平台的移植,因为在windows平台开发时使用的时winpcap,所以在考虑移植问题的时候首先想到的就是libpcap了        原先的时候曾经在网上看到过一些文章,关于linux下的抓包嗅探啦,网络安全工具的构建了,基本上都是libpcap和libnet

冰点的专栏[bingdian3721] 8902

手把手教您 Claude 桌面端无需账号订阅,免费接入国产自定义大模型(Claude Desktop 绕过订阅限制,接入任意自定义 AI 模型)

无需官方账号,也能畅玩Claude桌面端!本文详解Claude Desktop如何跳过登入接入自定义大模型,轻松解锁Cowork、Code等强大功能🚀

XiaoqiangClub的博客 5415

Qt C++ 的虚拟演播室系统

**数据流转**:OpenCV 处理的图像格式通常是 `cv::Mat`,而 Qt 3D 渲染需要 `QImage` 或 `QTexture2D`。// 临时用颜色代替。// 前景在背景前面。#### 3.3 主窗口与 Qt 3D 集成 (`mainwindow.h` / `.cpp` / `.ui`)* **更复杂的 3D 场景**:加载 3D 模型(.obj, .gltf 等)作为背景和道具。1. **构建项目**:确保 `.pro` 文件中的 OpenCV 路径配置正确,然后构建项目。

寒寒豆豆软件公司的博客 112

Pcap4J抓包基本使用方法

Pcap4J抓包基本使用方法说明:使用:第一步:第二步:抓包:例子的一些扩展:抓包后处理:Pcap4J内置支持的协议报文类型TIPS: 说明: 之前的项目需要一个Windows和Linux平台都能用的抓包模块,搜了之后发现jnetpcap、jpcap都已经很久没有更代码了,而且跨平台支持不好,所以考虑用Pcap4J。 Pcap4J和jNetPcap相同之处,都是基于libpcap/winpcap的...

alexsjr的博客 1万+

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Wireshark 与 tcpdump 对比评测:3大场景下的抓包策略与性能分析

本文深入对比了Wireshark与tcpdump两大抓包工具在远程抓包、大流量捕获和协议解析等核心场景下的性能差异与优化策略。通过实测数据展示tcpdump在资源占用和稳定性上的优势,以及Wireshark在协议深度解析和可视化分析方面的不可替代性,为网络工程师提供场景化工具选择指南。

weixin_33796205的博客 409

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

winpcap & libpcap

拿到一个大神给我的程序在ubuntu下编译.m4 flex libpcap libnet一路make, install过来.so 蛋疼..最后make他的程序后sudo成功跑出来了.欣慰....然后很无聊的帮他分分文件....然后在win32下准备编译.重新下了全部库.发现他用了许多linux下特有的库,被迫重新写.将驱动重写了.  while((res = pcap_next_ex( fp, &header, kt_data)) >= 0) { if(res == 0) c

PopACai@IS.SJTU 421

网络安全入门必学:Wireshark抓包全解析,从安装到实战技巧收藏

安置Wireshark(主机系统或应用程序);开始抓包;本书的前言曾提到过网络排障以及内置于Wireshark能帮助排障的各种工具。一旦决定动用Wireshark协议分析软件,在使用该物品或服务之前,那么,我们需要首先明确这个软件在网络环境中的具体安装位置和配置方式(或安装)位置。除此之外,此外,针对该软件,我们需要进行一些基础性的设置工作,至少应该让它的界面显得更加友善和易于使用。

2301_79455190的博客 160

pcap_stats引起进程阻塞问题

pcap_stats用于libpcap获取在线抓包统计情况,统计数据里包括libpcap丢包情况等。但pcap_stats被用到抓包回调函数中,当系统配置多块网卡,其中某一块网卡抓到包,PcapProcessLivePacket被回调,接着执行StatDropPacket()--调用pcap_stats,它会获取其它网卡抓包情况,而如果其它网卡没有数据,则pcap_stats导致调用进程阻塞。 方案一:改造StatDropPacket函数: voidStatDropPacket(pcap_t *p).

wangzhicheng2013的专栏 739
上一篇: MPTCP包结构
下一篇: ubuntu新版wireshark的升级与回退
bryanting
博客等级 码龄14年 27粉丝 16原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值