摘要:原理定時檢測活躍連接數(shù)如果單個連接數(shù)超過臨時封禁超過永久封禁在連接時候直接關(guān)閉永久封禁為了能工作,不能設(shè)置為或永久封禁封禁十分鐘
原理:
定時檢測活躍連接數(shù), 如果單個IP連接數(shù)超過20臨時封禁, 超過100永久封禁(在TCP連接時候直接關(guān)閉)
_GLOBAL_SESSION = []; $server->_GLOBAL_SESSION["ban"] = []; $server->_GLOBAL_SESSION["ban_forever"] = []; $server->_GLOBAL_SESSION["init_waf_u2"] = "/init_waf_KKDL_d".mt_rand(100000, 9999999); $server->on("connect", function ($server, $fd, $fi) { # 永久封禁 # 為了能工作, dispatch_mode_mode不能設(shè)置為1或3 $connection_info = $server->connection_info($fd); if( $this->_GLOBAL_SESSION["ban_forever"][$connection_info["remote_ip"]] == 1 ){ $server->close($fd); return; } }); $server->on("request", function ($req, $res) use ($server) { # 永久封禁 if( $this->_GLOBAL_SESSION["ban_forever"][$req->server["remote_addr"]] == 1 ){ return; } # 封禁十分鐘 if( $this->_GLOBAL_SESSION["ban"][$time-$time%600][$req->server["remote_addr"]] == 1 ){ $res->status(204); $res->end(); return; } $time = time(); if ($req->server["request_uri"] == $server->_GLOBAL_SESSION["init_waf_u2"] ){ $timer_id = $this->tick(500, function(){ if($this->connection_list(-1, 50) < 51) return 0; $connection_list = $this->connection_list(-1, 20000); $connection_data = []; // ip -> connection_count foreach ($connection_list as $connection_id) { $connection = $this->connection_info($connection_id); if (!isset($connection_data[$connection["remote_ip"]])) { $connection_data[$connection["remote_ip"]] = 0; } else if ($connection_data[$connection["remote_ip"]] > 20) { $this->_GLOBAL_SESSION["ban"][$time-$time%600][$connection["remote_ip"]] = 1; } else if ($connection_data[$connection["remote_ip"]] > 100) { $this->_GLOBAL_SESSION["ban_forever"][$connection["remote_ip"]] = 1; } $connection_data[$connection["remote_ip"]] ++; $str = ""; $str .= $connection["remote_ip"]; $str .= " => "; $str .= $connection_data[$connection["remote_ip"]]; $str .= " "; echo $connection["remote_ip"]; echo " => "; echo $connection_data[$connection["remote_ip"]]; echo " "; } }); $res->end($timer_id); return true; } }); echo " You need to run following command to init waf: "; echo "curl -s http://127.0.0.1:9502".$server->_GLOBAL_SESSION["init_waf_u2"]; $server->start();
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/30410.html
摘要:隨著微信的普及,掃碼登錄方式越來越被現(xiàn)在的應(yīng)用所使用。這里基于微信公眾平臺的帶參數(shù)臨時二維碼,并且結(jié)合的服務(wù)實現(xiàn)掃碼登錄。對于用戶掃臨時的二維碼,微信會觸發(fā)相應(yīng)的回調(diào)事件,我們需要在該回調(diào)事件中處理用戶的掃碼行為。 隨著微信的普及,掃碼登錄方式越來越被現(xiàn)在的應(yīng)用所使用。它因為不用去記住密碼,只要有微信號即可方便快捷登錄。微信的開放平臺原生就有支持掃碼登錄的功能,不過大部分人還是在用公眾...
摘要:早期的輪詢是通過不斷自動刷新頁面而實現(xiàn)的。長輪詢的另一個問題是缺乏標(biāo)準(zhǔn)實現(xiàn)。服務(wù)器端接到這個請求后作出回應(yīng)并不斷更新連接狀態(tài)以保證客戶端和服務(wù)器端的連接不過期。協(xié)議解析協(xié)議包含兩部分一部分是握手,一部分是數(shù)據(jù)傳輸。 Websocket是什么? Websocket是一個因為應(yīng)用場景越來越復(fù)雜而提出的,針對瀏覽器和web服務(wù)器之間雙向持續(xù)通信而設(shè)計,而且優(yōu)雅地兼容HTTP的協(xié)議(我猜想:同...
摘要:假如我們要發(fā)布封郵件,用一個循環(huán),循環(huán)遍執(zhí)行發(fā)郵件操作。我采取的是第二種方式噢。安裝完成,需要更改的配置,將放在這個配置中,然后重啟。向服務(wù)器端發(fā)送一個字符串,服務(wù)器會返回一個字符串。以上是簡單的安裝和連同。 什么是swooleswoole是PHP的異步、并行、高性能網(wǎng)絡(luò)通信引擎,使用純C語言編寫,提供了PHP語言的異步多線程服務(wù)器,異步TCP/UDP網(wǎng)絡(luò)客戶端,異步MySQL,異步R...
閱讀 25642·2021-09-29 09:41
閱讀 4807·2021-09-10 11:20
閱讀 1928·2021-09-09 09:32
閱讀 1893·2019-08-30 15:44
閱讀 3199·2019-08-29 17:13
閱讀 2815·2019-08-29 14:14
閱讀 2071·2019-08-29 14:11
閱讀 3231·2019-08-29 12:36