libipq —— iptables用户空间数据包排队库
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用户空间数据包排队库的更多相关文章
- Linux iptables原理--数据包流向
Iptable与Netfilter 在上一篇文章 linux iptables常用命令--配置一个生产环境的iptables 我们知道iptables有好几个表,如raw,mangle,nat,fil ...
- 创建MySQL用户 赋予某指定库表的权限 flush privileges才能生效!!!!;@'localhost'授权本地,@'%'授权远程
update ERROR 1364 (HY000): Field 'ssl_cipher' doesn't have a default value 建议使用GRANT语句进行授权,语句如下: gra ...
- maven安装 maven上传jar包到库里面
maven的安装与配置:http://pansanday.blog.163.com/blog/static/381662802012727103454743/ maven上传jar包到库里面: 将私有 ...
- 创建MySQL用户 赋予某指定库表的权限
摘自: http://renxiangzyq.iteye.com/blog/763837 update ERROR 1364 (HY000): Field 'ssl_cipher' doesn't h ...
- 自定义ClassLoader,用于加载用户JAR包
最近在考虑C/S结构程序的软件自动升级的实现方式,比如QQ.飞信等都自动升级的功能. 自动升级模块虽然还没有编码完成,但是思路还是比较清晰的. 自动升级过程中,升级文件的JAR包是专门加载到程序中去的 ...
- Python中的import,from...import以及模块、包、库的概念
首先,说明一下,我使用的是python3.6.3win32版本,使用的IDE是pycharm2017社区免费版. 刚开始接触python编程不久,有很多概念都不是特别清楚,但是我觉得既然选择,尽自己最 ...
- python中模块、包、库的区别和使用
模块:就是.py文件,里面定义了一些函数和变量,需要的时候就可以导入这些模块. 包:在模块之上的概念,为了方便管理而将文件进行打包.包目录下第一个文件便是 __init__.py,然后是一些模块文件和 ...
- 基于ArcEngine的空间数据通用建库软件介绍
最近花了点时间把之前的空间数据入库功能进行了完善,在这里做一个简单的介绍,也希望大家给提点意见和建议,我的目标是做一个好用.易用.通用.稳定的入库程序. 1.软件特点: 基于模板(方案)的数据更新 ...
- python中模块,包,库的概念
模块:就是.py文件,里面定义了一些函数和变量,需要的时候就可以导入这些模块. 包:在模块之上的概念,为了方便管理而将文件进行打包.包目录下第一个文件便是 __init__.py,然后是一些模块文件和 ...
随机推荐
- Android上实现仿IOS弹性ScrollView
[转]http://www.tuicool.com/articles/ummIJb
- IOS 图片阴影,圆角等处理
一直以来,为IOS添加图片的特殊效果都是通过跟美工的配合,比如,要加阴影,就从美工那边获得一张阴影效果图,在界面上画两个UIImageView,将阴影放在下面,图像放上上面,错开一定角度.有比如想做圆 ...
- 基于注解的Spring MVC整合Hibernate(所需jar包,spring和Hibernate整合配置,springMVC配置,重定向,批量删除)
1.导入jar watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R1enVvcXVhbg==/font/5a6L5L2T/fontsize/400 ...
- 10个你可能从未用过的PHP函数(转)
1. sys_getloadavg() sys_getloadavt()可以获得系统负载情况.该函数返回一个包含三个元素的数组,每个元素分别代表系统再过去的1.5和15分钟内的平均负载. 与其让服务器 ...
- C 二叉树 1
二叉链表: #define _CRT_SECURE_NO_WARNINGS #include <stdlib.h> #include <string.h> #include & ...
- 笨办法学C 练习
http://c.learncodethehardway.org/book/index.html
- [Effective C++ --023]宁以non-member、non-friend替换member函数
作者在这一节中花了大幅度的篇幅来介绍为什么最好使用non-member.non-friend函数. 思路如下: 场景:如果有一个class用来表示网页浏览器,那么清楚缓存及历史记录的时候,我们可能定义 ...
- Js_分页
public ActionResult Index(int? pageIndex) { List<string> data = new List<string>(); ; i ...
- 认识CoreData-多线程
CoreData使用相关的技术点已经讲差不多了,我所掌握的也就这么多了.... 在本篇文章中主要讲CoreData的多线程,其中会包括并发队列类型.线程安全等技术点.我对多线程的理解可能不是太透彻,文 ...
- DHCP服务自动分配IP地址原理
转载自:http://blog.csdn.net/lycb_gz/article/details/8499559 DHCP在提供服务时,DHCP客户端是以UDP 68号端口进行数据传输的,而DHCP服 ...