簡體   English   中英

C if語句或AND上的邏輯運算符

[英]C Logical operators on if statement OR AND

這個邏輯有問題,它檢測到所有內容並打印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
}

但我需要0x0a0x0e是唯一允許的210長度數據包。

編輯

我在想什么,也許是因為睡眠不足。

如果您想同時允許0x0a0x0e ,則需要使用以下條件:

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

(buff[0] != 0x0a || buff[0] != 0x0e)始終為

它應該是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) && (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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM