ip addr not reachable что делать

I am trying to know if an IP address is reachable using the code below. But every time I am getting «Not Reachable» even though the machine is running. I have tried using several alive IPs but I’m always getting «Not Reachable». Please help.

1 Answer 1

Can you ping the machine from the command line? E.g. ping 78.46.84.171 ?

According to the oracle docs:

Test whether that address is reachable. Best effort is made by the implementation to try to reach the host, but firewalls and server configuration may block requests resulting in a unreachable status while some specific ports may be accessible. A typical implementation will use ICMP ECHO REQUESTs if the privilege can be obtained, otherwise it will try to establish a TCP connection on port 7 (Echo) of the destination host.

The timeout value, in milliseconds, indicates the maximum amount of time the try should take. If the operation times out before getting an answer, the host is deemed unreachable. A negative value will result in an IllegalArgumentException being thrown.

..Кто разбирается в андроидах Очень срочно, могу даже заплатить! Проблема такая: Не подключается интернет и не отправляются смс. Зашел в инженерное меню, информация о телефоне:

Выполнить проверку ping IP — адреса: Fall: IP addr not reach able
ping имя узла ([ссылка заблокирована по решению администрации проекта]):Fall:Host unreacable
Проверка клиента HTTP: Fall: IOException
Громкость сигнала-77dBm 18 asu
Cоседний CID: no neighboring cells
Роуминг: Отключен
Служба GSM: в зоне обслуживания
Услуга GPRS: Отключено
Тип сети: EDGE
Параллельное сообщение: false
Перенаправление вызовов: false
Состояние вызова: не работает

Что это такое? Мне кажется или сдесь половина должна быть по другому?

почему isReachable return false ? Я могу проверить IP.

8 ответов

на «isReachable» метод не был достоин, используя для меня во многих случаях. Вы можете прокрутить вниз, чтобы увидеть мою альтернативу для простого тестирования, если вы находитесь в сети и способны разрешать внешние хосты (т. е. google.com) . Который, как правило, работает на машинах * NIX.

вопрос

есть много болтовни об этом:

вот другие, похожие вопросы :

и даже сообщенная ошибка по этому же вопросу:

Часть 1 : воспроизводимый пример проблемы

обратите внимание, что в этом случае он терпит неудачу.

Часть 2: Хакерский Обходной Путь

в качестве альтернативы, вы можете сделать это :

опция-c пинг позволит ping просто попытаться достичь сервера один раз (в отличие от бесконечного ping, который мы привыкли использовать на терминале).

вернет 0, если хост —. В противном случае вы получите «2» в качестве возвращаемого значения.

гораздо проще — но конечно это специфическая платформа. И могут быть определенные привилегии для использования этой команды , но я нахожу, что она работает на моих машинах.

обратите внимание, что : 1) это решение не является качество продукции. Это немного Хак. Если google не работает, или ваш интернет временно медленный, или, возможно, даже если есть какая-то забавность в ваших привилегиях/системных настройках, если может вернуть ложные негативы (т. е. он может потерпеть неудачу, даже если входной адрес достижим). 2) в isreachable неудача является нерешенной проблемой. Опять же — есть несколько интернет-ресурсов, указывающих, что на момент написания этой статьи нет «идеального» способа сделать это из-за того, как JVM пытается достичь хостов-я думаю, что это внутренняя специфическая задача платформы, которая, хотя и проста, еще не была достаточно абстрагирована JVM.

Я пришел сюда, чтобы получить ответ на этот же вопрос, но я был неудовлетворен любым из ответов, потому что я искал независимое от платформы решение. Вот код, который я написал и является независимым от платформы, но требует информации о любом открытом порту на другой машине (который у нас есть большую часть времени).

Если вы хотите только проверить, подключен ли он к интернету , используйте этот метод, он возвращает true, если интернет подключен, его предпочтительнее, если вы используете адрес сайта, который вы пытаетесь подключиться через программу.

просто упоминая об этом явно, так как другие ответы этого не делают. Часть ping isReachable () требует корневого доступа в Unix. И, как указывает bestsss в 4779367:

и если вы спросите, почему ping от bash не делает, на самом деле это нужно. Сделайте это ls-l /bin/ping.

поскольку использование root не было вариантом в моем случае, решением было разрешить доступ к порту 7 в брандмауэре к конкретному серверу, который меня интересовал в.

Я не уверен, что было состояние, когда первоначальный вопрос был задан еще в 2012 году.

Как сейчас, ping будет выполняться как root. Через авторизацию исполняемого файла ping вы увидите флаг +s и процесс, принадлежащий root, то есть он будет работать как root. запустите ls-liat на том месте, где находится ping, и вы должны его увидеть.

Итак, если вы запустите InetAddress.getByName(«www.google.com»).isReacheable (5000) как root, он должен вернуться истинный.

вам нужны правильные разрешения для raw-сокета, который используется ICMP (протокол, используемый ping)

InetAddress.getByName так же надежен, как ping, но вам нужны правильные разрешения на процесс, чтобы он работал правильно.

Я бы предположил, что единственный надежный способ проверить подключение к интернету-это фактически подключиться и загрузить файл или проанализировать вывод вызова OS ping через exec(). Вы не можете полагаться на код выхода для ping, а isReachable () — дерьмо.

вы не можете полагаться на код выхода ping, поскольку он возвращает 0, если команда ping выполняется правильно. К сожалению, ping выполняется правильно, если он не может достичь целевого хоста, но получает «конечный хост недоступен» из вашего домашнего ADSL обращать в бегство. Это своего рода ответ, который рассматривается как успешное попадание, таким образом, выход из кода = 0. Нужно добавить, что это в системе Windows. Не проверено *уничтожает.

nping-это количество попыток пинговать ip (пакеты), если у вас занята сеть или системы выбирают большие номера nping.
wping — это время ожидания pong от ip, вы можете установить его 2000ms
для использования этого метода вы можете написать так:

Так как вы можете пинговать компьютер, ваш процесс Java должен работать с достаточными правами для выполнения проверки. Вероятно, из-за использования портов в нижнем диапазоне. Если вы запустите свою java-программу с sudo/superuser, я уверен, что она работает.

Оцените статью