摘要:原理定時檢測活躍連接數如果單個連接數超過臨時封禁超過永久封禁在連接時候直接關閉永久封禁為了能工作,不能設置為或永久封禁封禁十分鐘
原理:
定時檢測活躍連接數, 如果單個IP連接數超過20臨時封禁, 超過100永久封禁(在TCP連接時候直接關閉)
_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不能設置為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();
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/30410.html
摘要:隨著微信的普及,掃碼登錄方式越來越被現在的應用所使用。這里基于微信公眾平臺的帶參數臨時二維碼,并且結合的服務實現掃碼登錄。對于用戶掃臨時的二維碼,微信會觸發相應的回調事件,我們需要在該回調事件中處理用戶的掃碼行為。 隨著微信的普及,掃碼登錄方式越來越被現在的應用所使用。它因為不用去記住密碼,只要有微信號即可方便快捷登錄。微信的開放平臺原生就有支持掃碼登錄的功能,不過大部分人還是在用公眾...
摘要:早期的輪詢是通過不斷自動刷新頁面而實現的。長輪詢的另一個問題是缺乏標準實現。服務器端接到這個請求后作出回應并不斷更新連接狀態以保證客戶端和服務器端的連接不過期。協議解析協議包含兩部分一部分是握手,一部分是數據傳輸。 Websocket是什么? Websocket是一個因為應用場景越來越復雜而提出的,針對瀏覽器和web服務器之間雙向持續通信而設計,而且優雅地兼容HTTP的協議(我猜想:同...
摘要:假如我們要發布封郵件,用一個循環,循環遍執行發郵件操作。我采取的是第二種方式噢。安裝完成,需要更改的配置,將放在這個配置中,然后重啟。向服務器端發送一個字符串,服務器會返回一個字符串。以上是簡單的安裝和連同。 什么是swooleswoole是PHP的異步、并行、高性能網絡通信引擎,使用純C語言編寫,提供了PHP語言的異步多線程服務器,異步TCP/UDP網絡客戶端,異步MySQL,異步R...
閱讀 25629·2021-09-29 09:41
閱讀 4787·2021-09-10 11:20
閱讀 1918·2021-09-09 09:32
閱讀 1881·2019-08-30 15:44
閱讀 3192·2019-08-29 17:13
閱讀 2809·2019-08-29 14:14
閱讀 2062·2019-08-29 14:11
閱讀 3221·2019-08-29 12:36