0
A
回答
0
這應該工作,如果你已經知道IP地址作爲unsigned long類型和數量:
bool cidr_overlap(uint32_t ip1, int n1,
uint32_t ip2, int n2)
{
return (ip1 <= (ip2 | ((1ul << (32-n2))-1)))
|| (ip2 <= (ip1 | ((1ul << (32-n1))-1)));
}
0
爲了儘可能簡單,基本上斜槓後的部分是要保留的位。因此,例如/ 24表示保留最重要的3個字節(24位)。因此,您可以通過掩蓋它並檢查相等性來查看地址是否適合。地址和麪具本身就是最小的;如果你正在尋找最大你可以或者與面具的反面。
0
讓我們假設你的IP地址和掩碼如下,IP地址是整數形式。
例30分之3232235896==>(實際IP 192.168.1.120/30)
比方說,你需要找出(ip_one,mask_one)和(ip_two,mask_two)重疊
uint32_t mask_one_max = ((1ul << (32 - mask_one)) - 1);
uint32_t mask_one_min = ~mask_one_max;
uint32_t mask_two_max = ((1ul << (32 - mask_two)) - 1);
uint32_t mask_two_min = ~mask_two_max;
return (((ip_one & mask_one_min) <= (ip_two | mask_two_max)) && ((ip_two & mask_two_min) <= (ip_one | mask_one_max)));
如果發生重疊,這將返回true。
該解決方案建議基於尋找兩個整數範圍重疊的通用方法。正如您在解決方案中看到的,我首先將CIDR範圍轉換爲整數範圍並使用它們來查找重疊。
相關問題
- 1. Amazon VPC n^2 -4 IP地址? CIDR塊
- 2. CIDR地址選擇
- 3. 文本在Perl代碼參數與CIDR IP地址
- 4. 檢查IP地址列表是否在R的CIDR註釋IP塊列表中
- 5. Bash腳本批量轉換IP地址到CIDR?
- 6. 計算兩個IP地址之間的網絡2非CIDR
- 7. 從CIDR範圍檢索最大/最小IP地址
- 8. 蟒蛇:ip地址包輸出,CIDR網站
- 9. CIDR表示法中的IP地址是什麼?
- 10. 如何使用IP上的IP和CIDR來計算網絡和廣播地址
- 11. IP到CIDR/IP範圍
- 12. IP地址重新映射
- 13. IIS Url重寫IP地址
- 14. 使用重疊的IO獲取發件人的IP地址
- 15. 瞭解IP,CIDR以及IP如何映射到CIDR
- 16. IP地址在Swiftmailer
- 17. MAC地址和IP地址
- 18. 變換IP地址,IP地址範圍(起始IP - 結束IP)
- 19. TSQL轉換地址列表CIDR標記
- 20. 將IPv6地址匹配到CIDR子網
- 21. 從PHP Ipv6 CIDR獲取IPv6地址數
- 22. 計算來自cidr的廣播地址
- 23. 將CIDR地址轉換成子網掩碼和網絡地址
- 24. 本地IP地址?
- 25. IP地址
- 26. IP地址
- 27. php:geting ip地址
- 28. cURL IP地址
- 29. IP地址
- 30. ip地址
你是否需要幫助解析給定的字符串,或者你是否已經完成了這些操作並需要位掩碼幫助? –
我的問題是從IP地址,我作爲無符號長到IP範圍表示法的表示開始和結束在無符號長,所以我可以做我的範圍檢查。換句話說,如何從「10.2.3.98/24」到無符號長整數的低和高範圍 – reza