WEB开发网
开发学院网络安全防火墙 iptables 源码分析 阅读

iptables 源码分析

 2007-03-07 12:42:27 来源:WEB开发网   
核心提示: ps:开头一大堆的变量定义和初始化,可以在程序分析的时候看它们的作用,iptables 源码分析(3),有两个全局结构变量很重要:iptables_matches和iptables_targets,现在来分析他们的作用会有一点困难,则取’t’后跟的表名:*table

ps:开头一大堆的变量定义和初始化,可以在程序分析的时候看它们的作用,有两个全局结构变量很重要:iptables_matches和iptables_targets。现在来分析他们的作用会有一点困难,因为它们涉及到了太多方面的东东,这里,可以先把它们“想像成”用户空间用来读取内核规则的结构(当然,这有点错误)。

  /*开始化析命令行*/
  while ((c = getopt_long(argc, argv,
  "-A:C:D:R:I:L::M:F::Z::N:X::E:P:Vh::o:p:s:d:j:i:fbvnt:m:xc:",
  opts, NULL)) != -1)
  {
  }

这个while循环处理所有的用户输入,对应规则输出-L,有:

  case 'L':
  add_command(&command, CMD_LIST, CMD_ZERO,
  invert);
  if (optarg) chain = optarg;
  else if (optind < argc && argv[optind][0] != '-'
  && argv[optind][0] != '!')
  chain = argv[optind++];
  break;

add_command函数负责将命令标志变量command与令标志 CMD_LIST求&运算, CMD_ZERO只是一个附加的判断标志而已,invert);然后,从命令行中取得要显示的链名(如果有的话)。

与此相关的还有用t参数指定了表名:

  case 't':
  if (invert)
  exit_error(PARAMETER_PROBLEM,
  "unexpected ! flag before --table");
  *table = argv[optind-1];
  break;

即,如果有’t’参数,则取’t’后跟的表名:*table = argv[optind-1],否则,它应该是主函数中默认的filter表。

上一页  1 2 3 4 5 6 7 8  下一页

Tags:iptables 源码 分析

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接