十五年测试老手,长期负责WEB\APP 项目测试,目前主要负责团队管理工作。

libnetfilter_queue setup(安装向导)

上一篇 / 下一篇  2013-11-17 17:37:40 / 个人分类:其它

文章来源
  • 文章来源:【转载】

%uw"[K~|&uKA8q0现一个开源社区非常让人郁闷的问题,内核版本的升级过程也将一些类库升级,却不能向前兼容。


Linux下有名的防火墙iptables/netfilter就存在这样的问题,结构体sk_buff在2.6版本内核升级中进行了修改,但网上大多资料还是关于以前版本的,这都不是主要问题,我觉
得主要问题是将引起用户编写的软件不能通用,鬼知道将要部署的服务器linux内核版本是多少啊。


当然,一批优秀的人将包过滤模块从内核态迁移到用户态编写程序,使用libipq和ip_queue等实现,这样能够极大的方便用户代码的调试,不然在内核中写程序,调试时出现一>点错误可能就死机了。不得不暴力重启看log...


回到正题,最初我以为libipq已经能够很好的解决我的问题了,没想到使用libipq编写代码会出现: field 'in' has incomplete type, 着实让人郁闷,最初还以为是linux/in.h头文件没有被保护到程序中,使用#define __KERNEL明确的开启选项后依然不行,这都不是重点,重点是2.6.14以后的内核版本好像出了一个新的库代替此功能,不清楚是原先
库德升级还是新德库,反正就是应该用libnetfilter_queue,而不应该使用libipq


于是很自然的来到网站:http://netfilter.org/projects/libnetfilter_queue/ 
网站提供libnetfilter_queue的download,并且指出依赖libnfnetlink,幸运的是网站也提供了libnfnetlink的download,于是赶紧下载下来开始安装,首先是libnfnetlink,
tar -jxvf *.tar.bz2解压,然后 ./configure & make, 安装成功。好像很顺利的样子,赶紧继续安装libnetfilter_queue.


使用同样的方法解压,然后./configure,出现以下问题:
configure: error: Cannot find libnfnetlink >= 0.0.41
郁闷了,不是刚刚已经成功安装libnfnetlink了吗?这可如何是好啊。于是网上查了部分资料,有人提到通过 pkg-config能够解决编译和链接路径不统一的问题。于是网上找了
一篇博客:http://blog.sina.com.cn/s/blog_4b3bae23010081fg.html 
博客中提到*.pc配置了编译和链接路径信息。于是手动设置
export PKG_CONFIG_PATH=path,  (path路径下面是*.pc) 
然后再一次./configure,居然可以了,表示不懂什么原因,有空好好研究以下linux的编译链接机制。


接着就happy的make一下,然后sb了,make出错了:

rp0}&J S&Y f7Mnj\0
libnetfilter_queue.c:32:39: fatal error: libnfnetlink/libnfnetlink.h: No such file or directory
51Testing软件测试网[/|W8C M7fj

然后find一下libnfnetlink.h, NND,只有libnfnetlink的解压目录下面有libnfnetlink.h,所以libnetfilter_queue肯定是找不到了,不过libnfnetlink中make干嘛去了呢?
于是我就特sb的将libnfnetlink 目录下的include下得libnfnetlink目录复制到/usr/include中,继续make,
51Testing软件测试网QAT Oi0rQ

/usr/bin/ld: cannot find -lnfnetlink

'u$?5L i2q0错误变了,换库找不着了,是不是意味着通过了编译,然后找不到库,链接失败.


然后赶紧:

4@-f wzh8WeM0
locate libnfnetlink
/usr/lib/libnfnetlink.so.0
/usr/lib/libnfnetlink.so.0.2.0

8VW%?B2Y-a#?0lib下是存在库德,是不是名字不对呢?试着修改名字:
51Testing软件测试网2v'e8z [ ]

ln -s /usr/lib/libnfnetlink.so.0 /usr/lib/libnfnetlink.so

然后make,成功了,真是非常优秀啊,下面接下来试试编译libnetfilter_queue测试代码.

.gFW Oh$Q0

51Testing软件测试网-xp'V)M.zy y
51Testing软件测试网S ^C}8i|U

[Supplement]51Testing软件测试网/gQR\s:\K

接下来在往上找了一个测试程序,然后使用下列命令编译,

s$^TV1~}7d@0

gcc test2.c -lnetfilter_queue
yYb?5l4M051Testing软件测试网H$t'Z(UGq2w_

依旧报错,我的那个神啊,能不能又一次没有错得啊~错误如下:51Testing软件测试网&Y k@E^X,P

/usr/bin/ld: cannot find -lnetfilter_queue51Testing软件测试网8nJ-Zz3\n4QY$x

netfilter_queue库依然找不见,行不行啊,make到底干了啥东西啊~

$ua\[he*M8oY0

于是到libnetfilter_queue源目录下找到相关的*.so或者*.a一并考到/usr/lib下。

)s5Vq`+aB@(tu5@0

cp -r libnetfilter_queue-1.0.0/src/.libs/* /usr/lib/ 51Testing软件测试网Yl3Y8R:U LDu

V&N I4p-~Hd eF9Rr0


t+B[{$qe{ D;N}0

"} Ty Q.} T'DG.O0

然后再编译,暂时能编译成功,./a.out也能成功运行,接下来还会遇到啥错误呢?51Testing软件测试网#}7[a\'MGQm


TAG:

引用 删除 御宅小受   /   2016-09-18 14:43:14
make完成,需要make install。
 

评分:0

我来说两句

Open Toolbar