if语句或AND上的C逻辑运算符
此逻辑有问题,它检测到所有内容并打印检测到的if语句或AND上的C逻辑运算符,c,operators,C,Operators,此逻辑有问题,它检测到所有内容并打印检测到的坏pkt 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 } if((buff[0]!=0
坏pkt
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
}
if((buff[0]!=0x0a | | buff[0]!=0x0e)和&(len==210))
{
printf(“从%s\n检测到badpkt”,xpi);
}否则{
如果(mysend(ssl_sd?ssl_sd[i]:NULL,sd[i],buff,len)如果希望同时允许0x0a
和0x0e
,则需要使用以下条件:
if((buff[0] == 0x0a || buff[0] == 0x0e) && (len == 210))
此(buff[0]!=0x0a | | buff[0]!=0x0e)
始终为真
如果(buff[0]!=0x0a&&buff[0]!=0x0e&&(len==210)),则应该是,
您需要以下逻辑:
if(buff[0] != 0x0a && buff[0] != 0x0e && len == 210)
在这种情况下:
if((buff[0] != 0x0a || buff[0] != 0x0e) && (len == 210))
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);
}
假设buff[0]
是0x0e
,那么buff[0]!=0x0a
将为真,这使得整个子表达式(buff[0]!=0x0a | | buff[0]!=0x0e)
为真
您还可以反转条件:
if((buff[0] != 0x0a || buff[0] != 0x0e) && (len == 210))
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);
}
if((buff[0]==0x0a | | buff[0]==0x0e)//始终允许这些
||(len!=210))//并允许长度不为210的任何内容
{
if(mysend(ssl\u sd?ssl\u sd[i]:NULL,sd[i],buff,len)