vb.net 判断是否为ip 正则_PHP实现IP白名单
有些項目可能會用到一個IP地址的白名單黑名單之類的驗證。
比如,只有IP地址在白名單中,才可以訪問該系統。
那么此時,白名單的維護,一般是一個文件,里邊是一些IP地址(每行一個IP),當然也有的可能是用數據庫記錄白名單。
當然,即使放在數據庫中記錄(方便管理),也可以在后臺根據數據庫生成IP白名單的配置文件,每次更新白名單時,都根據數據庫數據,重新寫一下白名單的配置文件。
這里,假設白名單的IP地址是存儲在一個文件中:while_ips.conf
一般常見的兩種情況:一種是白名單文件中的所有IP都是完整的,另一種是有的IP是有范圍的(帶.*)
一、每一個IP都是完整的IP
127.0.0.0 192.168.1.1 192.168.1.2 192.168.1.30 123.200.20.200 123.101.21.201以上假設就是IP白名單。
此時的思路是,從文件中讀取所有IP地址寫入一個數組,每行就是一個元素。
然后判斷當前IP是否在這個數組中。這樣就實現了這個IP是不是在白名單的驗證。
這種實現,比較簡單。
function white_ips($file) {$a = [];if (is_file($file)) {// 判斷是不是文件$f = fopen($file, 'r');// 只讀的方式打開文件while (!feof($f)) {// 判斷你是否在文件尾,不是文件尾則循環$s = fgets($f);// 每次讀出一行$s = preg_replace('/s*/', '', $s);// 先過濾掉多余的空格和空白if (substr($s, 0, 1) != '#' && $s != '') {// 如果不是注釋行,或者空行$a[] = $s;// 記錄有效數據}}fclose($f);}return $a; }$file是IP白名單文件的存儲位置和文件名,其中會過濾掉注釋的IP,同時也會過濾掉多余的空白和換行。避免意外出錯。
$arr = getWhiteIps('white_ips.conf'); $ip = '192.168.1.1'; $allow = 0; if (in_array($ip, $arr)) {$allow = 1; } echo $allow;通過這樣調用和判斷,就可以知道當前的IP是否在白名單了。
二、第二種情況是白名單配置文件中是有范圍的
127.*.*.* 10.*.*.* 192.168.*. * 192.168.1.1 123.200.20.200 123.101.21.201 210.10.22.* 210.123.135.* #30.11.22.33 #119.123.2.15以上是假設IP白名單的文件內容
此時的思路是,從文件中讀取所有IP地址寫入一個數組,每行就是一個元素。
然后通過循環的方式,將當前IP和數組中的每一條數據進行比較(匹配),如果匹配上則白名單,否則不是。
此時因為有范圍,所以不能使用in_array這種簡單的判斷了。需要使用正則來判斷。
讀取白名單配置文件的代碼不變,改變判斷方法即可。
function checkIp($ip, $rule) {$rule_regexp = str_replace('.*', 'a', $rule);//將.*臨時替換成別的符號(.和*都是正則中有特殊含義的符號)$rule_regexp = preg_quote($rule_regexp, '/');//向規則字符串中增加轉義,避免字符串中有其他特殊字符影響正則匹配,非必要語句本例可以忽略$rule_regexp = str_replace('a','.d{1,3}', $rule_regexp);//將臨時符號替換成正則表達式if(preg_match('/^' . $rule_regexp . '$/', $ip)){return 1;//匹配}else{return 0;//不匹配} }$arr = getWhiteIps('white_ips.conf'); $ip = '192.168.1.'; $allow = 0; foreach ($arr as $rule) {if(checkIp($ip, $rule)){$allow = 1;//找到一個排配則標記白名單,然后結束循環break;} } echo $allow;這種有范圍的驗證,稍微復雜一點,需要逐一比對判斷。利用正則匹配IP后,結束循環。
以上內容希望幫助到大家,很多PHPer在進階的時候總會遇到一些問題和瓶頸,業務代碼寫多了沒有方向感,不知道該從那里入手去提升,對此我整理了一些資料,包括但不限于:分布式架構、高可擴展、高性能、高并發、服務器性能調優、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql優化、shell腳本、Docker、微服務、Nginx等多個知識點高級進階干貨需要的可以免費分享給大家,需要
PHP進階架構師>>>視頻、面試文檔免費獲取?shimo.im或 者關注咱們下面的知乎專欄
PHP大神進階?zhuanlan.zhihu.com總結
以上是生活随笔為你收集整理的vb.net 判断是否为ip 正则_PHP实现IP白名单的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dataframe第二列 r语言_R语言
- 下一篇: 后端用python还是php_【后端开发