Muszę określić, czy dany adres IP pochodzi z jakiejś sieci specjalnej i czy muszę się automatycznie uwierzytelnić.Czy ktoś zna składnik Java, aby sprawdzić, czy adres IP jest z określonej sieci/maski sieci?
Odpowiedz
Jakarta Commons Net ma org.apache.commons.net.util.SubnetUtils
, który wydaje się spełniać Twoje potrzeby. Wygląda jak można zrobić coś takiego:
SubnetInfo subnet = (new SubnetUtils("10.10.10.0", "255.255.255.128")).getInfo();
boolean test = subnet.isInRange("10.10.10.10");
uwaga, jak carson zwraca uwagę, że Jakarta Commons Net ma a bug uniemożliwiającego mu daje poprawną odpowiedź w niektórych przypadkach. Carson sugeruje użycie wersji SVN, aby uniknąć tego błędu.
Możesz także spróbować
boolean inSubnet = (ip & netmask) == (subnet & netmask);
lub krótszy
boolean inSubnet = (ip^subnet) & netmask == 0;
Czy int i longs są wartościami IP i netmask? – simgineer
32-bitowe adresy, IPv4, są numerami wewnętrznymi. Podejrzewam, że IPv6 ma wartości 64-bitowe, ale ja sam nie używałem tego samego –
Zastosowanie sprężyny IpAddressMatcher. W przeciwieństwie do Apache Commons Net, obsługuje zarówno ipv4, jak i 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);
}
Źródło: here
Aby sprawdzić adres IP w podsieci, użyłem metody isInRange w klasie SubnetUtils. Ale ta metoda ma błąd, że jeśli twoja podsieć to X, każdy adres IP niższy niż X, isInRange zwraca true. Na przykład, jeśli twoja podsieć to 10.10.30.0/24 i chcesz sprawdzić 10.10.20.5, ta metoda zwróci true. Aby poradzić sobie z tym błędem, użyłem poniższego kodu.
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. Czy ktoś zna serwer demonstracyjny JSON?
- 2. Czy ktoś zna ramy uczenia maszynowego Clojure?
- 3. Czy ktoś zna aktualny status Graphics32?
- 4. Czy ktoś zna implementację algorytmu Yarowsky'ego?
- 5. Czy ktoś zna kody wyjścia dla tfsbuild.exe?
- 6. Sposób sprawdzania, czy adres IP znajduje się w określonej podsieci
- 7. Delphi XE2 - Jak uzyskać adres IP określonej strony internetowej?
- 8. Czy ktoś zna słowo, dla którego wbudowana jest funkcja ord()?
- 9. Jak sprawdzić, czy IP jest publicznym proxy?
- 10. Czy ktoś zna Jaxera? Szukam plusów i minusów
- 11. Czy ktoś zna dobry samouczek języka Object Constraint Language (OCL)?
- 12. Czy ktoś zna minikomputer CSS oparty na REST?
- 13. System plików WP8/Cordova - czy ktoś zna prawidłowy kod?
- 14. Czy Qt udostępnia klasę reprezentującą adres IP?
- 15. Czy ktoś zna jakąkolwiek usługę podobną do Tropo?
- 16. W jaki sposób witryna "Co to jest mój adres IP" zna mój wewnętrzny adres LAN?
- 17. Jak mogę sprawdzić, czy wartość w ciąg jest adresem IP
- 18. Czy ktoś zna sposób na wyłuskanie elementów na liście?
- 19. Biblioteka Java, aby sprawdzić, czy adres IPv4 lub IPv6 znajduje się w danej podsieci
- 20. Sposób Java, aby sprawdzić, czy ciąg jest palindromem
- 21. Sprawdzanie, czy zmienna POST [] jest adresem IP?
- 22. Czy plik hosts może przekierować adres IP?
- 23. Jak sprawdzić, czy adres IP jest hostem lokalnym w systemie wieloadresowym?
- 24. Jak sprawdzić, czy port jest otwarty w sieci klienta/zaporze?
- 25. Regex, aby sprawdzić, czy liczba jest równa
- 26. Jak sprawdzić, czy Java Future jest kompletna?
- 27. Jak sprawdzić zdalny adres IP i port jest dostępny?
- 28. Jak mogę sprawdzić, czy String jest adresem IP w Groovy?
- 29. Jak sprawdzić, czy klasa Java jest abstrakcyjna?
- 30. Czy ktoś wie, co to jest gvfsd-http?
Należy zachować ostrożność, używając tego. Jest błąd, który uniemożliwi poprawne działanie. Możesz go wyciągnąć z SVN. http://mail-archives.apache.org/mod_mbox/commons-issues/200902.mbox/%[email protected]%3E – carson
@carson: Dzięki za ostrzeżenie. Poprawiłem moją odpowiedź, aby zawrzeć te informacje. – Eddie