Войти

Показать полную графическую версию : [решено] Bat файл мониторинга подключения


XXXp
11-07-2010, 00:59
Здравствуйте!
Можно ли сделать bat файл, который проверял, не отвалилась ли сеть, например пингуя гугл или яндекс и, если отвалилась, то включал подключение по локальной сети (наверное через devcon). А если все нормально, то ничего больше не делал.
Суть проблемы:
Идет автоматический сбор статистики, иногда (раз в несколько дней) слетает сеть, переходит в состояние "отключено" и больше не включается, это очень плохо, т.к. дальше все идет в тар-тара-рары и сбор заканчивается.
Требуется бат или vbs файл, который единовременно проверял бы активность подключения, в случае его отсутствия включал бы сеть, а в случае его присутствия просто бы закрывался. Заранее больше спасибо!

Freeman256
11-07-2010, 05:42
Да, мне бы такой очень пригодился!

Petya V4sechkin
11-07-2010, 11:18
XXXp, воспользуйтесь фильтрами (http://tools.oszone.net/Vadikan/faq.html#filters) по названию темы по подключ.

http://oszone.net/user_img/050214130343/filters.png

Результат (http://forum.oszone.net/forumdisplay.php?f=102&filter_string=подключ&filter_by=title)

deepred
11-07-2010, 19:00
XXXp,

вопрос лучше ставить конкретнее: какая ОС, используется ли DHCP? И зачем обращаться к "железу"?
на пробу такой вариант (Static):

Echo off&Chcp 866&cmdow @ /hid&CLS(cmdow для скрытия окна)

:Control
Set $IPaddress=10.184.92.51 & Set $Mask=255.255.252.0
Set $gateway=10.184.92.1 & Set $gwmetric=256
Set $DNS_1=192.168.248.21 & Set $DNS_2=192.168.248.21
Set stop=600000 (задержка)
ping -n 1 kremlin.ru>nul
If ErrorLevel 0 (call :stop) else (
netsh interface ipv4 delete
netsh interface ipv4 set address "Local Area Connection" ^
static %$IPaddress% %$Mask% %$gateway% %$gwmetric%
netsh interface ipv4 set dns "Local Area Connection" ^
static %$DNS_1%
netsh interface ipv4 add dns "Local Area Connection" ^
static %$DNS_2%
snetsh interface ipv4 how config)

:stop
ping -n 2 -w %stop% kremlin.ru>nul
goto control
Если используется DHCP, то:
netsh interface ipv4 delete
snetsh interface ipv4 et address "Local Area Connection" source=dhcp
snetsh interface ipv4 et dns «Local Area Connection» dhcp
Информация: cmdow (http://www.commandline.co.uk/cmdow/) и Netsh (http://technet.microsoft.com/ru-ru/library/cc779693(WS.10).aspx)

XXXp
12-07-2010, 16:55
Код не работает, суть совсем другая, нужно чтобы включал подключение по локальной сети, которое становится "выключено", а насколько я пока смог узнать это может только devcon

deepred
12-07-2010, 18:37
XXXp,
Код не работает, суть совсем другая..., нужно чтобы включал подключение по локальной сети, которое становится "выключено", а насколько я пока смог узнать это может только devcon
1. Devcon оперирует двумя состояниями устройств: "устройство используется" и "устройство отключено"
2. Если же само подключение имеет статус "Отключено", то не факт, что Devcon его не включит (специально проверил на двух PC!!!) и к тому же команда devcon restart сносит все настройки поключения (для STAT IP)
3. Для работы с частью *net* требуются утилиты netsh, ping, tracert и ipconfig, манипуляции непосредственно с подключением
позволяет осуществлять только netsh...

PS: Непосредственно (но без цикла проверки) этот код использую сам для переподключения после зависания маршрутизатора - все работает на "Ура"!

deepred
12-07-2010, 19:13
XXXp,
Решение для devcon, попробуй так:

Echo Off& Chcp 866
Echo.
ping -n 1 kremlin.ru>nul

If errorlevel 1 ((
for /f "tokens=2 delims=&" %%a in ('devcon listclass net') ^
do (
devcon disable *%%a* >nul
devcon enable *%%a* >nul
)
Echo Connection restarted !)) else (Echo Connection available!)
Echo.
Echo Push anykey to close
pause>nul
goto :eof

И вариант управления под WSH:

Set WshShell = CreateObject("WScript.Shell")
RetCode = WshShell.Run("ping -n 1 kremlin.ru", 0, True)

If RetCode = 1 Then

strNetConn = "Сетевые подключения"
strConn = "Подключение по локальной сети"
strEnable = "&Включить"
strDisable = "&Отключить"

Set objShell = CreateObject("Shell.Application")
Set objCP = objShell.Namespace(3)
For Each elem in objCP.Items
If elem.Name = strNetConn Then

Set colNetwork = elem.GetFolder
Exit For
End If
Next

Set Conn = Nothing
For Each clsConn in colNetwork.Items
If Instr(LCase(clsConn.name), LCase(strConn)) Then
Set Conn = clsConn
Exit For
End If
Next
If Conn Is Nothing Then
WScript.Echo "Network Connection not found"
WScript.Quit
End If

bEnabled = True
Set objEnable = Nothing
Set objDisable = Nothing
For Each clsVerb in Conn.verbs

If clsVerb.Name = strEnable Then
Set objEnable = clsVerb
bEnabled = False
End If

If clsVerb.name = strDisable Then
Set objDisable = clsVerb
End If
Next

objEnable.DoIt
strStatus = "enabled."
WScript.Sleep 1000
End If
WScript.Sleep 1000

Wscript.quit (1)




© OSzone.net 2001-2012