[英]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
}
但我需要0x0a
和0x0e
是唯一允許的210長度數據包。
編輯
我在想什么,也許是因為睡眠不足。
如果您想同時允許0x0a
和0x0e
,則需要使用以下條件:
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.