2008-10-20 95 views
13

我正在尋找一個面向網絡數學並已經過測試的Java庫。沒有什麼特別花哨的東西,只是用來存儲ips和子網,並且執行諸如打印子網掩碼或計算IP是否位於給定子網內的東西。一個好的網絡數學Java庫

我應該推出自己的,還是已經有一個強大的庫?

回答

4

org.apache.lenya.ac.IPRange似乎具有這些功能。

Apache Lenya項目是一個開源內容管理系統。它使用Apache許可證,所以你可能只能重用你需要的代碼。 (但是,一如既往,請自己閱讀license;不要相信互聯網上某個人的法律建議!:-)

+0

org.apache.lenya.ac.IPRange當然可以進行修改,以滿足我的需求,謝謝你的迴應。也就是說,我希望能找到更通用的東西,比如Perl的IP :: NetAddr。 – perilandmishap 2008-10-23 18:43:29

0

open-source IPAddress Java library可以做IP地址操作,如轉換到/從ipv4/ipv6和子網檢查。免責聲明:我是項目經理。

它處理各種網絡數學運算,如掩碼,按位或設置前綴長度,將地址轉換爲前綴塊,迭代通過子網,檢查包含,替換地址段,反轉地址,計算子網交集,減去一個子網從另一個等等。

下面是用於測試一些示例代碼,如果IPv6地址是在給定子網:

String ipv6 = "2001:db8:57AB:0000:0000:0000:0000:0001"; 
    String ipv6subnet = "2001:db8::/32"; 
    String ipv4 = "1.2.3.4"; 
    try { 
     IPAddressString ipv6addrstr = new IPAddressString(ipv6); 
     IPAddressString ipv6addrsubnetstr = new IPAddressString(ipv6subnet); 
     IPAddressString ipv4addrstr = new IPAddressString(ipv4); 

     IPAddress ipv6addr = ipv6addrstr.toAddress(); 
     IPAddress ipv6addrsubnet = ipv6addrsubnetstr.toAddress(); 
     IPAddress ipv4mappedaddr = ipv4addrstr.toAddress().toIPv6(); 

     System.out.println(ipv6addrsubnet + " contains " + ipv6addr + ": " + ipv6addrsubnet.contains(ipv6addr)); // 
     System.out.println(ipv6addrsubnet + " contains " + ipv4mappedaddr + ": " + ipv6addrsubnet.contains(ipv4mappedaddr)); // 

    } catch(AddressStringException e) { 
     //e.getMessage has validation error 
    } 

輸出:

2001:db8::/32 contains 2001:db8:57ab::1 is true 
2001:db8::/32 contains ::ffff:102:304 is false