簡體   English   中英

編寫此IP閥的正確方法是什么?

[英]What's the correct way to write this IP valve?

我試圖使用閥門通過請求者的ip地址控制對我的tomcat(版本8)服務器的訪問。 我想要的是允許所有不以10開頭的地址以及所有以10.10開頭的地址。 這就是我所擁有的。

<valve className="org.apache.catalina.valves.RemoteAddrValve"> allow="[^10]\\.\\d+\\.\\d+\\.\\d+|10\\.10\\.\\d+\\.\\d+" />

它不起作用,它僅允許訪問以10.10開頭的地址。

正則表達式不是我的最佳選擇,我在做什么錯?

謝謝。

允許所有以10.10開頭的地址。 您可以使用以下正則表達式:

10\.10\..*

\\. 對應於“點”字符, .*對應於任何字符。

要禁止所有以10.開頭的地址,您必須編寫更復雜的內容: [^1].*對應於不是以1開頭的任何內容。 很好,如果IP地址不以1開頭,我們將允許它。 1[^0].*對應以1開頭但第二個字符不為0任何IP地址。 11xxx15xxx等。但是我們必須允許使用101.xxx地址。 所以我們將不得不寫10[^.].* 該表達式將允許除10.xxx任何內容,這很好。

因此,最終的正則表達式看起來像上述所有表達式之間的替代:

10\.10\..*|[^1].*|1[^0].*|10[^.].*

或稍微簡化一下:

(10\.10\.|[^1]|1[^0]|10[^.]).*

現在最好在開頭添加^ ,在末尾添加$ ,只是要確保此表達式將檢查整個IP地址:

^(10\.10\.|[^1]|1[^0]|10[^.]).*$

我根本沒有檢查輸入值是IP地址,但是我確定除了此檢查的IP地址外,tomcat不會傳遞任何東西。

[^ 10]不會排除以10開頭的字符串,它將匹配任何一個非零或零的字符。 因此,模式的第一部分將接受以下IP地址:2.XYZ,3.XYZ,...,9.XYZ

為了實現您的目標,您可以嘗試執行以下操作:

d\.\d+\.\d+\.\d+|[02-9]d\.\d+\.\d+\.\d+|[1-9]dd\.\d+\.\d+\.\d+|10\.10\.\d+\.\d+

這樣,第一種選擇將接受以一位開頭的任何IP。 第二個是任何以兩位數字開頭的IP(不包括10)。第三個是任何以三位數字開頭的IP(因此也不能為10)。

不過,還要再說一遍:通過使用d +來匹配數字,甚至無效值也可以被接受為IP組件(應該在0-255之間),例如257、3848等。但這對於您的問題域可能是可以的。

暫無
暫無

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

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