0

这个逻辑有问题,它检测到所有内容并打印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
}

逻辑是拒绝所有长度为 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 长度数据包。

编辑

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

4

3 回答 3

1

如果你想要两者都0x0a允许0x0e,你需要使用这个条件:

if((buff[0] == 0x0a || buff[0] == 0x0e) && (len == 210))
于 2013-04-23T23:23:21.327 回答
1

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

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

于 2013-04-23T23:23:53.240 回答
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);
}
于 2013-04-23T23:24:05.150 回答