LIBIPQ(3)

NAME
libipq —— iptables用户空间数据包排队库

SYNOPSIS

#include <linux/netfilter.h>
#include <libipq.h>

DESCRIPTION
libipq是一个iptables用户空间数据包排队开发库。

用户空间数据包排队
Netfilter提供一个机制,将数据包送到栈外在用户空间排队,然后这些数据包送回内核并附带上一个如何处理这个数据包的决定(比如ACCEPT或DROP)。这些数据包在送回内核之前还可能在用户空间被修改。

对于每个支持的协议,内核模块调用一个Netfilter注册的队列handler以机械地将数据包送出到用户空间或从用户空间接回。

IPv4的标准的队列handler是ip_queue。其被作为一个2.4内核的实验模块提供,使用一个Netlink套接字在内核/用户空间交换数据。

一旦载入ip_queue,可以通过QUEUE目标将IP数据包挑选出来排队到用户空间处理。例如,运行下面的命令:

# modprobe iptable_filter
# modprobe ip_queue
# iptables -A OUTPUT -p icmp -j QUEUE

将导致任意本地产生的ICMP数据包(比如,ping的输出)被发送到ip_queue模块,此模块将尝试将这些数据包递送到用户空间的应用。如果没有用户空间的应用来处理它们,它们将被丢弃。

一个应用可以通过libipq接收和处理这些数据包。

Libipq概述
Libipq提供一组API以于ip_queue交互。下面是API用法的一个概述,细节参看各函数的手册页。

初始化
为了初始化此库,调用ipq_create_handle(3)。这将尝试与ip_queue使用的Netlink套接字捆绑并返回一个上下文无关的句柄,此句柄用于接下来的库调用。

设置排队模式
ipq_set_mode(3)允许应用指定拷贝到用户空间的数据,是仅数据包的元数据还是数据包负载和数据包元数据。这也用于告诉ip_queue一个应用已经准备好接收排队消息。

从队列中接收数据包
ipq_read(3)等待ip_queue的队列消息,并将它们拷贝到指定的缓冲。队列消息可以是数据包消息或错误消息。

可以通过ipq_message_type(3)确定数据包类型。

如果收到一个数据包消息,元数据和可选的负载可以通过ipq_get_packet(3)获取。

通过ipq_get_msgerr(3)获取一个错误消息的值。

对数据包下发判决
做出如何处理数据包的决定,可选的返回一个修改过的数据包给内核,可以调用ipq_set_verdict(3)。

错误处理
对应于内部错误变量ipq_errno的一个错误字符串可以通过ipq_errstr(3)获取。

对于简单的应用,调用ipq_perror(3)可以打印与ipq_errstr(3)相同的消息,还附带打印全局变量errno(如果设置了的话)的信息到stderr。

清理
调用ipq_destroy_handle(3)以释放Netlink套接字并销毁上下文句柄相关的资源。

SUMMARY
ipq_create_handle(3)
初始化库,返回上下文句柄。

ipq_set_mode(3)
设置排队模式,是仅拷贝数据包元数据,还是负载和元数据一起拷贝到用户空间。

ipq_read(3)
等待ip_queue送过来的排队消息,并将它读取到缓冲区。

ipq_message_type(3)
确定缓冲区里面的消息类型。

ipq_get_packet(3)
从缓冲区中获取一个数据包消息。

ipq_get_msgerr(3)
从缓冲区中获取一个错误消息。

ipq_set_verdict(3)
对一个数据包下达判决,可选的,替代它的内容。

ipq_errstr(3)
返回一个与内部ipq_errno变量相关的错误消息。

ipq_perror(3)
打印错误消息到stderr的助手函数。

ipq_destroy_handle(3)
销毁上下文句柄和关联的资源。

EXAMPLE
下面是一个简单应用的例子,它获取数据包并对每个数据包下达NF_ACCEPT判决。

更多libipq应用的例子可以在Netfilter的FAQ找到。

DIAGNOSTICS
有关ip_queue的检测和调节的信息,参见Linux 2.4 Packet Filtering的HOWTO。

如果一个应用修改一个数据包,它还需要更新此数据包的校验和。典型的,内核将丢弃那些校验和无效的数据包。

SECURITY
进程要求CAP_NET_ADMIN权限以访问内核ip_queue模块。这样的进程可以访问和修改任意由内核收到,生成,转发的IP数据包。

TODO
Per-handle ipq_errno values.

BUGS
Probably.

AUTHOR
James Morris <jmorris@intercode.com.au>

COPYRIGHT
Copyright (c) 2000-2001 Netfilter Core Team.

Distributed under the GNU General Public License.

CREDITS
Joost Remijn实现了ipq_read的超时特性,此特性出现在iptables的1.2.4释出版本。

Fernando Anton添加了IPv6的支持。

