C if语句上的逻辑运算符或AND

问题描述:

该逻辑检测到所有内容并打印bad pkt detected时出错。C if语句上的逻辑运算符或AND

if((buff[0] != 0x0a || buff[0] != 0x0e) && (len == 210)) 
{ 
    printf("badpkt detected from %s\n", xpi); 
} else { 
    if(mysend(ssl_sd ? ssl_sd[i] : NULL, sd[i], buff, len) <= 0) MULTI_SKIP_QUIT 
} 

逻辑是DENY所有长度为210的数据包。除非第一个字节是0x0A或0x0E。

此代码工作,但:

if((buff[0] != 0x0a) && (len == 210)) 
{ 
    printf("badpkt detected from %s\n", xpi); 
} else { 
    if(mysend(ssl_sd ? ssl_sd[i] : NULL, sd[i], buff, len) <= 0) MULTI_SKIP_QUIT 
} 

但我需要两个0x0a0x0e是唯一允许使用的210长分组。

编辑

我在想什么,也许它的睡眠不足。

你需要这样的逻辑:

if(buff[0] != 0x0a && buff[0] != 0x0e && len == 210) 

有了这个条件:

if((buff[0] != 0x0a || buff[0] != 0x0e) && (len == 210)) 

想象buff[0]0x0e。那么buff[0] != 0x0a将是真实的,这使得整个子表达式(buff[0] != 0x0a || buff[0] != 0x0e)为真。

你也可以反转条件:

if((buff[0] == 0x0a || buff[0] == 0x0e) //always allow these 
    || (len != 210)) //and allow anything thats not of length 210 
{ 
    if(mysend(ssl_sd ? ssl_sd[i] : NULL, sd[i], buff, len) <= 0) 
     MULTI_SKIP_QUIT 

} else { 
    printf("badpkt detected from %s\n", xpi); 
} 

如果你想同时0x0a0x0e允许的,你需要使用这个条件:

if((buff[0] == 0x0a || buff[0] == 0x0e) && (len == 210)) 
+0

哦,我在想什么。 – zikdaljin 2013-04-23 23:24:50

+0

呵呵,休息一下吧! – Pol0nium 2013-04-23 23:28:26

(buff[0] != 0x0a || buff[0] != 0x0e)总是

应该if(buff[0] != 0x0a && buff[0] != 0x0e && (len == 210))