IP адресът не е достъпен

Опитвам се да разбера дали даден IP адрес е достъпен с помощта на кода по-долу. Но всеки път получавам „Недостъпно“, въпреки че машината работи. Опитах да използвам няколко активни IP адреса, но винаги получавам „Недостъпен“. Моля помогнете.

public class CheckIP {
public static void main(String args[]) throws UnknownHostException, IOException{
    String ip = "78.46.84.171";

    if(InetAddress.getByName(ip).isReachable(100)){
        System.out.println("Reachable.");
    }
    else{
        System.out.println("Not Reachable.");
    }
}
}

person user3162879    schedule 03.06.2015    source източник


Отговори (1)


Можете ли да пингвате машината от командния ред? напр. ping 78.46.84.171?

Според документи на oracle:

Тествайте дали този адрес е достъпен. Реализацията полага всички усилия, за да се опита да достигне до хоста, но защитните стени и конфигурацията на сървъра може да блокират заявки, което води до недостижим статус, докато някои конкретни портове може да са достъпни. Типична реализация ще използва ICMP ECHO REQUESTs, ако привилегията може да бъде получена, в противен случай ще се опита да установи TCP връзка на порт 7 (Echo) на целевия хост.

Стойността на времето за изчакване в милисекунди показва максималното време, което трябва да отнеме опитът. Ако операцията изтече преди получаване на отговор, хостът се счита за недостъпен. Отрицателна стойност ще доведе до хвърляне на IllegalArgumentException.

За да обобщим възможните грешки:

  • Блокира ли защитна стена ICMP заявки? (вижте командата ping по-горе)
  • Може би времето за изчакване с 100 ms е твърде кратко (опитайте се да увеличите до, напр. 1000)
  • Използвате ли Linux / Mac? Може би ви липсва привилегията да правите ping, така че isReachable(int) изпълнението опитва TCP-Connect, но не успява. (опитайте Windows машина или изпълнете програмата си като root или чрез sudo)
person bratkartoffel    schedule 03.06.2015
comment
Обърнете внимание на „ако може да се получи привилегия“. Обикновено не може. И Windows imp,emendation не използва ICMP. Така че типичната реализация наистина използва TCP порт 7. - person user207421; 03.06.2015