iptables 源码分析

80酷酷网    80kuku.com

  

  一、规则的显示

  选择先来说明规则的显示,因为他涉及到的东东简单,而且又全面,了解了规则的显示,对于其它操作的了解就显得容易了。

  iptables version 1.2.7

  iptables有两条线:ipv4 和ipv6,这里只分析v4的,因为v6偶暂时还用不着,没有去看。

  iptables_standardone.c

  主函数:

  int main(int argc, char *argv[])
  {
  int ret;
  char *table = "filter"; /*默认的表是filter*/
  iptc_handle_t handle = NULL;
  program_name = "iptables";
  program_version = IPTABLES_VERSION;
  #ifdef NO_SHARED_LIBS
  init_extensions();
  #endif
  /*进入命令行处理函数*/
  ret = do_command(argc, argv, &table, &handle);
  if (ret)
  ret = iptc_commit(&handle);
  if (!ret)
  fprintf(stderr, "iptables: %s
",
  iptc_strerror(errno));
  exit(!ret);
  }

  table表示表的名称,就是iptables -t 后面跟的那个,默认是"filter"

  iptc_handle_t handle = NULL; 这个东东很重要,现在初始化NULL,后面他被用来存储一个表的所有规则的快照。

  program_name = "iptables";

  program_version = IPTABLES_VERSION;

  设置名称和版本。

  #ifdef NO_SHARED_LIBS

  init_extensions();

  #endif

  iptables很多东东,是用共享库*.so的形式(我们安装会,可以在诸如/lib/iptables下边看到),如果不采用共享库,则进行一个初始化操作。我们假设是采用共享库的,忽略它。



分享到
  • 微信分享
  • 新浪微博
  • QQ好友
  • QQ空间
点击: