转自:PF_RING开发指南-yww680169-ChinaUnix博客

1.       概述

PF_RING是Luca Deri发明的提高内核处理数据包效率,并兼顾应用程序的补丁,如Libpcap和TCPDUMP等,以及一些辅助性程序(如ntop查看并分析网络流量等)。PF_RING是一种新型的网络socket,它可以极大的改进包捕获的速度。并且有如下特征:

1) 可以用于Linux 2.6.18以上的内核;

2) 4.x版本的PF_RING可以直接应用于内核,不需要给内核打补丁;

3) PF_RING驱动可以进行包捕获的加速;

4) 支持使用商用网络适配器的10 GB的硬件包过滤

5) 设备驱动无关(推荐使用支持NAPI的网卡(intel网卡)来获得最好的性能);

6) 基于内核的包捕获和采样;

7) Lipcap支持与基于pcap的应用程序的无缝集成;

8) 可以指定上百个头过滤到BPF中;

9) 内容检查,以至于只有符合负载过滤的包才能通过;

10)PF_RING的插件可以用于增强包解析和内容过滤;

11)可以工作在混杂模式(经过网卡的报文全部可以被捕获到);

官网:

最新版本4.7,下载网址<。

最新版本的目录结构:

Drivers/

Drivers/Broadcom/

Drivers/Intel/

Drivers/myricom/

Kernel/    内核有关的补丁

Userland/  用户空间代码

Userland/lib 用户空间库用于控制PF_RING

Userland/libpcap-xxx-ring PF_RING支持的Libpcap增强库

Userland/examples/ 包计数应用(使用它作为测试使用)

2.       编译

编译安装PF_RING之前需要卸载原来的网卡驱动,卸载之前使用ethtool命令查看当前网卡的类型和驱动版本。

# ethtool -i ethx

# lsmod | grep e1000e

# rmmod e1000e           此处为e1000e驱动

注:如果使用ssh远程卸载驱动会造成网络不能连接,务必现场操作。

2.1.  编译内核

解压缩PF_RING安装包,进入到Kernel目录下编译和安装内核补丁。

# tar -zxf PF_RING.4.7.0.tar.gz

# cd PF_RING.4.7.0/kernel

# make

# sudo make install             内核安装需要root用户权限

insmod /kernel/pf_ring.ko [transparent_mode=0|1|2]

[min_num_slots=x][enable_tx_capture=1|0][enable_ip_defrag=1|0][quick_mode=1|0]

实例:

# sodu insmod pf_ring.ko transparent_mode=1

当PF_RING激活时,会创建/proc/net/pf_ring目录,使用cat命令查看设置:

# cat /proc/net/pf_ring/info

注1:为了编译PF_RING内核模块,你需要安装Linux内核的头文件(或者内核源代码)。

2.2.  编译用户空间PF_RING库

进入到用户空间库userland/lib下,编译和安装。

# cd ../userland/lib

# ./configure

# make

# sodu make install

如果需要使用libpcap抓包分析,请卸载之前安装的libpcap,然后进入/userland/libpcap-xxx-ring/目录下配置、编译和安装驱动。

# rpm -qa libpcap    查看安装的libpcap,如果有libpcap则强制卸载

# rpm -e libpcap --nodefs

# cd ../libpcap

# ./configure

# make

# sudo make install

注:为了使用PF_RING的优点,请使用PF_RING使能的libpcap.a重新编译应用。

进入到userland/examples目录编译例子程序。

# cd /userland/examples

# make

# ./pfcount -i eth0     捕获eth0网口的数据报文

注:使用drivers/intel/ixgbe下的驱动(支持DNA的ixgbe驱动的网卡)+DNA驱动技术可以达到线速采集,PF_RING模块必须在DNA驱动之前加载。

2.3.  编译网卡的驱动

进入到drivers目录下,根据ethtool -i ethx命令查看的网卡类型和驱动进入指定的目录进行编译和安装。

# cd ../../ drivers/intel/e1000e/e1000e-1.3.10a/src

# make

# sodu make install

开始安装驱动,进入/lib/modules//kernel/net目录,可以看到有pf_ring目录,进入到该目录下进行PF_RING模块的安装。

# sodu insmod pf_ring.ko transparent_mode=1

安装网卡驱动,进入到目录lib/modules//kernel/drivers/net下进行网卡驱动安装。

# sodu insmod e1000e.ko

# sodu modprobe e1000e  (只能载入/lib/modules//中模块)

安装完毕,使用dmesg命令查看驱动是否安装成功,如果成功的话,可以看到:

# dmesg

[PR_RING]…… 信息。

PF_RING会安装一个类型为27的协议簇,可以使用sock(PF_RING, SOCK_RAW,0)打开一个socket,使用libpcap的朋友不需要修改程序,需要重新编译,链接的时候请加上libpfring.so。

启动自动加载PF_RING模块,修改/etc/modprobe.conf文件

