2014-10-02 4 views
0

Я хотел бы проверить, является ли представленный пользователем адрес ip действительным общедоступным ip (non loopback, non local, non reserved).Тест, если данный ip является общедоступным?

Для этой цели я придумал этот метод, но мне было интересно, достаточно ли этого, или если мне не хватает некоторых тестов.

Спасибо за вашу помощь :)

private boolean isValidPublicIp(String ip) { 
    try 
    { 
     Inet4Address address = (Inet4Address) InetAddress.getByAddress(ip.getBytes()); 
     if (!address.isSiteLocalAddress() && !address.isAnyLocalAddress() && !address.isLinkLocalAddress() && !address.isLoopbackAddress() && !address.isMulticastAddress()) { 
      return true; 
     } 
    } 
    catch (UnknownHostException exception) {} 

    return false; 
} 

ответ

0

Не так много Java ответа, но и обеспечить подход к проверке проверки IP: Что об использовании WHOIS?

Это преодолело бы создание списков неиспользуемых/частных адресов и может быть проверено в реальном мире.

Поскольку WHOIS предоставляет много информации, я предлагаю вам проверить только по конкретным вопросам, как:

WhoIs 192.168.0.1 | grep NetName: NetName: ЧАСТНЫЙ-АДРЕС-CBLK-RFC1918-IANA-RESERVED

whois 80.85.32.1 | grep NetName: NetName: 80-RIPE

whois 1.1.0.1 | grep NetName: NetName: APNIC-1

Поскольку все зарезервированные адреса будут иметь RESERVED по их именам сети, это простой выход. Исключение составляют испытательные сети, такие как:

whois 192.0.2.1 | Grep сетевое_имя: сетевое_имя: ТЕСТ-NET-1

и как MultiCast Net в:

Whois 224.0.0.1 | grep NetName: NetName: MCAST-NET

поэтому проверка ответа ограничена тремя параметрами, по показам соответствия, что адрес не является общедоступным.

Смежные вопросы