这个逻辑出现了问题,它检测到所有内容并打印bad pkt detected
。
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
}
但我需要0x0a
和0x0e
同时成为唯一允许的210个长度数据包。
修改的
我在想什么,也许是因为睡眠不足。
答案 0 :(得分:1)
如果您同时允许0x0a
和0x0e
,则需要使用以下条件:
if((buff[0] == 0x0a || buff[0] == 0x0e) && (len == 210))
答案 1 :(得分:1)
此(buff[0] != 0x0a || buff[0] != 0x0e)
始终为 true 。
应为if(buff[0] != 0x0a && buff[0] != 0x0e && (len == 210))
答案 2 :(得分:0)
你需要这个逻辑:
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);
}