易截截图软件、单文件、免安装、纯绿色、仅160KB

【转帖LINUX】netfilter中的conntrack内核阅读笔记(4)

2008-07-07 22:09
3,init_conntrack:
init_conntrack用于创建一个新的ip_conntrack,并对其进行初始化。
/*1,每一个连接包含两个tuple,original和reply,ip_ct_invert_tuple 根据传入的original tuple获取其reply tuple,其最终将调用所属协议的invert_tuple 完成处理*/
   if (!ip_ct_invert_tuple(&repl_tuple, tuple, protocol)) {
     DEBUGP("Can't invert tuple.\n");
     return NULL;
}
/*2,从cache中为conntrack分配内存,并进行通用的初始化,如初始化tuplehash、timeout和ct_general;如果当前连接数已达上限,则调用early_drop释放tuple所在hash链上的未应答项*/
   conntrack = ip_conntrack_alloc(tuple, &repl_tuple);
/*3,调用所属协议的new函数,根据报文数据,初始化conntrack,和协议相关的私有处理,将放到对具体协议tcp分析时讨论*/
   if (!protocol->new(conntrack, skb)) {
     ip_conntrack_free(conntrack);
     return NULL;
}
/*4,expect和helper均和动态协议相关,将在分析ftp协议时做重点介绍*/
   exp = find_expectation(tuple);
if (exp) {
     …
} else {
     conntrack->helper = __ip_conntrack_helper_find(&repl_tuple);
     CONNTRACK_STAT_INC(new);
}

write_unlock_bh(&ip_conntrack_lock);
if (exp) {
     …
}
/*5,将original tuple放到unconfirmed链上??*/   list_add(&conntrack->tuplehash[IP_CT_DIR_ORIGINAL].list, &unconfirmed);
 
4,tuplehash_to_ctrack:
tuplehash_to_ctrack这个函数主要用来将全局连接表中获取的hashtuple转换成相应的ip_conntrack结构。它使用了container_of这个宏来完成处理的。container_of通过结构中某个成员的指针,来获取结构的指针。它的实现非常有趣:
/*1,将结构体强制在0地址展开,从而获取其member的偏移量*/
   #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
/*2,根据member的指针ptr,减去其相对偏移量,即获得了其宿主结构conntrack的指针*/
   #define container_of(p


相关文档:

安装u盘linux系统~~

可安装在U盘上的操作系统 Puppy Linux 4.1 Beta
一、 U盘安装Puppy Linux方法
1、下载安装FlashBoot。可以在google上搜一下下载
运行FlashBoot,按下图红色框选择,点【下一步】
选择你下载的iso镜像,【下一步】
选择你的U盘盘符,不要选错了。点【下一步】
这一步要注意,默认选择的是不格盘。 ......

Linux LVM 的使用详解

Linux LVM 的使用详解
摘要: Linux用户安装Linux操作系统时遇到的一个最常见的难以决定的问题就是如何正确地给评估各分区大小,以分配合适的硬盘空间。而遇到出现某个分区空间耗尽时,解决的方法通常是使用符号链接,或者使用调整分区大小的工具(比如Patition Magic等),但这都只是暂时解决办法,没有根本解决问题。随着L ......

Freebsd与linux对比分析


FreeBSD是一个完整的操作系统,包含了从开发工具到各种各样的应用程序。
目前人们认为FreeBSD在稳定性和网络运作上的性能要优于Linux。
它由一个软件开发的核心团队来维护,整个原始程序代码会有组织地进行更新,所以程序代码比较有一致性。
由于人们对FreeBSD的认识比较少,使用范围也比较小,导致了它在对一些新产品 ......

建立ARM+Linux应用程序调试环境

 
建立ARM+Linux应用程序调试环境
 
Gdb+gdbserver+insight环境的搭建
1.    下载gdb源代码    http://ftp.gnu.org/gnu/gdb/
 
2.    配置安装gdb+gdbser
$ tar jxvf gdb-6.6.tar.bz2
$ cd x/gdb
$ ./configure --target=arm-linux --prefix=/usr/lo ......

Linux设置环境变量小结

1
、总结背景

linux
系统下,如果你下载并安装了应用程序,很有可能在键入它的名称时出现
“command not found”
的提示内容。如果每次都到安装目标文件夹内,找到可执行文件来进行操作就太繁琐了。这涉及到环境变量
PATH
的设置问题,而
PATH
的设置也是在
linux
下定制环境变量的一个组成部分。 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号