Netfilter新增target模块浅析 - Copy.docx

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Netfilter新增target模块浅析 - Copy

Netfilter新增target模块浅析 2011-6-16目 录1 模块功能介绍32 应用层实现33 内核实现74 配置部分85 附录96 参考资料9Netfilter新增target模块浅析1 模块功能介绍大家现在已经对iptables的使用有了一定的了解,iptables基本命令格式为:iptables ACTION chain rule-specification options本文档中,我们要讨论的是options中的-j target中target模块的实现方式,要实现一个target功能,其中包括二部分,即内核空间中的和用户空间中的。下面就一个实际的例子来一起学习整个功能的实现过程。我们以IPID模块为例。(注:本文档中提到的均为没有使用共享库,即宏NO_SHARED_LIBS定义了。)我们要实现的IPID模块为修改IP头中的ID字段。我们可以看下IP报头格式。Identification字段主要用来唯一的标志一个分片的数据包,当然,该字段还可以用于其它功能。我们现在要实现的是修改这个ID字段,实现二种方法,一种是数据包的ID有规律的递增,另一种是无规律的随机产生。下面演示的是具体命令:#iptables -t mangle -I ShareProtection -i br0 -j IPID --ipid-pace 12 应用层实现下面我们从用户空间开始,实现对以上命令的解析。先看下iptables_target结构struct xtables_target{struct xtables_target *next;xt_chainlabel name;/* 模块的版本号 (默认为0). */u_int8_t revision;u_int16_t family;const char *version;/* Size of target data. */size_t size;/* Size of target data relevent for userspace comparison purposes */size_t userspacesize;/* Function which prints out usage message. */void (*help)(void);/* Initialize the target. */void (*init)(struct xt_entry_target *t);/* Function which parses command options; returns true if it ate an option *//* entry is struct ipt_entry for example */int (*parse)(int c, char **argv, int invert, unsigned int *flags, const void *entry, struct xt_entry_target **targetinfo);/* Final check; exit if not ok. */void (*final_check)(unsigned int flags);/* Prints out the target iff non-NULL: put space at end */void (*print)(const void *ip, const struct xt_entry_target *target, int numeric);/* Saves the targinfo in parsable form to stdout. */void (*save)(const void *ip, const struct xt_entry_target *target);/* Pointer to list of extra command-line options */const struct option *extra_opts;/* Ignore these men behind the curtain: */unsigned int option_offset;struct xt_entry_target *t;unsigned int tflags;unsigned int used;#ifdef NO_SHARED_LIBSunsigned int loaded; /* simulate loading so options are merged properly */#endif};以上结构的成员不必全部实现,一般来说只要初始化下面必个成员(ipt_IPID.c):可以看到name为IPID,即我们演示命令中-j后面的ta

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档