我正在尋找一個面向網絡數學並已經過測試的Java庫。沒有什麼特別花哨的東西,只是用來存儲ips和子網,並且執行諸如打印子網掩碼或計算IP是否位於給定子網內的東西。一個好的網絡數學Java庫
我應該推出自己的,還是已經有一個強大的庫?
我正在尋找一個面向網絡數學並已經過測試的Java庫。沒有什麼特別花哨的東西,只是用來存儲ips和子網,並且執行諸如打印子網掩碼或計算IP是否位於給定子網內的東西。一個好的網絡數學Java庫
我應該推出自己的,還是已經有一個強大的庫?
我們自己開發了一個Java IPv4算法庫。 請看這裏:http://tufar.com/ipcalculator/ 它是根據BSD許可證。
org.apache.lenya.ac.IPRange似乎具有這些功能。
Apache Lenya項目是一個開源內容管理系統。它使用Apache許可證,所以你可能只能重用你需要的代碼。 (但是,一如既往,請自己閱讀license;不要相信互聯網上某個人的法律建議!:-)
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
org.apache.lenya.ac.IPRange當然可以進行修改,以滿足我的需求,謝謝你的迴應。也就是說,我希望能找到更通用的東西,比如Perl的IP :: NetAddr。 – perilandmishap 2008-10-23 18:43:29