Автор Тема: [Автоматизация] Переподключиться к интернету  (Прочитано 685 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн CRD [?]

  • Новичок
  • *
  • Сообщений: 57
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.0
Версия AutoIt: 3.3.14.4

Описание: Скрипт должен раз в 5 минут проверять наличие интернета, если его нет, то переподключиться к любой из известных WiFi сетей. Сетей может быть несколько (роутер и несколько повторителей стоящих в офисе). Естественно лучше, чтоб подключался к сети с наиболее сильным сигналом на данный момент.

Примечания: По непонятным причинам на работе время от времени падает интернет (обрыв соединения). Грешим на провайдера, т.к. тестили 3 роутера, докупили повторители сигнала, итог одинаковый. Альтернатив нет, промзона, только местный провайдер ((( Комп выходит в сеть по вайфаю. В настройках соединения стоит "подключаться автоматически", но по чему-то этого не происходит. Когда нахожусь на работе это не проблема, но если мне надо из дому по тимке присоединиться к рабочему компу, а интернет в офисе упал во время моего отсутствия - это нереально. Доходило до абсурда, звонил на пункт охраны и просил деда сторожа открыть наш офис и переподключить комп к интернету. Возможно у кого-то есть скрипт или наработки, чтобы автоматически переподключаться к сети в случае патения интернета. Благодарю.

Русское сообщество AutoIt

[Автоматизация] Переподключиться к интернету
« Отправлен: Апрель 12, 2018, 15:22:35 »

Оффлайн CRD [?]

  • Новичок
  • *
  • Сообщений: 57

  • Автор темы
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.0
Друзья! Вопрос стоит очень остро, помогите пожалуйста. Или если знаете готовое решение (стороннюю программу) - посоветуйте.

Благодарю.

Оффлайн hedji [?]

  • Осваивающий
  • **
  • Сообщений: 284
  • Репутация: 43
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Для запуска каждые 5 минут рекомендую использовать встроенный в Windows планировщик задач, он более надёжен, чем бесконечный цикл со слипом.

Код: AutoIt [Выделить]
#RequireAdmin
TCPStartup()
$iSocket = TCPConnect("8.8.8.8", "80")
If @error Then
    $CMD1 = 'netsh interface set interface "Подключение по локальной сети 2" DISABLED'
    $CMD2 = 'netsh interface set interface "Подключение по локальной сети 2" ENABLED'
    RunWait(@ComSpec & " /c " & $CMD1)
    Sleep(5000)
    RunWait(@ComSpec & " /c " & $CMD2)
EndIf
TCPShutdown()
 

« Последнее редактирование: Апрель 13, 2018, 14:52:10 от hedji »

Оффлайн CRD [?]

  • Новичок
  • *
  • Сообщений: 57

  • Автор темы
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.0
hedji, спасибо. Сейчас доберусь до рабочего места, попробую протестировать.

Только пара вопросов:
1. Чем плох бесконечный цикл ? Это ведь делает скрипт более универсальным и автоматизированным
2. А как скрипт поведет, если сетей несколько ? С локалкой все ясно, с ней бы проблем не было, но провод кинуть нет возможности, на проводах висят сервер и повторители
3. Не увидел в коде проверки интернета. К примеру по вайфай может быть коннект установлен, а сеть имеет ограничение (без доступа). Я бы проверял к примеру на открытие сайта ya.ru

Русское сообщество AutoIt

Re: [Автоматизация] Переподключиться к интернету
« Ответ #3 Отправлен: Апрель 13, 2018, 16:55:21 »

Оффлайн hedji [?]

  • Осваивающий
  • **
  • Сообщений: 284
  • Репутация: 43
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
1. При засыпании/долгом простое ПК бывает зависает.
2. Скрипт выкл/вкл сетевой адаптер, подставьте вместо локалки вай-фай адаптер, поэкспериментируйте.
3. TCPConnect("8.8.8.8", "80") - попытка подключиться к гугловскому dns.

Оффлайн CRD [?]

  • Новичок
  • *
  • Сообщений: 57

  • Автор темы
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.0
Чет никак не могу разобраться ((( Нашел вот такой скрипт от Крепыша http://autoit-script.ru/index.php?topic=17780.msg134143#msg134143

При тестировании отключился от сети, переподключение не произошло (((

Оффлайн hedji [?]

  • Осваивающий
  • **
  • Сообщений: 284
  • Репутация: 43
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Добавил комменты:
Код: AutoIt [Выделить]
#RequireAdmin
TCPStartup()
$iSocket = TCPConnect("8.8.8.8", "80") ;пробуем подключиться к гугловскому серверу
If @error Then ;если подключиться не удалось
    $CMD1 = 'netsh interface set interface "Подключение по локальной сети 2" DISABLED'
    $CMD2 = 'netsh interface set interface "Подключение по локальной сети 2" ENABLED'
    RunWait(@ComSpec & " /c " & $CMD1) ;выключаем сетевой адаптер с именем 'Подключение по локальной сети 2'
    Sleep(5000)
    RunWait(@ComSpec & " /c " & $CMD2) ;включаем сетевой адаптер с именем 'Подключение по локальной сети 2'
EndIf
TCPShutdown()
 


для тестирования что скрипт работает:
Код: AutoIt [Выделить]
#RequireAdmin
TCPStartup()
$iSocket = TCPConnect("888.8.8.8", "80") ;пробуем подключиться к несуществующему адресу
If @error Then ;если подключиться не удалось
    $CMD1 = 'netsh interface set interface "Подключение по локальной сети 2" DISABLED'
    $CMD2 = 'netsh interface set interface "Подключение по локальной сети 2" ENABLED'
    RunWait(@ComSpec & " /c " & $CMD1) ;выключаем сетевой адаптер с именем 'Подключение по локальной сети 2'
    Sleep(30000) ;ждем 30 секунд, в это время можно увидеть, что сетевой адаптер выключен
    RunWait(@ComSpec & " /c " & $CMD2) ;включаем сетевой адаптер с именем 'Подключение по локальной сети 2'
EndIf
TCPShutdown()
 


Тестирую на win 7.

Оффлайн Dima1337 [?]

  • Осваивающий
  • **
  • Сообщений: 180
  • Репутация: 21
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Зачем отрубать адаптер если можно по новой подключиться к сети?  :o
Код: AutoIt [Выделить]
Global $interface = '"Беспроводная сеть"'
Global $wifipoints = '"PROXIMUS_FON"'

While 1
    If InetGetSize("http://www.ya.ru/") = 0 Then ; Чекаем пинг, если нет инета регистрируемся по новой.
        RunWait('netsh.exe wlan disconnect interface=' & $interface, '', @SW_HIDE)  ; отключиться
        Sleep(1000)
        RunWait('netsh.exe wlan connect name=' & $wifipoints & ' interface=' & $interface, '', @SW_HIDE)  ; Подключиться
        Sleep(4000)
    EndIf
WEnd


Правильный вопрос - полдела!

Русское сообщество AutoIt

Re: [Автоматизация] Переподключиться к интернету
« Ответ #7 Отправлен: Апрель 16, 2018, 14:10:02 »

Оффлайн CRD [?]

  • Новичок
  • *
  • Сообщений: 57

  • Автор темы
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.0
Либо лыжи не едут, толи весна пришла ...

Dima1337, твой метод сработал, спасибо. Только как подключаться не к одной сети, а к списку сохраненных на пк, не перечисляя их имена ?


Оффлайн CRD [?]

  • Новичок
  • *
  • Сообщений: 57

  • Автор темы
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.0
Все еще очень актуально. Ищу универсальное решение, чтобы коннектился не по имени сети, а пытался присоединиться к сетям из списка известных

Оффлайн Dima1337 [?]

  • Осваивающий
  • **
  • Сообщений: 180
  • Репутация: 21
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Раз тема еще актуальна то вот пример:
Код: AutoIt [Выделить]
Global $interface = '"Беспроводная сеть"', $string = ''

While 1
    If InetGetSize("http://www.ya.ru/") = 0 Then ; Проверяем соединение, при потере продолжаем
        RunWait('netsh.exe wlan disconnect interface=' & $interface, '', @SW_HIDE)  ; Отключаемся от текущей Wifi
        Sleep(1000)

        _find_wifi() ; Ищем wifi сети ==> $wifi2

        For $i = 2 To $wifi2[0]
            RunWait('netsh.exe wlan connect name="' & $wifi2[$i] & '" interface=' & $interface, '', @SW_HIDE)  ; Подключиться
            Sleep(5000)
            If InetGetSize("http://www.ya.ru/") <> 0 Then ExitLoop
        Next
    EndIf
WEnd

Func _find_wifi()
    $iPid = Run(@ComSpec & " /c netsh wlan show networks", @ScriptDir, Default, 2) ; Запускаем коммандную строку и ищем wifi сети

    For $i = 0 To 200000
        $aRead = StdoutRead($iPid)
        If $aRead <> '' Then
            $string = $string & @CRLF & _Encoding_CyrillicTo1251($aRead) ; Парсим коммандную строку на wifi сети в прямом доступе и расшифровываем
        EndIf
    Next

    $string = StringSplit($string,@CRLF) ; Разделяем по строкам
    Global $wifi = ''

    For $i = 0 To $string[0]
        If StringInStr($string[$i], "SSID") Then ; Выбираем ТОЛЬКО SSID c WPA2 шифрованием
            If StringInStr($string[$i + 4], "WPA2") Then
                $string[$i] = StringTrimLeft($string[$i], 8)
                If StringLeft($string[$i], 1) = ' ' Then
                    $string[$i] = StringTrimLeft($string[$i], 1)
                EndIf
                $wifi = $wifi & '\' & $string[$i]
            EndIf
        EndIf
    Next

    Global $wifi2 = StringSplit($wifi,'\')
EndFunc

#Region Encoding.au3 ;==>Следующие функции необходимы для обеспечения работы скрипта

Func _Encoding_CyrillicTo1251($sString)
    Local $sEncoding = _Encoding_GetCyrillicANSIEncoding($sString)

    If $sEncoding = 'IBM-866' Then
        Return _Encoding_866To1251($sString)
    EndIf
EndFunc ;==>_Encoding_CyrillicTo1251

Func _Encoding_GetCyrillicANSIEncoding($sString)
    Local $iWIN = 0, $iDOS = 0, $iKOI = 0, $iISO = 0
    Local $aStr = StringSplit($sString, '')

    For $i = 1 To $aStr[0]
        Switch Asc($aStr[$i])
            Case 192, 224, 200, 232, 206, 238, 210, 242
                $iWIN += 1
            Case 128, 160, 136, 168, 142, 174, 146
                $iDOS += 1
            Case 225, 193, 233, 201, 239, 207, 244, 212
                $iKOI += 1
            Case 176, 208, 184, 216, 190, 222, 194
                $iISO += 1
            Case 226
                $iDOS += 1
                $iISO += 1
        EndSwitch
    Next

    If $iDOS > $iKOI And $iDOS > $iWIN And $iDOS > $iISO Then
        Return 'IBM-866'
    EndIf
EndFunc ;==>_Encoding_GetCyrillicANSIEncoding

Func _Encoding_866To1251($sString)
    Local $sResult = '', $iCode
    Local $aSplit = StringSplit($sString, '')

    For $i = 1 To $aSplit[0]
        $iCode = Asc($aSplit[$i])

        Switch $iCode
            Case 128 To 175
                $aSplit[$i] = Chr($iCode + 64)
            Case 224 To 239
                $aSplit[$i] = Chr($iCode + 16)
            Case 240
                $aSplit[$i] = Chr(168)
            Case 241
                $aSplit[$i] = Chr(184)
            Case 252
                $aSplit[$i] = Chr(185)
        EndSwitch

        $sResult &= $aSplit[$i]
    Next

    Return $sResult
EndFunc ;==>_Encoding_866To1251

#EndRegion

Скрипт будет перебором подключаться к сети.

Оффлайн CRD [?]

  • Новичок
  • *
  • Сообщений: 57

  • Автор темы
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.0
Dima1337, спасибо. Потестировал, у меня работает через раз. Переподключается к разным сетям, но по непонятным причинам во время теста за 30 минут так и не смог подключиться ни к одной из сетей ((( Могут этому быть виной сети соседних офисов ?

Оффлайн hedji [?]

  • Осваивающий
  • **
  • Сообщений: 284
  • Репутация: 43
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
OffTopicБорьба со следствием не помогла, пора бороться с причиной - чинить вай-фай  ;D

Оффлайн CRD [?]

  • Новичок
  • *
  • Сообщений: 57

  • Автор темы
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.0
OffTopicтогда уж не вайфай чинить, а провайдера :D

Оффлайн CRD [?]

  • Новичок
  • *
  • Сообщений: 57

  • Автор темы
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.0
Все еще актуально, поэтому вверх ...

Русское сообщество AutoIt

Re: [Автоматизация] Переподключиться к интернету
« Ответ #14 Отправлен: Апрель 23, 2018, 22:32:24 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
4 Ответов
6127 Просмотров
Последний ответ Ноябрь 15, 2010, 16:30:56
от Stells
21 Ответов
16696 Просмотров
Последний ответ Октябрь 26, 2014, 11:20:32
от max1300
0 Ответов
2235 Просмотров
Последний ответ Февраль 13, 2011, 14:15:21
от Yashied
5 Ответов
3878 Просмотров
Последний ответ Февраль 08, 2012, 23:36:22
от Afonichev
8 Ответов
6917 Просмотров
Последний ответ Март 15, 2012, 22:32:39
от erlik
0 Ответов
2850 Просмотров
Последний ответ Июнь 07, 2013, 17:08:04
от firex
4 Ответов
1935 Просмотров
Последний ответ Март 19, 2014, 17:21:27
от erlik
2 Ответов
1642 Просмотров
Последний ответ Май 15, 2015, 11:53:39
от ZeVSalt
6 Ответов
1405 Просмотров
Последний ответ Январь 27, 2017, 18:23:48
от InnI
6 Ответов
864 Просмотров
Последний ответ Февраль 05, 2018, 18:47:18
от Astel064