IP 주소가 지정된 서브넷에 있는지 확인하기 위해 어떤 라이브러리를 사용할 수 있습니까? Apache Commons SubnetUtils (SubnetUtils.SubnetInfo.isInRange)와 같은 라이브러리를 찾을 수 있지만 아직 많은 사람들이 IPv6을 지원하지 않습니다.IPv4 또는 IPv6 주소가 지정된 서브넷에 있는지 확인하는 Java 라이브러리
10
A
답변
8
edazdarevic's CIDRUtils은 IPv4와 IPv6을 모두 지원합니다. 이 예제는 boolean isInRange (String ipAddress)를 언급하지 않지만 구현되었습니다!
다른 옵션은 java-ipv6이지만 IPv4는 지원하지 않으며 requires JDK7입니다.
1
The IPAddress Java library은 다형성 방식으로 IPv4와 IPv6을 모두 지원하며 서브넷에서 주소 또는 서브넷을 포함하는지 확인하는 방법을 포함하여 서브넷을 지원합니다. javadoc는 링크에서 사용할 수 있습니다.
다음은 sample code으로, 문제는 IPv4 또는 IPv6과 동일하게 작동합니다.
1
봄의 IpAddressMatcher을 사용하십시오. Apache Commons Net과 달리 ipv4와 ipv6을 모두 지원합니다.
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);
}
힌트 : 당신은 스프링을 사용하지 않는 및 짧은 경량 솔루션을 필요로하더라도, 여전히 source code에 (인터페이스 제거) 약간의 수정이 클래스를 사용할 수 있습니다. (이 접근 및/또는 위반하는 경우 심각한 프로젝트를 사용하지 않는 것이 좋습니다 있지만 자신의 license!)
1
commons-ip-math는 IPv4 및 IPv6 주소를 모두 지원합니다. 여기에 IP 주소가 해당 서브넷에 있는지 확인할 수있는 방법입니다 :
Ipv4Range.parse("192.168.0.0/24").contains(Ipv4.parse("10.0.0.1"))
// false
Ipv6Range.parse("2001:db8::/32").contains(Ipv6.parse("2001:db8::4"))
// true
(면책, 나는 평민-IP-수학의 관리자들 중 하나 있어요)
관련 문제
- 1. IPv4 매핑 된 IPv6 주소에서 IPv4 주소를 확인하는 방법은 무엇입니까?
- 2. IPv6 서브넷에 대한 쿼리
- 3. Libcurl : 강제 ipv4 또는 ipv6
- 4. 주어진 IPV6 주소가 로컬 컴퓨터와 동일한 서브넷에 속하는지 알 수있는 방법
- 5. 주어진 IPv4 매핑 된 IPv6 주소에서 IPv4 주소를 추출하려고 시도합니다.
- 6. IP가 서브넷에 있는지 확인하십시오.
- 7. IPv4 또는 IPv6 주소를 비교할 때 길게 변환
- 8. 유효한 호스트 이름, IPv4 또는 IPv6 주소를 받아들이는 Java 정규식
- 9. IPv4, IPv6, & hostname regex
- 10. IPv6 vs IPv4 연결로드
- 11. IPv4 또는 IPv6 유형의 패킷인지 판단
- 12. IP 주소가 여러 개의 가능한 서브넷에 있는지 확인
- 13. 십진수 형식의 IPV6 IP 주소 또는 IPV6에서 IPV4 추출
- 14. IPv4, IPv6 및 호스트 이름 확인
- 15. IPv6 주소가 작동합니까?
- 16. 이메일 주소가 있는지 확인하는 방법은 무엇입니까?
- 17. 수동으로 IPv4 주소를 IPv6 주소로 변환하려면 어떻게합니까?
- 18. 단일 네트워크 세그먼트의 IPv4 및 IPv6
- 19. 하나의 명령으로 IPv4 및 IPv6 가져 오기
- 20. IP 주소가 네트워크에 있는지 확인하십시오.
- 21. 변환의 IPv4 및 IPv6 모두 번호
- 22. 변수가 ipv4 또는 ipv6인지 확인하는 가장 좋은 방법
- 23. 완벽한 PHP + MySQL IPv4 및 IPv6 솔루션?
- 24. 효율적인 방법으로 IPv4/IPv6 주소를 저장합니다.
- 25. C#에서 byte [] 배열을 IPv4 또는 IPv6 문자열로 변환합니다.
- 26. ipv4 또는 ipv6 주소의 일부를 마스크하기 위해 PHP를 사용합니다.
- 27. 부분적으로 숨겨진 에코 (IPV4 또는 IPV6) 테이블의 IP
- 28. IPv6 주소에서 요청을 보내는 방법 (IPV4 및 IPv6 모두 포함)
- 29. 지도 경계! 주소가 경계에 있는지 확인하는 방법?
- 30. 서브넷을 만들기 전에 dhcp-server가 해당 서브넷에 있는지 확인하는 방법
커먼즈 인터넷 기능 요청 vote for : https://issues.apache.org/jira/browse/NET-405 – Vadzim