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 <[email protected]>

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.

时间: 2024-10-11 05:51:52

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

创建MySQL用户 赋予某指定库表的权限 flush privileges才能生效!!!!;

update ERROR 1364 (HY000): Field 'ssl_cipher' doesn't have a default value 建议使用GRANT语句进行授权,语句如下: grant all privileges on *.* to [email protected]'%' identified by "root"; --------------------------------------------------- GRANT SELECT,INSERT,UP

ubuntu系统下wireshark普通用户抓包设置

dumpcap需要root权限才能使用的,以普通用户打开Wireshark,Wireshark当然没有权限使用dumpcap进行截取封包. 虽然可以使用 sudo wireshark 但是,以sudo的方式用root打开Wireshark显然是不安全的,也不是很方便,因为得到的封包数据也属于root用户. 解决这个问题的办法——可以使用用户组功能使用Wireshark,具体操作: 1.添加wireshark用户组 sudo groupadd wireshark 2.将dumpcap更改为wire

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

摘自: http://renxiangzyq.iteye.com/blog/763837 update ERROR 1364 (HY000): Field 'ssl_cipher' doesn't have a default value 建议使用GRANT语句进行授权,语句如下: grant all privileges on *.* to [email protected]'%' identified by "root"; -----------------------------

用户目录链接第三方库

用户目录链接第三方库 最近在看公司代码时遇到了引用第三方库boost,于是就去Google上找了安装包,但是在公司主机上,用户是没有root权限的所以没法安装.于是研究了下用户目录引用第三方库问题. 下载安装boost 参考: https://blog.csdn.net/u011641865/article/details/73498533 设置环境变量LD_LIBRARY_PATH 将第三方库放在目标路径,我这里是 /data01/nmjf/zhengch3/usr/local/lib 如果没

rstudio server让用户共享一个library库

如果还没部署好rstudio server的请先看这里: http://blog.fens.me/r-rstudio-server/ 分配好用户,并设好分组之后, 可以使用.libPaths()看到library路径 > .libPaths() [1] "/home/xxx/R/x86_64-pc-linux-gnu-library/3.0" "/usr/local/lib/R/site-library" [3] "/usr/lib/R/site-l

Mac用户抓包软件Charles 4.0 破解 以及 抓取Https链接设置

相信大家曾经都是Window的用户,作为前端哪能没有一款抓包工具,抓包工具可以非常便捷的帮助我们分析接口返回报文数据,快速定位问题. 曾经横扫window用户的Fiddler便是我们的挚爱,然而,作为前端开发者还是习惯用高大上的MAC进行开发,本次博客将给大家介绍MAC电脑如何安装抓包工具,以及如何设置HTTPS连接的抓取. 一.下载Charles 4.0 版本的软件. 链接: https://pan.baidu.com/s/1jI5j0O2 密码: u5r2 下载完成后,双击安装即可,直到安装

3. python中的包和库

3.1模块和包的概念 当代码越来越多时,当把所有的代码都集中于一个文件中时,难以维护 将代码分开放在不同的py文件中,易于维护,同一名字的变量和函数互不影响 如 #a.py x=5 def f1(): pass #b.py x='str' def f1(iterable): pass a.py和b.py中变量和函数互不影响 将a.py称为模块a,将b.py称为模块b,可见,模块的名字就是.py文件的名字 引入第三方的模块 #test.py import math print math.pow(2

iptables导致数据包过多时连接失败

前几天做服务器压力测试,本地10个线程不停的去向服务器建立连接,然后请求数据,然后连接再关闭,程序每运行几万次之后就会发现客户端程序没办法connect服务器,connect超时. 一开始怀疑是自己服务器的处理有问题,导致socket数过多没办法创建新的连接,现将系统中用户可以打开的最大文件数调成10w,继续进行压力测试,发现问题依然存在. 经过一些时间的检查之后,确定应该不是自己服务本身的问题,这时候想将iptables关闭试试,iptables里面是没有配置连接数限制的. 在关闭iptabl

xpack文件打包解包代码库

Github ###概述 xpack是一个文件资源打包工具及类库,可以对多文件进行打包解包. 其使用文件名的hash作为索引,建立hash索引表以加速文件查找. ###特性 支持hashid自动解冲突,即使添加的多个文件名hashid发生冲突也可以正常存取,不用担心文件名hash一样导致的添加失败问题 支持存储文件的原文件名,可以解包复原文件目录结构 支持文件分块存储,可以重复利用被删除文件的剩下的空闲块,提高资源包的空间利用率,提高资源删除的性能 支持寄生资源包,可以把资源包追加到其他文件中,