下面是别人的一段防火墙的代码就是IP限制的,特别是if(((tcph->flags & TH_SYN) != TH_SYN) || ((tcph->flags & (TH_SYN | 
TH_ACK)) == (TH_SYN | TH_ACK)))while(ipaux != NULL)这个条件下面实现的语句是什么意思(目的)没搞懂,请指点!谢谢!我是穷鬼,只有这点分! 

  //首先看协议 
  if(ipaux->ipf.protocol == 0 || ipp->protocol == ipaux->ipf.protocol)//协议为0(0是控制所有协议) 
                                                                                      //或IP包头的协议与限制链表协议相等 
  { 
    retTraffic = FALSE; 
    //这个if考虑的应该是正向即:连表中的source是发送方,destionation是接受方 
    if(ipaux->ipf.sourceIp != 0 && (ipp->source & ipaux->ipf.sourceMask) != ipaux->ipf.sourceIp)//(*问题*)
                                                                               //链表源IP不为0(0为所有)且与包的源IP相等 
   { 
      // TCP 
      if(ipp->protocol == IPPROTO_TCP)//为TCP协议 
       { 
          //如果不是初始化;或是初始化,但确认字段有效(在已刚握手),TCP的启动连接请示包中的ACK为0,而其它的数据包ACK为1 
          if(((tcph->flags & TH_SYN) != TH_SYN) || ((tcph->flags & (TH_SYN | TH_ACK)) == (TH_SYN | TH_ACK))) 
          { 
              //这里没搞懂,看上去应该是反向的(如果是应该和(*问题*)那个IF是并列的啊?),如果不是请问是什么意思? 
                if((ipp->destination & ipaux->ipf.sourceMask) == ipaux->ipf.sourceIp)//源IP相等 
                { 
                 retTraffic = TRUE; 
              } 
           } 
       }        if(retTraffic != TRUE)//源IP相等但??????????????? 
        { 
          ipaux=ipaux->next;           countRule++; 
          continue; 
        } 
    } 
    if(!retTraffic)//到这里只有一种情况retTraffic为false:源IP不等(正向) 
    { 
       if(ipaux->ipf.destinationIp != 0 && (ipp->destination & ipaux->ipf.destinationMask) != ipaux->ipf.destinationIp)//目标IP不等(正向) 
       { 
           ipaux=ipaux->next;            countRule++; 
           continue;//正向结束(源、目标都不相等) 
        } 
     }      else//反向 
     { 
        if(ipaux->ipf.destinationIp != 0 && (ipp->source & ipaux->ipf.destinationMask) != ipaux->ipf.destinationIp)// 
        { 
            ipaux=ipaux->next;             countRule++; 
            continue; 
         } 
      }       //TCP的PORT 
      if(ipp->protocol == IPPROTO_TCP) 
      { 
          if(!retTraffic) 
          {//正向 
               if(ipaux->ipf.sourcePort == 0 || tcph->sourcePort == ipaux->ipf.sourcePort) 
             { 
                 if(ipaux->ipf.destinationPort == 0 || tcph->destinationPort == ipaux->ipf.destinationPort) 
                 { 
                     if(ipaux->ipf.drop) 
                        return  DROP; 
                     else 
                        return FORWARD; 
                  } 
              } 
            }             else 
            {//反向 
                   if(ipaux->ipf.sourcePort == 0 || tcph->destinationPort == ipaux->ipf.sourcePort) 
                { 
                   if(ipaux->ipf.destinationPort == 0 || tcph->sourcePort == ipaux->ipf.destinationPort) 
                   { 
                       if(ipaux->ipf.drop) 
                          return  DROP; 
                       else 
                          return FORWARD; 
                    } 
                 } 
             }           }

解决方案 »

  1.   

    tcph  应该是TCP的头(协议头,估计是个结构指针)
    这个,,呵呵,先去看看TCP/ip协议吧,把这个搞明白了,你一看就清楚了。否则怎么给你解释?主要看看IP头和TCP头的主要包含的内容和代表意义
      

  2.   

    你说这些我都知道,我不明天的是
     if(((tcph->flags & TH_SYN) != TH_SYN) || ((tcph->flags & (TH_SYN | TH_ACK)) == (TH_SYN | TH_ACK))) 
              { 
                  //这里没搞懂,看上去应该是反向的(如果是应该和(*问题*)那个IF是并列的啊?),如果不是请问是什么意思? 
                    if((ipp->destination & ipaux->ipf.sourceMask) == ipaux->ipf.sourceIp)//源IP相等 
                    { 
                    retTraffic = TRUE; 
                  } 
    这段目的所在,这才是主要的,你看我的注释就应该知道什么包头的我是搞清楚了的
      

  3.   

    你这等于问我逻辑问题。这个我不好说,因为具体这些指针是什么结构我不清楚。我也只是大致看了一下非要搞清楚,那就debug一下。看看为什么这样写。vs  debug或者DBGView或者windbg