一、简单介绍
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函数:
webpack打包文件 可以npm cdn使用
Webpack的externals的使用
如何在微信小程序中使用iconfont
如何发布和取消发布 NPM 包?
js中数组对象去重的方法
小程序列表性能优化
wepy全局拦截器
js中prototype与__proto__的关系详解
JavaScript中本地对象、内置对象和宿主对象
- 最新文章
-
mybatis 自动更新表结构 ,兼容通用tkmapper
Ubuntu git 安装、生成sshkey、克隆、切换分支
spring mvc跨域设置(全局)
java 发送html邮件,苹果或者某些邮件客户端收到的内容为空白解决方案
springmvc+fastjson enum(枚举)支持属性get转json
C#最小化到托盘+双击托盘恢复+禁止运行多个该程序
wincc的服务器-客户机模式具体做法(全抄-未测试)
勿在浮沙筑高台
Anaconda使用
Oracle 中启用 scott 用户 的方法
- 热门文章
-
Win7安装Oracle Instantclient ODBC驱动 后配置DSN时出错的解决办法 SQORAS32
科来网络分析工具 (自己使用过 感觉还不错)
win2008R2 局域网共享
西门子 S7-200CN CPU 224CN EEPROM芯片
BAT 五路internet负载均衡
AndroidStudio虚拟机 "A system image must be selected to continue"问题解决
RN开发环境搭建
WebStorm 2018.3.2 激活方式(永久)
Vuex项目 ,使用module后, 如何调用其他模块的 属性值和方法?
Vue keep-alive