문제

따라서 관리 웹 UI에서 검색된 문자열이 있습니다(따라서 확실히 문자열임).이 문자열이 Java의 IP 주소인지 호스트 이름인지 어떻게 알 수 있습니까?

업데이트:제 생각에는 명확하게 설명하지 못한 것 같습니다. Java SDK에 IP와 호스트 이름을 구별하는 데 사용할 수 있는 것이 있는지 더 묻고 있었습니다.혼란을 드려 죄송하며 시간을 내어 답변해 주신 모든 분들께 감사드립니다.

도움이 되었습니까?

해결책

다음 패턴으로 정규식을 사용할 수 있습니다.

\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b

IPv4 주소인지 알려줍니다.

다른 팁

우리는 그것이 ~이다 둘 중 하나이고 완전히 다른 것이 아닌가?그렇다면 정규식을 사용하여 "점으로 구분된 쿼드" 형식과 일치하는지 확인할 것입니다.

문자열이 number.number.number.number 형식과 일치하는지 확인할 수 있습니다. 예를 들면 다음과 같습니다.

\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b

다음 중 무엇이든 일치합니다. 0 - 999.

그 밖의 모든 항목은 기본값을 호스트 이름으로 설정할 수 있습니다.

URI validator = new URI(yourString);

해당 코드는 IP 주소 또는 호스트 이름의 유효성을 검사합니다.(문자열이 유효하지 않으면 잘못된 URI 예외가 발생합니다)

두 가지를 구별하려는 경우 .. 귀하의 질문을 읽지 못했습니다.

정규식 일치를 할 수 없습니까?

보안 관리자를 사용할 수 있습니다. InetAddress.getByName(addr) 부르다.

주소가 점으로 구분된 쿼드가 아닌 경우, getByName 보안 관리자가 이름 조회를 수행하기 위해 연결을 시도합니다. checkConnect(addr, -1) 호출하면 잡을 수 있는 SecurityException이 발생합니다.

당신이 사용할 수있는 System.setSecurityManager() 사용자 정의 보안 관리자를 삽입하기 위해 완전한 권한을 갖고 실행 중인 경우 getByName 통화가 이루어졌습니다.

보이는 것처럼 간단하지는 않습니다. 하이픈, 밑줄, 대괄호 '-', '_', '[]'와 같은 문자 주변에는 약간의 모호함이 있습니다.

Java SDK에는 이 영역에 몇 가지 제한 사항이 있습니다.InetAddress.getByName을 사용하면 DNS 이름 확인을 수행하고 주소를 확인하기 위해 네트워크로 나가게 됩니다. 이는 호스트와 주소를 감지하는 것뿐이라면 비용이 많이 들고 불필요합니다.또한 주소가 약간 다르지만 유효한 형식(IPv6에서 일반적임)으로 작성된 경우 InetAddress.getByName 결과에 대한 문자열 비교가 작동하지 않습니다.

IPAddress 자바 라이브러리 그것을 할 것입니다.javadoc은 링크에서 사용할 수 있습니다.부인 성명:저는 프로젝트 관리자입니다.

static void check(HostName host) {
    try {
        host.validate();
        if(host.isAddress()) {
            System.out.println("address: " + host.asAddress());
        } else {
            System.out.println("host name: " + host);
        }
    } catch(HostNameException e) {
        System.out.println(e.getMessage());
    }
}

public static void main(String[] args) {
    HostName host = new HostName("1.2.3.4");
    check(host);
    host = new HostName("1.2.a.4");
    check(host);
    host = new HostName("::1");
    check(host);
    host = new HostName("[::1]");
    check(host);
    host = new HostName("1.2.?.4");
    check(host);  
}

산출:

address: 1.2.3.4
host name: 1.2.a.4
address: ::1
address: ::1
1.2.?.4 Host error: invalid character at index 4
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top