2013-07-31 61 views
3

我有IP地址列表如下:如何使用Subnetmask爲IP地址製作正則表達式?

 
180.183.0.0/16 
180.210.216.0/22 
180.214.192.0/19 
182.52.0.0/15 
...(400 more) 

我怎樣才能使與子網掩碼IP地址的正則表達式?

爲什麼我想這一點。

我有一個負載均衡器的網站(我無法更改服務器中的任何配置),我的客戶想拒絕來自特定國家的訪問權限。 我使用.htaccess這樣。

 
SetEnvIf X-Forwarded-For "59\.(5[6-9]|6[0-1])\.[0-9]+\." denyIP 
order allow,deny 
allow from all 
deny from env=denyIP 
+0

是什麼這正是你需要的嗎?如果列表只包含IP地址,爲什麼要爲IP地址提供正則表達式?也許你想要的是一個正則表達式來查找**某些**地址?在這種情況下,請填寫問題與您要篩選的那些的規格 – cgledezma

+0

你讓我想起了[這個挑戰(http://codegolf.stackexchange.com/questions/11770/writing-firewall-rules)的:P – HamZa

+0

如果它是可用的,其實我建議使用一些更強大的,比如'iptables'拒絕訪問的IP/IP範圍。隨着htaccess的,請求還是可以進去的,並通過您的Web服務器進行處理(如Apache,例如) - 那麼他們封鎖。在使用iptables的情況下,它們會在實際應用到任何應用程序之前被阻止。 – newfurniturey

回答

3

鑑於您的示例文本這些表達式將通過使用交替相匹配的數值範圍符合要求的範圍內的地址的列表。不幸的是,他們需要單獨構建,因爲正則表達式並不真正評估文本。要匹配182.52182.53字符串你會使用其中包含所需的子串的正則表達式,它會看起來像182.5[23]

  • 180.183.0.0/16具有範圍180.183.0.1 - 180.183.255.254
    • ^180\.183\.(?:[0-9]{1,2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.(?:[1-9][0-9]?|1[0-9]{2}|2[0-4][0-9]|25[0-4])$enter image description here
  • 180.210.216.0/22具有範圍180.183.0.1 - 180.183.3.254
    • ^180\.210\.[0-3]\.(?:[1-9][0-9]?|1[0-9]{2}|2[0-4][0-9]|25[0-4])$enter image description here
  • 180.214.192.0/19具有範圍180.183.0.1 - 180.183.31.254
    • ^180\.214\.(?:[0-9]|[12][0-9]|3[01])\.(?:[1-9][0-9]?|1[0-9]{2}|2[0-4][0-9]|25[0-4])$
    • enter image description here
  • 182.52.0.0/15具有範圍182.52.0.1 - 182.53.255.254
    • ^182\.5[23]\.(?:[0-9]{1,2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.(?:[1-9][0-9]?|1[0-9]{2}|2[0-4][0-9]|25[0-4])$enter image description here
+0

謝謝,它有很多幫助。我希望我可以像這樣在SetEnvIf中使用180.210.216.0/22 ... – ayumi