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 のすべてのパケットを拒否します。1 バイト目が 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
}

しかし、許可される唯一の 210 の長さのパケットであるには、0x0aとの両方が必要です。0x0e

編集

何を考えていたのか、寝不足なのかもしれません。

4

3 に答える 3

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 に答える