주어진 IP 주소가 특정 네트워크에서 왔는지 자동으로 인증해야하는지 확인해야합니다.누구나 IP 주소가 특정 네트워크/넷 마스크에서 왔는지 확인하는 Java 구성 요소를 알고 있습니까?
답변
Jakarta Commons Net은 귀하의 요구를 충족시키는 것으로 보입니다.
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 버전을 사용할 것을 제안합니다.
또한
boolean inSubnet = (ip^subnet) & netmask == 0;
ip와 netmask는 int 또는 long입니까? – simgineer
32 비트 주소 인 IPv4는 int입니다. 나는 IPv6가 64 비트 값이라고 의심하지만, 나는 스스로 헴을 사용하지 않았다. –
사용 봄의 IpAddressMatcher
boolean inSubnet = (ip & netmask) == (subnet & netmask);
이하를 시도 할 수 있습니다. 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
서브넷의 IP를 확인하려면, 나는 SubnetUtils 클래스의 isInRange 방법을 사용했다. 그러나이 방법은 서브넷이 X 일 경우 isInRange가 true를 반환하는 X보다 낮은 모든 IP 주소를 버그로 처리합니다. 예를 들어 서브넷이 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 주소가 iPhone에 속하는지 알아낼 방법이 있습니까?
- 2. 휴대 전화에 IP 주소가 있습니까
- 3. Java ServerSocket. IP 주소가 0.0.0.0인데도 여전히 원격으로 연결할 수 있습니까?
- 4. 요청의 IP 주소가 httpheader
- 5. 왜 DHCP와 고정 IP 주소가 동시에 있습니까?
- 6. 얻기 IP 주소가
- 7. 클라이언트 IP 주소가 잘못되었습니다.
- 8. IP 주소가 OpenID로 유효합니까?
- 9. 누구나 IE7 에뮬레이터에 대해 알고 있습니까?
- 10. IP 주소가 셀룰러 IP 주소인지 확인
- 11. 와이파이 액세스 포인트에 IP 주소가 있습니까?
- 12. 누구나 Jasypt (Java 암호화 라이브러리)에 대해 알고 있습니까?
- 13. 멀티 홈 시스템에서 IP 주소가 로컬 호스트인지 확인하는 방법은 무엇입니까?
- 14. 두 개의 IP 주소가 동일한 네트워크 세그먼트에 속하는지 확인하는 방법
- 15. 누구나 Facebook 인증을위한 좋은 자습서를 알고 있습니까?
- 16. .htaccess ip 주소가 나열되지 않았거나 특정 URL이 아닌 경우에만 리디렉션합니다.
- 17. URL이 특정 사이트에서 왔는지 확인
- 18. 누구나 탭이있는 FTP 클라이언트를 알고 있습니까?
- 19. 누구나 키보드처럼 UIDatePicker에서 슬라이드하는 방법을 알고 있습니까?
- 20. 누구나 API 기능을 갖춘 CMS를 알고 있습니까?
- 21. 누구나 manifest.mf 파일의 목적을 알고 있습니까?
- 22. 누구나 언리얼 스크립트를 시작하는 방법을 알고 있습니까?
- 23. 누구나 호프만 트리를 해독하는 방법을 알고 있습니까?
- 24. 누구나 ASP 테마가 어디에 있는지 알고 있습니까?
- 25. 누구나 좋은 주소록 구현을 알고 있습니까?
- 26. 누구나 합리적인 테이블 뷰에 대해 알고 있습니까?
- 27. 누구나 명령 줄에 피클을 알고 있습니까?
- 28. 누구나 시각 보조 기능을 알고 있습니까?
- 29. 누구나 클릭 프레임 워크를 알고 있습니까?
- 30. 누구나 CSS 분석 도구에 대해 알고 있습니까?
주의해서 사용하십시오. 올바르게 작동하지 못하게하는 버그가 있습니다. 당신은 SVN에서 그것을 빼낼 수 있습니다. http://mail-archives.apache.org/mod_mbox/commons-issues/200902.mbox/%[email protected]%3E – carson
@carson : 경고 해 주셔서 감사합니다. 이 정보를 포함하도록 내 대답을 편집했습니다. – Eddie