我需要確定給定的IP地址是否來自某個特殊的網絡,我必須自動進行身份驗證。有誰知道一個java組件來檢查IP地址是否來自特定的網絡/網絡掩碼?
18
A
回答
19
Jakarta Commons Net有出現,以滿足您的需求org.apache.commons.net.util.SubnetUtils
。它看起來像你做這樣的事情:
SubnetInfo subnet = (new SubnetUtils("10.10.10.0", "255.255.255.128")).getInfo();
boolean test = subnet.isInRange("10.10.10.10");
注意,如carson指出,雅加達共享網擁有a bug,防止它在某些情況下給出正確的答案。 Carson建議使用SVN版本來避免此錯誤。
9
您也可以嘗試
boolean inSubnet = (ip & netmask) == (subnet & netmask);
或更短
boolean inSubnet = (ip^subnet) & netmask == 0;
3
使用Spring的IpAddressMatcher。與Apache Commons Net不同,它支持ipv4和ipv6。
import org.springframework.security.web.util.matcher.IpAddressMatcher;
...
private void checkIpMatch() {
matches("192.168.2.1", "192.168.2.1"); // true
matches("192.168.2.1", "192.168.2.0/32"); // false
matches("192.168.2.5", "192.168.2.0/24"); // true
matches("92.168.2.1", "fe80:0:0:0:0:0:c0a8:1/120"); // false
matches("fe80:0:0:0:0:0:c0a8:11", "fe80:0:0:0:0:0:c0a8:1/120"); // true
matches("fe80:0:0:0:0:0:c0a8:11", "fe80:0:0:0:0:0:c0a8:1/128"); // false
matches("fe80:0:0:0:0:0:c0a8:11", "192.168.2.0/32"); // false
}
private boolean matches(String ip, String subnet) {
IpAddressMatcher ipAddressMatcher = new IpAddressMatcher(subnet);
return ipAddressMatcher.matches(ip);
}
來源:here
0
來檢查IP子網中,我用SubnetUtils類isInRange方法。但是這種方法有一個錯誤,如果你的子網是X,那麼每個低於X的IP地址,isInRange都會返回true。例如,如果您的子網是10.10.30.0/24,並且您想檢查10.10.20.5,則此方法返回true。爲了處理這個錯誤,我使用下面的代碼。
public static void main(String[] args){
String list = "10.10.20.0/24";
String IP1 = "10.10.20.5";
String IP2 = "10.10.30.5";
SubnetUtils subnet = new SubnetUtils(list);
SubnetUtils.SubnetInfo subnetInfo = subnet.getInfo();
if(MyisInRange(subnetInfo , IP1) == true)
System.out.println("True");
else
System.out.println("False");
if(MyisInRange(subnetInfo , IP2) == true)
System.out.println("True");
else
System.out.println("False");
}
private boolean MyisInRange(SubnetUtils.SubnetInfo info, String Addr)
{
int address = info.asInteger(Addr);
int low = info.asInteger(info.getLowAddress());
int high = info.asInteger(info.getHighAddress());
return low <= address && address <= high;
}
相關問題
- 1. 驗證IP地址/網絡掩碼
- 2. 來自IP地址/網絡掩碼使用VBScript的IP範圍電纜因子
- 3. T-Sql:檢查IP是否與網絡掩碼匹配
- 4. 檢查IP是否在CIDR網絡掩碼(範圍)
- 5. 如何知道一個IP地址是否在本地網絡,xcode
- 6. 從IP地址和子網掩碼獲取網絡ID
- 7. Golang - 檢查是否IP地址是網絡中
- 8. 使用Python檢索具有多個IP地址的接口的網絡掩碼?
- 9. 導出網絡掩碼給定起始和結束IP地址
- 10. 檢查IP地址是否在網絡中
- 11. 將網絡/掩碼與另一個網絡/掩碼比較
- 12. 代碼來檢查網絡是否有或沒有爲iPhone
- 13. 將CIDR地址轉換成子網掩碼和網絡地址
- 14. 一個保留的IP地址:「所有0的網絡地址」?
- 15. 如何在網絡地址/網絡掩碼中寫入以下地址空間?
- 16. 白名單與Azure網絡安全組的特定IP地址
- 17. 如何在網絡上查找特定桌面的IP地址?
- 18. 從網絡上的IP地址查找特定計算機
- 19. 什麼是IPHelper API來檢索網絡掩碼信息?
- 20. 獲取網址地址來檢測網絡代理
- 21. 檢查流量是否來自特定網址?
- 22. 如何知道從子網掩碼搜索哪些IP地址?
- 23. 如何檢查IP地址是否在特定的子網內
- 24. 跨IP網絡的IP地址
- 25. 是否有任何代碼爲bitwise和ipv6地址和網絡掩碼(前綴)?
- 26. 查看網站用戶是否來自同一個網絡(Intranet網站)
- 27. C#如何檢查本地網絡的遠程IP地址
- 28. 如何計算IP地址和網絡掩碼時的IP範圍?
- 29. 本地網絡HTTPS的IP地址
- 30. 查詢Picasa網絡相冊的特定PhotoIDs來檢查是否存在
小心使用此。有一個錯誤會阻止它正常工作。你可能想把它從SVN中取出來。 http://mail-archives.apache.org/mod_mbox/commons-issues/200902.mbox/%[email protected]%3E – carson 2009-02-23 18:43:01
@carson:感謝您的警告。我編輯了我的答案以包含這些信息。 – Eddie 2009-02-23 20:29:29