Что нового

Скрипт переключения каналов связи

spownc

Новичок
Сообщения
4
Репутация
0
Такая ситуация:
Есть aDSL модем(основной канал), с прошитыми в него настройками. При отключении/подключении интернета(деньги кончились или тупо связи нет) - подключается автоматом.
Так же есть USB модем(beeline) на случай отключения основного канала.
Интернет нужен всегда.
Задача: написать скрипт, такой логики:

Проверка связи путем пинга Яндекса
если пинг есть, проверяем запущен ли Билайн, иначе выхдим
Если билайн запущен, проверить основной канал(есть ли связь именно по основному каналу),
Если основной канал не работает, запущен билайн и яндекс пингуется, то выходим
Если если связь по основному каналу есть, то разрываем соединение билайна и закрываем программу USB модема.

Суть проблемы:
Скрипт написан и работает, НО!
Я не могу проверить связь ИМЕННО ПО ОСНОВНОМУ КАНАЛУ.
В принципе надо пингонуть шлюз аДСЛ соединения и все... Но заказчик не дает этого сделать...
У него сеть : инет - модем - свитч -2 ноутбука

Ну а теперь, собственно, вопрос.
Как через AutoIT-скрипт проверить есть ли связь именно на сетевой карте(в неё воткнут основной канал от модема)

Внимательно жду советов)
Всем заранее спасибо!


Добавлено:
Сообщение автоматически объединено:

Так же прилогаю скрипт:

Код:
$google = Ping("google.ru")
$getway = Ping("192.168.70.254")

if $google Then
	if WinActivate("МТС Коннект") Then
		MsgBox(0,"Есть МТС","Интернет от МТС")
			[b]if $getway Then ;вот тут я не знаю что нужно проверять... ШЛЮЗа нет[/b]
				WinSetState("МТС Коннект", "", @SW_SHOW)
				Sleep(1000)
				ControlClick("МТС Коннект","&Отключить","&Отключить")
				Sleep(3000)
				WinKill("МТС Коннект")
			Else
				MsgBox(0,"Есть МТС","Основное оединение не удалось")
				Exit
			EndIf
	Else
		Exit
	EndIf
Else
	MsgBox(0,"Нет МТС","Нет соединения")
		MsgBox(0,"Нет МТС","Запуск МТС")
		Run('C:\Program Files\MTS Connect\MTS Connect.exe')
		Sleep(10000)
		ControlClick("МТС Коннект","","Подключить")
		Sleep(8000)
		WinSetState("МТС Коннект", "", @SW_HIDE)
			if $google Then
				MsgBox(0,"Есть МТС","Интернет от МТС")
				Sleep(4000)
				Exit
	EndIf
EndIf
EndIf


Писал для МТС модема...
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Re: Помогите разобряться со скриптом

Предупреждение За нарушение правил форума (пункт Б.5):
Имя темы должно нести смысловую нагрузку (отражать суть вопроса/проблемы)
Правильно сформулированное название темы привлекает больше внимания, и шансы получить конкретный ответ увеличиваются.


Как правильно называть темы

"Помогите разобряться со скриптом" - это неприемлемое название темы, переименуйте тему иначе она будет закрыта, а вам возможно будет выдан бан на несколько дней.

С уважением, Модератор раздела.








{CodeWarn}
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
spownc [?]
Как через AutoIT-скрипт проверить есть ли связь именно на сетевой карте
Можно так, во всяком случае у меня работает с простым сетевым подключением (если сеть есть - статус=2, если выдернуть кабель - статус=7):
Код:
$oWMI = ObjGet('winmgmts:{impersonationLevel=impersonate}!\\' & @ComputerName & '\root\cimv2')
$oItems = $oWMI.ExecQuery('SELECT * FROM Win32_NetworkAdapter WHERE NetConnectionStatus >= 0')
ConsoleWrite('всего подключений:' & @TAB & $oItems.Count & @CRLF)
ConsoleWrite('--------------------' & @CRLF)
For $oItem In $oItems
	ConsoleWrite('название подключения:' & @TAB & $oItem.NetConnectionID & @CRLF)
	ConsoleWrite('статус подключения:' & @TAB & $oItem.NetConnectionStatus & @CRLF)
	ConsoleWrite('--------------------' & @CRLF)
Next

Можно поиграться с запросом, чтобы сразу получать статус нужного подключения:
Код:
$oWMI = ObjGet('winmgmts:{impersonationLevel=impersonate}!\\' & @ComputerName & '\root\cimv2')
$oItems = $oWMI.ExecQuery('SELECT * FROM Win32_NetworkAdapter WHERE NetConnectionID = "Подключение по локальной сети"')
For $oItem In $oItems
	ConsoleWrite('статус подключения:' & @TAB & $oItem.NetConnectionStatus & @CRLF)
Next


MSDN
 
Автор
S

spownc

Новичок
Сообщения
4
Репутация
0
если сеть есть - статус=2, если выдернуть кабель - статус=7

Спасибо!
Но это немного не то... Если сеть воткнута, а модем не дает соединения с интернетом все равно "2 (0x2) Unknown".

USB модем - интернет
/
комп вот на этом компе надо проверять соединение с интернетом(пинговать шлюз в идеале)
\
роутер - модем -интернет
/
комп
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
spownc [?]
Если сеть воткнута, а модем не дает соединения с интернетом все равно "2 (0x2) Unknown".
spownc
у тебя же было в скрипте
Код:
Ping()

я использовал
Код:
Inetread()
 
Автор
S

spownc

Новичок
Сообщения
4
Репутация
0
Александр, подскажите,
а если использовать HttpSetProxy для Ping, можно же отправить эхо-запрос по определенному каналу?
К примеру, проводной инет идет на адрес шлюза(в моем случае это стационарный модем DSL) потом в инет,
а когда подключен USB модем, соединение прямо смотрит на прова.
Дак вот, если в HttpSetProxy указать адрес модема, то Ping('ya.ru') ускачет через указанный в прокси адрес...

Поправьте меня, если я не верно все понял.


Добавлено:
Сообщение автоматически объединено:

Таким образом я проверю соединение на стационарном модеме при подключенном USBмодеме?
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
spownc [?]
а если использовать HttpSetProxy для Ping, можно же отправить эхо-запрос по определенному каналу?
Этот прокси предназначен только для http запросов и пинги им завернуть не удастся.
Можно попытаться выполнить такой финт ушами:
Код:
RunWait(@ComSpec & ' /c ' & 'tracert ya.ru > c:\out.txt', '', @SW_HIDE)

И анализировать содержимое файла c:\out.txt
 
Автор
S

spownc

Новичок
Сообщения
4
Репутация
0
А че если
Код:
HttpSetProxy(2, "host:port")

+
Код:
Inetread("ya.ru")

вместо
Код:
Ping("ya.ru")
 
Верх