Проверка связи с интернетом — CMD/BAT
Помогите пожалуйста.
Долго читал искал всяко разно информацию , в итоге пришел к ниже указному коду с реализацией и 3 разных идей.
насколько это все стабильно будет работать или все таки что то как то менять надо. если да то как?
суть в том что мне нужен четко работоспособный скрипт, который без промоха точно определит связи с интернетом и потом только запустит указанные действия которые мне нужно.
а может вообще это реализовывать можно без cmd. есть другие варианты?? утилиты или что нибудь еще подскажите пожалуйста, чтобы стабильность на уровне была..
Коротко о реализации данной идеи..
Собрал сборку windows для личных нужд. встроил текущий код в установку специальным образом.
После установки запускается и висит в памяти(даже после перезагрузки) до тех пор пока доступа в интернет не будет.
Дальше как появляется доступ в интернет — запускается моя утилита и скрипт проверки связи с интернетом самоудаляеться..
Помогите все грамотно реализовать. надеюсь на скорую помощь.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
@echo off title Проверка связи с интернетом Echo Проверка связи с интернетом goto test7 :waiting title Пошло ожидание, ждите следующей проверки echo Ждем 5 минут и повторяем заново ping -n 300 127.1 >NUL Goto test1 :: Проверка связи с интернетом (ver.3) :test1 cls echo Проверка связи с 8.8.8.8 ping -n 1 8.8.8.8 |>nul find /i "TTL=" && (Goto :ok) || (Goto :test2) :test2 echo Проверка связи с ya.ru ping -n 1 ya.ru |>nul find /i "TTL=" && (Goto :ok) || (Goto :test3) :test3 echo Проверка связи с mail.ru ping -n 1 mail.ru |>nul find /i "TTL=" && (Goto :ok) || (ping -n 9 127.1 >NUL& Goto :test4) :: Проверка связи с интернетом (ver.2) :test4 cls echo Проверка связи с 8.8.8.8 ping 8.8.8.8 2>nul 1>&2&&Goto :ok||Goto :test5 :test5 echo Проверка связи с ya.ru ping ya.ru 2>nul 1>&2&&Goto :ok||Goto :test6 :test6 echo Проверка связи с mail.ru ping mail.ru.ru 2>nul 1>&2&&Goto :ok||ping -n 18 127.1 >NUL& Goto :test7 :: Проверка связи с интернетом (ver.1) :test7 cls echo Проверка связи с 8.8.8.8 ping -n 2 8.8.8.8 | find /I "TTL" > nul if ERRORLEVEL=1 Goto :test8 if ERRORLEVEL=0 Goto :ok :test8 echo Проверка связи с ya.ru ping -n 2 ya.ru | find /I "TTL" > nul if ERRORLEVEL=1 Goto :test9 if ERRORLEVEL=0 Goto :ok :test9 echo Проверка связи с mail.ru ping -n 2 mail.ru | find /I "TTL" > nul if ERRORLEVEL=1 Goto :waiting if ERRORLEVEL=0 Goto :ok :ok cls echo Интернет работает. echo Запускаем нашу программу run.exe exit
Проверка наличия интернет соединения html [дубликат]
Есть страница html (лендинг) весит в локалке, не у всех пользователей есть интернет, нужно сделать что то вроде проверки есть соединение у пользователя или нет, к примеру если есть у человека интернет то на этой html странице в определнном месте выводится картинка подключение есть, если нет то др. картинка с надписью подключение отсутствует.
Мне кажется с помощью HTML этого нельзя сделать. Нужно подключать JS. Я плохо знаю js, попробуйте добавить тег javascript может кто и подскажет. И еще попробуйте посмотреть вот это ru.stackoverflow.com/questions/515803/…
2 ответа 2
Как вариант, можно попробовать показать какую-либо картинку и если она не загружается, значит соединения нет. Рекомендую поменять ссылку на какую-либо другую картинку.
Можно проверить через условие
Как вариант предлагаю рассматривать не innerHTML а просто поменять пути у картинки.
Проверка наличия подключения к Интернету
Надо узнать есть ли соединение с интернетом. Подойдет любой способ с ping или с другим (если такие существует), можно даже через другую программу, но чтобы можно было управлять через bat файл.
Проверка наличия подключения к интернет-сети
Всем привет! Сильно не ругайтесь,но мне нужна помощь,т.к. занимаюсь этим пару месяцев а успехов в.
Проверка подключения к интернету
Проблема такая мне нужно проверить подключен ли интернет через VBS или bat если да то запустить.
Удалённое определение подключения к интернету
Работаю в IT организации программистом. На компе нет доступа интернета. У других сотрудников.
Проверка наличия интернета
Привет всем! Столкнулся с проблемой проверки наличия подключения интернета через команду FIND .
1 2 3 4 5 6 7 8 9 10 11 12
Dim oPingResult Do For Each oPingResult In GetObject("winmgmts://./root/cimv2").ExecQuery _ ("SELECT * FROM Win32_PingStatus WHERE Address = '8.8.8.8'") If IsObject(oPingResult) Then If oPingResult.StatusCode = 0 Then Ping = True 'Debug.Print "ResponseTime", oPingResult.ResponseTime Exit Do End If End If Next Loop until true
Спасибо за ответ, но мне не надо проверять все время когда появится инет. Надо проверить 1 раз и выдать ответ: инет есть или нет. Цикл тут не нужен.
Сообщение от Dragokas
И почитатайте о принципах реализации алгоритмов на основе WMI:
хотя бы на примере генератора скриптов, указанного здесь Подскажите литературу для начинающего!
Тему можно закрыть. Задачу решили в этой теме.
Добавлено через 15 часов 29 минут
Ок. Не закрывайте. Я просто поставил в известность где можно найти решение этой задачи.
Моя проверялка.
sleep — прога из ResourceKit (очень легко найти отдельно и поместить в кукую-нить PATH папку, в System32 например).
В качестве «индикатора» инета выбран адрес ya.ru (российский лидер по ICMP запросам )
3 прохода сделаны в целях минимизировать ложные срабатывания, ибо errorlevel принимает значение последнего пинга, и не факт, что как раз этот пакет не потеряется. Если у вас большой процент потери пакетов, можете сделать больше проходов.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
@Echo off echo Delay 10 minutes for system full start echo System started %date% %time% >> c:/restart.log sleep 600 :pass1 echo Pass 1 ping ya.ru > nul if ErrorLevel 1 goto pass2 goto delay :pass2 echo Pass 2 ping ya.ru > nul if Errorlevel 1 goto pass3 goto delay :pass3 echo Pass 3 ping ya.ru > nul if ErrorLevel 1 goto restart goto delay :restart echo Restart now echo =============================================== >> c:/restart.log echo Internet connection lost %date% %time% >> c:/restart.log echo =============================================== >> c:/restart.log shutdown /r /f /t 00 :delay echo Delay 10 minutes echo %date% %time% sleep 600 goto pass1
Как проверить через Bash есть Интернет или нет?
результат работы предыдщей команды сохраняется в переменную окружения $?
т.е. после команды
ping -c 1 8.8.8.8
значение $? будет равно 0
а после пинга несуществующего адреса (иммитация неработающего тырнета)
ping -c 1 192.168.250.250
значение $? будет равно 1
значение $? сохранить в другую переменную или подставить в if
ибо оно «быстро затрётся» результатом выполнения последующих команд.
Сначала нужно определиться что такое «есть Интернет». Есть соединение с шлюзом провайдера? С точкой обмена трафика уровня города? С сервером гугла? С сервером котиков, трубой, steam, танками? Наличие связи с одним вовсе не означает наличия связи с другими 🙂 (за исключением роутера провайдера — отсутствие с ним связи есть отсутствие инета вообще).
А можно ли использовать NetworkManager для проверки отсутствия соединения с интернет?
Просто ping, по большому счету, это только проверка доступности определенного хоста.
если ты подразумеваешь под работающим интернетом — загрузку web-странички то используй утилиту curl или wget для этих целей
п.с.
здесь пишутся ответы, а не задаются вопросы, вопросы задаются под ответами пользователей(если это относится к ответу конкретного пользователя), если это касается всех то внеси уточнение в описание своего вопроса или задай новый
majetree, нет, я как раз хочу в целом проверять есть интернет или нет, а не проверять конкретный ресурс на доступность
kkoshakk, что для вас является интернетом, вернее какой критерий нужен вам говорящий о его наличии ?
если это наличие эхо ответа от 8.8.8.8 который вы используете в своём примере то мой ответ был уже дан выше
majetree, Меня интересует как сама OS (Ubuntu) проверяет наличие или отсутствие Интернета, и я хочу использовать точно такой же метод
kkoshakk, ну вот смотри, у меня комп при загрузке подключается к роутеру который обслуживает мою локальную сеть, также данный роутер может подключатся к моему провайдеру который если есть баланс на моем счету пускает дальше своего сайта в глобальную сеть.
Так что в данном случае является доступом в сеть ? подключение к роутеру ? подключение к провайдеру и возможность зайти на его сайт ? возможность достучаться к одному из ресурсов в глобальной сети ?
Убунту может подключится к моему роутеру но это автоматом не означает что я смогу сёрфить в сети
majetree, Хорошо, есть Network manager, через него можно посмотреть есть доступ в нет или нет, он же как то определяет есть доступ в глобальную сеть или его нет
majetree, А если проверку делать так:
#!/bin/bash
if [[ $(ifconfig -a | grep -c RUNNING) -gt 1 ]]; then
echo «True»
else
echo «False»
fi
#!/bin/bash
if [[ $(ip addr | grep -cw inet) -gt 1 ]]; then
echo «True»
else
echo «False»
fi
Хорошо, есть Network manager, через него можно посмотреть есть доступ в нет или нет, он же как то определяет есть доступ в глобальную сеть или его нет
он никак не определяет доступ к глобальной сети
поймите, вы подключаетесь только к первому узлу, а что это за узел уже и определяет куда вы в дальнейшем можете попасть, это может быть ваш роутер или провод от провайдера ведущего прямо на его сервер или еще что нибудь
это лишь покажет какие сетевые интерфейсы у вас подняты, но это не гарантирует что вы подключены к какой либо сети сети, то есть это необходимое но необязательное условие
#!/usr/bin/sh IP=$1 if $(fping -r 1 -q $IP); then echo "TRUE" else echo "FALSE" fi
примеры:
./checkip.sh 192.168.1.1
покажет TRUE или FALSE в зависимости от прохождения пинга до выбранного хоста
#!/bin/bash
if [[ $(ip addr | grep -cw inet) -gt 1 ]]; then
echo «True»
else
echo «False»
fi
ну во первых нужно отнимать -1 так как lo дефолтное обозначение внутреннего интерфейса, а во вторых это будет говорить только о том что вам присвоили ip в каких-то сетях, например, провайдер вас к себе подключил но в глобальную сеть может и не пускать
Если вам нужно узнать есть ли доступ к глобальной сети интернет то для этого обычно пингуют dns одного из распространенных ресурсов в нужной сети, часто для этого служит гугловский(google) dns сервер — 8.8.8.8
достаточно для чего ? если только для того чтобы выяснить что вам доступен сервер вашего провайдера то да, но это не будет гарантией того что вам будет доступна глобальная сеть.
Ваш провайдер это только главный промежуточный узел на пути в глобальную сеть. Но ваш провайдер может пускать только к себе и не пускать дальше
п.с.
чтобы увидеть наглядно прохождение сигнала(пинга) через узлы к определённому хосту в сети посмотрите утилиту mtr
например:
mtr 8.8.8.8
или например для яндекс dns:
mtr 77.88.8.8
majetree, То есть, если провайдер отключит меня за неуплату, то всеравно буду пинговать его DNS, но пингонуть гугл или яндекс я уже не смогу?
kkoshakk, всё зависит от провайдера и какие ограничения он налаживает, но в большинстве случаев он так и поступит
kkoshakk, всё зависит от того что вам нужно
Если вам нужно знать доступна ли глобальная сеть интернет то пингуйте(ping, fping . ) dns крупных поисковиков(yandex, google), так как вероятность что они не будут отвечать очень мала, а также они устойчивы по времени работы и нагрузке.
echo это вообще не из этой оперы, её дело просто вывести какое либо сообщение(аналог print-a)
wget/curl — используется для того чтобы выяснить доступен ли нужный сайт, так как сервер на котором крутится сайт может нормально работать и пинговаться, а вот сам сайт на этом сервере может лежать