обнаружение ip-строки ip - PullRequest
0 голосов
/ 03 марта 2011

Предположим, что Java-строка содержит IP (v4 или v6) или имя хоста.
Каков наилучший способ обнаружения среди этих случаев?
Меня не очень интересуетнаходится ли IP в допустимом диапазоне (например, 999.999.999.999 для IPv4).
Мне интересен только способ определения, является ли строка именем хоста или IP (v4 или v6).
Первоначально я думал, что это:

if(theString.indexOf("@")!=-1){
//Not an Ip
}

но я не уверен, должен ли я всегда ожидать формат, содержащий @ всегда.

Спасибо

Ответы [ 3 ]

2 голосов
/ 03 марта 2011

Простой набор регулярных выражений с классом Pattern будет работать для этого:

Pattern validIpAddressRegex = Pattern.compile("^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$");
Pattern validHostnameRegex = Pattern.compile("^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$");

// matches(String) Will return a boolean value
validIpAddress.matches("111.222.333.444"); 

Я позаимствовал регулярные выражения из этого SO ответа . Обратитесь к статье Википедии об именах хостов , чтобы узнать больше о том, что представляет собой действительное имя хоста.

1 голос
/ 03 марта 2011

Если в вашем адресе есть двоеточия :, то это адрес IPv6.Остальные символы могут быть шестнадцатеричными цифрами (0-1, AF, af).

Если адрес содержит только цифры и точки, то это адрес IPv4.

Если в адресе есть какая-либо буква, то этоимя хоста (имя хоста также может содержать цифры, точки и другие символы).

Это может быть просто реализовано как:

public static String kindOfIP(final String addr)
    {
    if (addr.indexOf(":") >= 0)
        return "IPv6";
    if (addr.matches("^\\d+\\.\\d+\\.\\d+\\.\\d+$"))
        return "IPv4";
    return "hostname";
    }

Этот код не проверяет, является ли адрес действительным.

0 голосов
/ 03 марта 2011

Используйте регулярное выражение для сопоставления с ip, если это не ip, то это имя хоста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...