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

iptables 源码分析

 2007-03-07 12:42:27 来源:WEB开发网   
核心提示: 命令处理完毕后,即进入执行模块:/*因为程序定义了共享库的话,iptables 源码分析(4),iptables_matches/iptables_target这两个结构运行至此是NULL,并且target也是NULL,根据’/’后面的掩码位数,求得正确的掩码值,对

命令处理完毕后,即进入执行模块:

  /*因为程序定义了共享库的话,iptables_matches/iptables_target这两个结构运行至此是NULL,并且target也是NULL,对于规则显示而言,这一部份的处理目前没有实际意义,回过头再来看这一段更易理解。final_check成员函数的作用是作最终的标志检查,如果检测失则,则退出*/
  for (m = iptables_matches; m; m = m->next) {
  if (!m->used)
  continue;
  m->final_check(m->mflags);
  }
  if (target)
  target->final_check(target->tflags);

接着对参数作一些必要的合法性检查:

  /* Fix me: must put inverse options checking here --MN */
  if (optind < argc)
  exit_error(PARAMETER_PROBLEM,
  "unknown arguments found on commandline");
  if (!command)
  exit_error(PARAMETER_PROBLEM, "no command specified");
  if (invert)
  exit_error(PARAMETER_PROBLEM,
  "nothing appropriate following !");
  /*对于如果要进行(CMD_REPLACE | CMD_INSERT | CMD_DELETE | CMD_APPEND)处理来说,如果没有设置来源/目的地址及掩码,则给予它们一个默认值*/
  if (command & (CMD_REPLACE | CMD_INSERT | CMD_DELETE | CMD_APPEND)) {
  if (!(options & OPT_DESTINATION))
  dhostnetworkmask = "0.0.0.0/0";
  if (!(options & OPT_SOURCE))
  shostnetworkmask = "0.0.0.0/0";
  }
  /*对来源/目的地址及掩码进行拆分,它们总是以 addr/mask的形式来出现的,根据’/’前面的字符串取得地址值,根据’/’后面的掩码位数,求得正确的掩码值,值得注意的是,同时要处理主机地址和网络地址的情况*/
  if (shostnetworkmask)
  parse_hostnetworkmask(shostnetworkmask, &saddrs,
  &(fw.ip.smsk), &nsaddrs);
  if (dhostnetworkmask)
  parse_hostnetworkmask(dhostnetworkmask, &daddrs,
  &(fw.ip.dmsk), &ndaddrs);
  /*然后检查来源/目的网络地址的合法性*/
  if ((nsaddrs > 1 || ndaddrs > 1) &&
  (fw.ip.invflags & (IPT_INV_SRCIP | IPT_INV_DSTIP)))
  exit_error(PARAMETER_PROBLEM, "! not allowed with multiple"
  " source or destination IP addresses");
  /*对命令行格式进行合法性检查*/
  generic_opt_check(command, options);

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

Tags:iptables 源码 分析

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