一、简单介绍

pcapReader是ndpi开源中的一个example。

大家能够从<ndpi directory>/example/pcapReader.c中找到它的源码。通过pcaplib和ndpi相结合。进行深度包检測。尽管仅仅有短短的几行代码,可是他将展现的不仅是pcaplib和ndpi的用法,还有包分析的一些技巧。看完之后事实上外国人写的程序也就是那样,并没有什么特别之处。我们先来一起看看主要的函数结构。

注:我们仅仅对源代码中的linux平台部分进行解释

在main函数中,通过调用test_lib()对程序进行整合。

         
      这里限于篇幅,主要对runPcapLoop()函数中的动作进行分析。假设想理解其它函数或者更加具体的技术细节,能够阅读博客最后的源代码附录。里面有比較具体的凝视。假设还有问题,能够留言或者发一下私信。欢迎大家一起讨论。

二、包分析

        runPcapLoop()函数中通过pcap_loop(_pcap_handle, -1, &pcap_packet_callback, NULL)进行循环抓包。pcap_loop是pcaplib中提供的api。

_pcap_handle指向的是网卡设备,pcap_packet_callback是循环抓包之后的包处理函数,-1代表的是不停地抓直到抓包出错的时候停止。

接下来我们针对pcap_packet_callback函数中的包处理进行分析


1)pcap_packet_callback函数

pcap_packet_callback函数中,按顺序分成4个主要部分:

         1、ndpi_ethhdr进行数据链路层的拆包分析。针对Linux Cooked Capture 和vlan的特殊包结构。

对包头和信息进行了相应的偏移,而且记录在ip_offset变量中。

         2、ndpi_iphdr进行网络层的拆包。

这里进行了ipv4和ipv6的检測。我们接下来仅仅对ipv4进行介绍。

         3、GTP隧道协议的处理
         4、packet_processing()函数进一步的包处理
         注:2中的网络层拆包存储在iph变量中,并在packet_processing()中作为ndpi协议检測的数据源
          
packet_processing函数作为ndpi分析的主体,这里通过get_ndpi_flow函数分类会话。然后利用ndpi_detection_process_packet函数进行数据分析得到应用层协议。我们继续往下看看get_ndpi_flow是如何建立起数据结构的。
       注:get_ndpi_flow6针对ipv6进行了转换,最后还是通过get_ndpi_flow建立

2)get_ndpi_flow函数

get_ndpi_flow函数:
posted @ 2017-07-18 09:10 yxysuanfa 阅读(...) 评论(...) 编辑 收藏

pcapReader——源代码分析的更多相关文章

  1. 协议的注冊与维护——ndpi源代码分析

    在前面的文章中,我们对ndpi中的example做了源代码分析.这一次我们将尽可能深入的了解ndpi内部的结构和运作.我们将带着以下三个目的(问题)去阅读ndpi的源代码. 1.ndpi内部是怎么样注 ...

  2. android-plugmgr源代码分析

    android-plugmgr是一个Android插件加载框架,它最大的特点就是对插件不需要进行任何约束.关于这个类库的介绍见作者博客,市面上也有一些插件加载框架,但是感觉没有这个好.在这篇文章中,我 ...

  3. Twitter Storm源代码分析之ZooKeeper中的目录结构

    徐明明博客:Twitter Storm源代码分析之ZooKeeper中的目录结构 我们知道Twitter Storm的所有的状态信息都是保存在Zookeeper里面,nimbus通过在zookeepe ...

  4. 转:SDL2源代码分析

    1:初始化(SDL_Init()) SDL简介 有关SDL的简介在<最简单的视音频播放示例7:SDL2播放RGB/YUV>以及<最简单的视音频播放示例9:SDL2播放PCM>中 ...

  5. 转:RTMPDump源代码分析

    0: 主要函数调用分析 rtmpdump 是一个用来处理 RTMP 流媒体的开源工具包,支持 rtmp://, rtmpt://, rtmpe://, rtmpte://, and rtmps://. ...

  6. 转:ffdshow 源代码分析

    ffdshow神奇的功能:视频播放时显示运动矢量和QP FFDShow可以称得上是全能的解码.编码器.最初FFDShow只是mpeg视频解码器,不过现在他能做到的远不止于此.它能够解码的视频格式已经远 ...

  7. UiAutomator源代码分析之UiAutomatorBridge框架

    上一篇文章<UIAutomator源代码分析之启动和执行>我们描写叙述了uitautomator从命令行执行到载入測试用例执行測试的整个流程.过程中我们也描写叙述了UiAutomatorB ...

  8. MyBatis架构设计及源代码分析系列(一):MyBatis架构

    如果不太熟悉MyBatis使用的请先参见MyBatis官方文档,这对理解其架构设计和源码分析有很大好处. 一.概述 MyBatis并不是一个完整的ORM框架,其官方首页是这么介绍自己 The MyBa ...

  9. hostapd源代码分析(三):管理帧的收发和处理

    hostapd源代码分析(三):管理帧的收发和处理 原文链接:http://blog.csdn.net/qq_21949217/article/details/46004379 这篇文章我来讲解一下h ...

随机推荐

  1. 查找闲置ip

    首先ping 一下该网段的广播地址,如ping 192.168.0.255 ,然后使用arp -a就可以查看到那些地址是被使用的,以及网卡的mac值.剩余的是暂时还未被使用的,当然没开机的机器就看不出 ...

  2. Objective-C 正则表达式使用(1)

    学习了一下OC的正则表达式备忘一下 使用正则表达式的步骤: 创建一个一个正则表达式对象:定义规则. 利用正则表达式对象测试,相应的字符串. NSString *userName = @"12 ...

  3. python模块--random

    random主要用于生成随机字符串等,例如登录页面上随机字符串验证. random常用方法: import random print(random.randrange(1, 10)) # 返回1-10 ...

  4. Knockout v3.4.0 中文版教程-16-控制流-foreach绑定

    2. 控制流 1. foreach绑定 目的 foreach绑定会遍历一个数组,为每个数组项生成重复的元素标记结构并做关联.这在渲染列表或表格的时候特别有用. 假设你的数组是一个监控数组,之后无论你进 ...

  5. 【编程工具】Sublime Text3的安装和常用插件推荐

    本人刚刚学习 HTML,曾经上网找过一些编写 HTML 的软件,但感觉都不太好,经过三挑四选下,最终我决定选择 Sublime Text3 这款软件来作为学习工具,上网找到了许多实用的插件,在这里给大 ...

  6. 4A. Just a Hook

    4A. Just a Hook Time Limit: 2000ms Case Time Limit: 2000ms Memory Limit: 32768KB   64-bit integer IO ...

  7. TOJ 4815: 关押罪犯

    4815: 关押罪犯 Time Limit(Common/Java):10004MS/12000MS     Memory Limit:65536KByte Total Submit: 2       ...

  8. hdu6060[贪心+dfs] 2017多校3

    /* hdu6060[贪心+dfs] 2017多校3*/ #include <bits/stdc++.h> using namespace std; typedef long long L ...

  9. 深入了解类加载过程及Java程序执行顺序

    前言 在Java中,静态 Static关键字使用十分常见 本文全面 & 详细解析静态 Static关键字,希望你们会喜欢 目录 1. 定义 一种 表示静态属性的 关键字 / 修饰符 2. 作用 ...

  10. 跟着xiaoxin巨巨做cf

    cf 385 C. Bear and Prime Numbers 题目大意:有一个数列{xi},每次给出一个询问[l, r],即问 S(l ,r)是l和r之间的素数,f(p)表示数列{xi}中整除p的 ...