linux内核netfilter的实现以及ipset
netfilter的实现机制基于四个层次的匹配,数据包在每个层次都要经过一个过滤链表,第一个层次就是hook,众所周知linux内核中一共拥有5个hooks,当然你也可以自己修改内核在任何地方添加hook;第二个层次就是每个hook下面的tables,每一个hook都过挂载零个或者若干个tables,数据包要一个一个经过这些tables;第三个层次就是rule,每个table下面拥有零个或者若干个rule,数据包要依次经过这些rules,只要有一个rule对数据包进行了裁决,那么将不再经过该hook的该table的对应rule的后面rules;第四个层次是matchs,和rules的遍历正好相反,数据包只有在对应rule下面的所有的matchs都匹配后才算匹配。
在内核中,netfilter是由下面4个核心结构体支撑起来的:
struct xt_table_info
{
unsigned int size;
unsigned int number;
unsigned int initial_entries;
unsigned int hook_entry[NF_IP_NUMHOOKS];
unsigned int underflow[NF_IP_NUMHOOKS];
char *entries[NR_CPUS];
};
entries[cpu]指向了一个ipt_entry数组,该数组的内存组织形式是平坦的,通过ipt_entry的next_offset字段进行遍历:
struct ipt_entry
{
struct ipt_ip ip;
unsigned int nfcache;
u_int16_t target_offset;
u_int16_t next_offset;
unsigned int comefrom;
struct xt_counters counters;
unsigned char elems[0];
};
elems指向了一块平坦内存模式的,包含了若干个matchs和一个target,target通过target_offset来定位,各个matchs正如上面所说,通过next_offset来进行遍历的:
struct xt_entry_match
{
union {
struct {
u_int16_t match_size;
char name[XT_FUNCTION_MAXNAMELEN-1];
u_int8_t revision;
} user;
struct {
&nbs
相关文档:
前言
本文内容只集中在操作系统启动原理的讲解上,不涉及启动的技术细节,因为这些细节都可以通过网络或者相关代码了解。只有了解了启动原理,才能在分析和解决有关启动的问题时具有针对性,不会有无从下手的感觉。限于作者经验的原因,本文内容只涉及关于
Windows
和
Linux
系统的启动过程。
启动 ......
linux搜索路径: 如果用的shell是bash,则环境变量加载
1./etc/profile
2.用户home目录下面的.bash_profile
3.用户home目录下面的.bash_login
gcc -I<include目录>
POSIX系统也可以建立环境变量
......
1 红帽
rpm -ivh 安装
-e 删除
-u 升级
-q 查询
2 ubuntu
deb dpkg -i 安装
&n ......
linux内核实现了crypto接口,用于类似IPSec之类要在内核中实现的与操作系统绑定的安全机制,如果不是用于这样的机制,不要使用内核中的crypto接口,总的来说,linux的crypto中最重要的结构体有两个:crypto_tfm和crypto_alg
struct crypto_tfm {
u32 crt_flags;
union {
& ......