本文主要实现全锥型NAT的用户空间iptables命令行扩展的实现,实现思路见上文,具体可以模仿MASQUERADE的源码进行改写。
1.关键部分实现代码
由于fullcone类型并不需要输入参数,因此parse可以为空,print和save也很简单,只需要help和结构注册两部分保证正确即可。
help如下:
static void FULLCONE_help(void)
{
printf(
"FULLCONE target options:\n"
"Author cty"
"Empty here for further extension"
);
}
注册结构和masquerade类似:
static struct xtables_target fullcone_tg_reg = {
.name = "FULLCONE",
.version = XTABLES_VERSION,
.family = NFPROTO_IPV4,
.size = XT_ALIGN(sizeof(struct nf_nat_ipv4_multi_range_compat)),
.userspace = XT_ALIGN(sizeof(struct nf_nat_ipv4_multi_range_compat)),
.help = FULLCONE_help,
.init = FULLCONE_init,
.x6_parse = FULLCONE_parse,
.print = FULLCONE_print,
.save = FULLCONE_save,
.x6_options = FULLCONE_opts,
};
2.小结
相对来说用户空间iptables的扩展是很容易实现的。需要完全代码的可以上我的github看或者联系我。