SEE ALSO
iptables(8), ipq_create_handle(3), ipq_destroy_handle(3),
ipq_errstr(3), ipq_get_msgerr(3), ipq_get_packet(3), ipq_mes‐
sage_type(3), ipq_perror(3), ipq_read(3), ipq_set_mode(3), ipq_set_ver‐
dict(3).

The Netfilter home page at http://netfilter.samba.org/ which has links
to The Networking Concepts HOWTO, The Linux 2.4 Packet Filtering HOWTO,
The Linux 2.4 NAT HOWTO, The Netfilter Hacking HOWTO, The Netfilter FAQ
and many other useful resources.

libipq —— iptables用户空间数据包排队库的更多相关文章

  1. Linux iptables原理--数据包流向

    Iptable与Netfilter 在上一篇文章 linux iptables常用命令--配置一个生产环境的iptables 我们知道iptables有好几个表,如raw,mangle,nat,fil ...

  2. 创建MySQL用户 赋予某指定库表的权限 flush privileges才能生效!!!!;@'localhost'授权本地,@'%'授权远程

    update ERROR 1364 (HY000): Field 'ssl_cipher' doesn't have a default value 建议使用GRANT语句进行授权,语句如下: gra ...

  3. maven安装 maven上传jar包到库里面

    maven的安装与配置:http://pansanday.blog.163.com/blog/static/381662802012727103454743/ maven上传jar包到库里面: 将私有 ...

  4. 创建MySQL用户 赋予某指定库表的权限

    摘自: http://renxiangzyq.iteye.com/blog/763837 update ERROR 1364 (HY000): Field 'ssl_cipher' doesn't h ...

  5. 自定义ClassLoader,用于加载用户JAR包

    最近在考虑C/S结构程序的软件自动升级的实现方式,比如QQ.飞信等都自动升级的功能. 自动升级模块虽然还没有编码完成,但是思路还是比较清晰的. 自动升级过程中,升级文件的JAR包是专门加载到程序中去的 ...

  6. Python中的import,from...import以及模块、包、库的概念

    首先,说明一下,我使用的是python3.6.3win32版本,使用的IDE是pycharm2017社区免费版. 刚开始接触python编程不久,有很多概念都不是特别清楚,但是我觉得既然选择,尽自己最 ...

  7. python中模块、包、库的区别和使用

    模块:就是.py文件,里面定义了一些函数和变量,需要的时候就可以导入这些模块. 包:在模块之上的概念,为了方便管理而将文件进行打包.包目录下第一个文件便是 __init__.py,然后是一些模块文件和 ...

  8. 基于ArcEngine的空间数据通用建库软件介绍

    最近花了点时间把之前的空间数据入库功能进行了完善,在这里做一个简单的介绍,也希望大家给提点意见和建议,我的目标是做一个好用.易用.通用.稳定的入库程序. 1.软件特点: 基于模板(方案)的数据更新   ...

  9. python中模块,包,库的概念

    模块:就是.py文件,里面定义了一些函数和变量,需要的时候就可以导入这些模块. 包:在模块之上的概念,为了方便管理而将文件进行打包.包目录下第一个文件便是 __init__.py,然后是一些模块文件和 ...

随机推荐

  1. 使用JDK自带jvisualvm监控tomcat

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  2. cocos2d-x 获取图片的某像素点的RGBA颜色

    转自:http://www.cnblogs.com/jaoye/archive/2013/02/19/2916501.html ccColor4B c = {, , , }; CCPoint pt = ...

  3. Android AndroidManifest 清单文件以及权限具体解释

    每一个Android应用都须要一个名为AndroidManifest.xml的程序清单文件,这个清单文件名称是固定的而且放在每一个Android应用的根文件夹下.它定义了该应用对于Android系统来 ...

  4. cdoj 92 Journey tarjan/lca 树上点对距离

    Journey Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/92 Descri ...

  5. 【每日一摩斯】-【序列】-续-RAC and Sequences (853652.1)

    一个简单的sequence有什么可以说的呢?如果再这样认为就大错特错了... 也许以下几点高人们都很清楚,但至少对于我来说,之前是陌生的,或者说是忽略的. 1.CREATE SEQUENCE seq; ...

  6. 常用Linux运维命令

    1.查看TCP连接状态 netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn netstat -n | awk '/^tcp/ {++S[$NF]} ...

  7. php笔记01:php基本语法格式

    1. <?php ....... ?> 2. <script laugnage="php"> ....... </script> 3. < ...

  8. JS类型(2)_JS学习笔记(2016.10.02)

    undefined undefined是全局对象(window)的一个特殊属性,其值是未定义的.但 typeof undefined 返回 'undefined' . 虽然undefined是有特殊含 ...

  9. C# 判断路径是否存在

    定义文件状态枚举:0-路径为空,1-存在文件,2-路径不为空,但文件不存在 public enum FileExsitStatus { NoPath=0, FileExsit=1, NoFile=2 ...

  10. EL标签库

    首先要导入jar包 jst1.jar   standard.jar 在页面中引入标签库 <%@taglib uri="..." prefix=".."%& ...