# vi /etc/modprobe.conf

在文件的尾部增加一行 modprobe pf_ring

系统重启后内核会自动加载pf_ring模块,modprobe只能加载/lib/modules下的模块。

3. 使用

使用用户空间中的PF_RING库API来编写代码,并且使用用户空间中的libpfring.a和libpcap.a编译代码就可以使用PF_RING来提高包捕获的性能。

请详细的内容请参考网址:

用户手册:

【转】PF_RING开发指南相关推荐

  1. PF_RING开发指南

    源码分析参考: http://bbs.chinaunix.net/thread-1943951-1-1.html 1.       概述 PF_RING是Luca Deri发明的提高内核处理数据包效率 ...

  2. 最全面的Unity游戏开发指南视频教程 第2卷

    最全面的Unity游戏开发指南视频教程 第2卷 流派:电子学习| MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz 语言:英语+中英文字幕(根据原英文字幕机译更准确)|大小 ...

  3. Linux 汇编语言开发指南

    Linux 汇编语言开发指南 肖文鹏 (xiaowp@263.net), 北京理工大学计算机系硕士研究生 本文作者 肖文鹏是北京理工大学计算机系的一名硕士研究生,主要从事操作系统和分布式计算环境的研究 ...

  4. 《Python和Pygame游戏开发指南》——2.16 pygame.display.update()函数

    本节书摘来自异步社区<Python和Pygame游戏开发指南>一书中的第2章,第2.16节,作者[美]Al Sweigart(斯维加特), 李强 译,更多章节内容可以访问云栖社区" ...

  5. 400 多行代码!超详细 Rasa 中文聊天机器人开发指南 | 原力计划

    作者 | 无名之辈FTER 责编 | 夕颜 出品 | 程序人生(ID:coder_life) 本文翻译自Rasa官方文档,并融合了自己的理解和项目实战,同时对文档中涉及到的技术点进行了一定程度的扩展, ...

  6. Knockout应用开发指南 第六章:加载或保存JSON数据

    原文:Knockout应用开发指南 第六章:加载或保存JSON数据 加载或保存JSON数据 Knockout可以实现很复杂的客户端交互,但是几乎所有的web应用程序都要和服务器端交换数据(至少为了本地 ...

  7. iOS开发指南 从Hello World到App Store上架 第5版

    iOS开发指南 从Hello World到App Store上架 第5版 关东升 著 ISBN:9787115450630 包装:平装 开本:16开 正文语种:中文 出版社: 人民邮电出版社 出版时间 ...

  8. 《jQuery EasyUI开发指南》——10.4 迭代开发

    本节书摘来自异步社区<jQuery EasyUI开发指南>一书中的第10章,第10.4节,作者:王波著,更多章节内容可以访问云栖社区"异步社区"公众号查看 10.4 迭 ...

  9. 《Node.js开发指南》书评汇总

    刚查了下库存,发现订阅<Node.js开发指南>的读者大增,这是为什么呢?看了下近期本书在豆瓣的评论,口碑很好,现将豆瓣的书评汇总如下: ------------------------- ...

最新文章

  1. RDKit | 删除方差低的描述符
  2. putty ubuntu服务器 上传文件,教你如何使用PuTTY上传文件?
  3. input file 上传文件格式限制
  4. Android将数据库数据导出成excel格式的文本(CSV)
  5. 第一季2:视频设备开发的技术流
  6. Java笔记-Java中桥接模式
  7. 【转】Windows消息投递流程:WM_COMMAND消息流程
  8. 类型配置命名空间 —— XML schema
  9. IP地址,子网掩码,默认网关,DNS服务器是什么意思?
  10. zrender源码分析4--初始化Painter绘图模块2
  11. VS2013 应用程序无法正常启动0xc0150002
  12. 计算机每天定时开机设置方法,定时开机 (电脑自动开机) 设置方法
  13. speedoffice如何在Word文档中输入美元符号
  14. android qq截屏快捷键是什么,手机截屏的快捷键是什么,超过3种截图的快捷键操作方法!...
  15. rJava install error “JAVA_HOME cannot be determined from the Registry“
  16. CSDN文章发布以后显示待审核
  17. 使用一片四运放LM324组成所需电路
  18. soft prompt 示例代码
  19. 英文中数字、表达式、符号的读法
  20. PyTorch图神经网络实践(六)组合优化问题

热门文章

  1. 【OS学习笔记】一 处理器、内存和指令
  2. jz2440开发板移植U-boot之修改代码支持DM9000网卡
  3. Linux空硬盘从分区到挂载
  4. C#细说多线程(下)
  5. 循序渐进PYTHON3(十三) --4-- DJANGO之CSRF使用
  6. android UI布局
  7. 2014.9.13模拟赛【数位和乘积】
  8. EAT/IAT Hook
  9. HTTP、TCP、UDP、Socket (转)
  10. .gitignore文件_Java小白入门,Git忽略文件.gitignore详解