我想要做的兩件事情:將IP地址投入CIDR 下面是一些例子輸入:在Ruby/Rails中使用CIDR的IP範圍?
1.1.1.1
192.168.*.* #=> 192.168.0-255.0-255
192.168.1.2-20
1.1.1-10.1-100
檢查給定的IP地址屬於任何CIDR。這必須是一個非常快速的查詢,因爲它是我的web應用程序中非常常見的查詢。我想這樣做是這樣的:
def matches?(request)
valid = @ips.select {|cidr| cidr.contains?(request.remote_ip) }
!valid.empty?
end
我想,把IP地址範圍爲CIDR會讓查找比我們現在在做什麼,這是打破了IP的成整數個字節更快。然後,我們將前兩組八位字節索引爲與IP的部分匹配。另一種選擇可能是將所有內容都轉換爲整數並進行比較。我會轉換爲像這樣的IPAddr.new("1.1.1.1").to_i
整數整數,但然後我需要存儲每個範圍的上限和下限IP,而不是隻有一個CIDR。
請讓我知道,如果我忽略任何主流方法,流行的寶石或回購。謝謝!
對於NetAddr爲+1。它非常酷。 –
感謝您的支持。我最終將所有內容都轉換爲int,將整個上下ip範圍索引爲int,以便快速進行比較。您使用NetAddr的提示幫助我朝正確的方向發展。我們的環境問題是用戶輸入特定的IP範圍和通配符會使CIDR查找比我最初想象的複雜得多。 – John
將範圍轉換爲單個ips是「轉換爲CIDR(塊)」,但效率不高。 – Stefan