Управление 3G модемом!

Hrumov

Client
Регистрация
05.07.2017
Сообщения
11
Благодарностей
2
Баллы
3
Смена IP адреса (Переподключение сети) для 3G/4G модемов с прошивкой HiLink и Модифицированным веб-интерфейсом на основе WebUI.

Без перезагрузки модема!
Смена IP происходит за 10 сек.

Внимание! В настройках сети предпочтительный режим должен быть выбран UMTS или GSM, т.к. в сети 4G (LTE) данный способ смены IP не работает.
Здравствуйте, у меня 3g модем huawei беспроводной(можно и по проводу юзать).
Как пользоваться вашим кодом?
Что-то менять нужно?
 

leha52rus

Client
Регистрация
01.06.2017
Сообщения
262
Благодарностей
91
Баллы
28
В общем если автор темы не против, то законспектирую в его теме то как мне удалось победить (ребутнуть) модем от МегаФона E 352b
Дело было так.
После безуспешных попыток манипуляциями по перезагрузке модема, я решил создать своё подключение а не использовать то которое мне предлагает автоматически созданное при установке драйверов модема
upload_2017-7-12_23-11-40.png
Далее я отредактировал код (вписал название своего соединения ""reboot"")
upload_2017-7-12_23-16-52.png
Вот собственно и сам код, по средствам которого я осуществил задуманное
Код:
netsh interface set interface name="Имя Вашего Соединения" admin=enabled
rasdial /disconnect
ping -n 5 127.0.0.1 > nul
rasdial "Имя Вашего соединения" /callback:*97#
И самое главное! Запускается это всё от имени АДМИНИСТРАТОРА
Я осуществил это так -
создаете ярлык к вашему файлу .bat и даете ему права исполнения от администратора
upload_2017-7-12_23-20-26.png[upload_2017-7-12_23-22-12.png/SPOILER]
Гуру посмеются :-)
Новички поблагодарят
 

Вложения

  • Спасибо
Реакции: 2Mechanic и spbalexpiter

evgen2522

Client
Регистрация
08.01.2016
Сообщения
470
Благодарностей
106
Баллы
43
Совершенно верно,так и делаю
может авто подключение модема не включено? надо просто наглядно это видеть, много чего может мешать подключению, даже защитник и фаервол может палки в колеса пихать
 
  • Спасибо
Реакции: leha52rus

Владимир.

Новичок
Регистрация
08.12.2014
Сообщения
1
Благодарностей
0
Баллы
1
Бат файл для переподключения 3G модэма.если провайдер другой - меняйте MTS3G

ping -n 3 127.0.0.1 > nul
rasdial "MTS3G" /callback:*99#
 

eagleowl

Client
Регистрация
03.11.2012
Сообщения
263
Благодарностей
30
Баллы
28
В общем если автор темы не против, то законспектирую в его теме то как мне удалось победить (ребутнуть) модем от МегаФона E 352b
Дело было так.
У меня такой же модем, не могу его побороть. После втыкания запускается установка проги Huawei Modem 3.5. Ее вообще надо ставить? Если ее поставить то соединение работает, но в списке соединений почему-то значится как нерабочее:
huawei.jpg
Вероятно из-за этого FreeProxy не показывает его в списке и не дает выбрать.
Как правильно создать свое соединение? Прогу сносить надо?

Еще проблема - траффик упорно гоняет через модем, несмотря на то что метрика на локальной сети 100 а на модеме 4000. Когда через мобильник подключал то все четко там работает, прокси работает - все как надо. Но непонятно как по команде от компа переключать соединение на телефоне. Это единственная проблема.
 
Последнее редактирование:

mmmeshop

Новичок
Регистрация
18.12.2015
Сообщения
4
Благодарностей
2
Баллы
3
Спасибо большое, все получилось. Одно интернет на киевстаре закрыл ссылки архива в данном топике.
Бояться!!! Нас после того как СМС-ками воспользовались.
А для Новичков. Вот есть картинка выше ! Нужно переименовать имя соединения ( и не важно модем это или wifi ) на латинские буквы, заменяем в bat файлах на новое имя и все работает!
 
  • Спасибо
Реакции: avtostopshik

DmKa

Client
Регистрация
24.09.2017
Сообщения
126
Благодарностей
16
Баллы
18
Возникла задача.

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

Severip

Client
Регистрация
17.10.2013
Сообщения
346
Благодарностей
98
Баллы
28
DmKa, можно использовать глобальную переменную или запись чего-то в файл с последующей проверкой, вариантов масса...
 

DmKa

Client
Регистрация
24.09.2017
Сообщения
126
Благодарностей
16
Баллы
18
"массы" не вижу - ну проверил "поток 1" что IP есть в списке и остановился. Дальше то что? Как определить что все потоки остановились и можно запускать смену IP ?

Хотя....... можно при остановки Потока писать строку в файл.
Но тогда надо ставить отдельный поток на постоянный монироринг этого файла
 

Severip

Client
Регистрация
17.10.2013
Сообщения
346
Благодарностей
98
Баллы
28
DEL
 
Последнее редактирование:

Severip

Client
Регистрация
17.10.2013
Сообщения
346
Благодарностей
98
Баллы
28
В конце проекта делаешь проверку счетчика в файле, добавляешь к значению +1, типа restart=[1].
Далее набрал 3, если нужно вешаешь потоки на небольшую паузу, обнуляешь счетчик и перезагружаешь модем, все в одном шаблоне. Тоже самое можно через глобальные переменные сделать, это самые простые варианты.
 

Koqpe

Client
Регистрация
23.12.2014
Сообщения
1 100
Благодарностей
649
Баллы
113
Не усложняйте. В настройках выполнения шаблона ставите количество потоков 3 и количество выполнений тоже 3.

Шаблон отработал, запускайте смену ip.

Если меняете ip другим шаблоном, поставьте в нем проверку количества работающих потоков первого шаблона и при нулевом значении запускайте смену ip.
В конце выполнения шаблона, после проверки что ip поменялся, делайте выполнение батника который запустит первый шаблон в три потока на три выполнения.
Общее количество нужных выполнений задавайте в настройках второго шаблона "количество выполнений" деленное на три.
 
Последнее редактирование:

DmKa

Client
Регистрация
24.09.2017
Сообщения
126
Благодарностей
16
Баллы
18
поставьте в нем проверку количества работающих потоков первого шаблона и при нулевом значении запускайте смену ip.
Как поставить проверку количество работающих потоков определенного шаблона?
 

Severip

Client
Регистрация
17.10.2013
Сообщения
346
Благодарностей
98
Баллы
28

Koqpe

Client
Регистрация
23.12.2014
Сообщения
1 100
Благодарностей
649
Баллы
113
Как поставить проверку количество работающих потоков определенного шаблона?
Поищите на форуме решение C# или попробуйте снипет который возвращает статус шаблона, работает или нет:
http://zennolab.com/discussion/threads/uznat-kolichestvo-zapuschennyx-potokov.25120/#post-175171
 

Bober

Пользователь
Регистрация
17.01.2016
Сообщения
34
Благодарностей
20
Баллы
8
Смена IP адреса (Переподключение сети) для 3G/4G модемов с прошивкой HiLink и Модифицированным веб-интерфейсом на основе WebUI.

Без перезагрузки модема!
Смена IP происходит за 10 сек.

Внимание! В настройках сети предпочтительный режим должен быть выбран UMTS или GSM, т.к. в сети 4G (LTE) данный способ смены IP не работает.

Посмотреть вложение 17994 Посмотреть вложение 17995

C#:
// Сообщение в лог
project.SendWarningToLog("", "Переподключение сети!", true);

string protocol = project.Variables["Protocol"].Value; // http:// или socks5://
string proxy = project.Variables["Proxy"].Value;
string userAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0";
string host = project.Variables["Host"].Value; // например, 192.168.1.1

// GET запрос
var resultGet = ZennoPoster.HttpGet(
    "http://" + host + "/html/mobileconnection.html",
    protocol + proxy,
    "UTF-8",
    ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.HeaderAndBody,
    30000,
    string.Empty,
    userAgent,
    true,
    5,
    AdditionalHeaders: new[] {
        "Host: " + host,
        "Accept: */*",
        "Accept-Language: ru-RU",
        "Connection: keep-alive",
        "Referer: http://" + host + "/html/home.html"
    }
);

// Парсим Set-Cookie и csrf_token
Match matchCookie = Regex.Match(resultGet, "(?<=Set-Cookie: ).*?(?=;)");
Match matchCsrf_token = Regex.Match(resultGet, "(?<=\"csrf_token\" content=\").*?(?=\")");
if (!matchCookie.Success || !matchCsrf_token.Success)
    return null;
string cookies = matchCookie.Value;
string csrf_token = matchCsrf_token.Value;

// POST Отключение
var resultPost = ZennoPoster.HttpPost(
    "http://" + host + "/api/dialup/mobile-dataswitch",
    "<?xml version=\"1.0\" encoding=\"UTF-8\"?><request><dataswitch>0</dataswitch></request>",
    "application/x-www-form-urlencoded",
    protocol + proxy,
    "UTF-8",
    ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.BodyOnly,
    30000,
    cookies,
    userAgent,
    true,
    5,
    AdditionalHeaders: new[] {
        "Host: " + host,
        "Accept: */*",
        "Accept-Language: ru-RU",
        "Accept-Encoding: gzip, deflate",
        "DNT: 1",
        "Content-Type: application/x-www-form-urlencoded; charset=UTF-8",
        "__RequestVerificationToken: " + csrf_token,
        "X-Requested-With: XMLHttpRequest",
        "Connection: keep-alive",
        "Referer: http://" + host + "/html/mobileconnection.html"
    }
);

// Пауза
Thread.Sleep(2 * 1000);

// GET запрос 2
resultGet = ZennoPoster.HttpGet(
    "http://" + host + "/html/mobileconnection.html",
    protocol + proxy,
    "UTF-8",
    ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.HeaderAndBody,
    30000,
    string.Empty,
    userAgent,
    true,
    5,
    AdditionalHeaders: new[] {
        "Host: " + host,
        "Accept: */*",
        "Accept-Language: ru-RU",
        "Connection: keep-alive",
        "Referer: http://" + host + "/html/home.html"
    }
);

// Парсим Set-Cookie и csrf_token
matchCookie = Regex.Match(resultGet, "(?<=Set-Cookie: ).*?(?=;)");
matchCsrf_token = Regex.Match(resultGet, "(?<=\"csrf_token\" content=\").*?(?=\")");
if (!matchCookie.Success || !matchCsrf_token.Success)
    return null;
cookies = matchCookie.Value;
csrf_token = matchCsrf_token.Value;

// POST Подключение
resultPost = ZennoPoster.HttpPost(
    "http://" + host + "/api/dialup/mobile-dataswitch",
    "<?xml version=\"1.0\" encoding=\"UTF-8\"?><request><dataswitch>1</dataswitch></request>",
    "application/x-www-form-urlencoded",
    protocol + proxy,
    "UTF-8",
    ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.BodyOnly,
    30000,
    cookies,
    userAgent,
    true,
    5,
    AdditionalHeaders: new[] {
        "Host: " + host,
        "Accept: */*",
        "Accept-Language: ru-RU",
        "Accept-Encoding: gzip, deflate",
        "DNT: 1",
        "Content-Type: application/x-www-form-urlencoded; charset=UTF-8",
        "__RequestVerificationToken: " + csrf_token,
        "X-Requested-With: XMLHttpRequest",
        "Connection: keep-alive",
        "Referer: http://" + host + "/html/mobileconnection.html"
    }
);

// Рандомная пауза
Random rnd = new Random();
Thread.Sleep(rnd.Next(7, 11) * 1000);

Как перепрошить свой 3G/4G модем в HiLink читайте на форуме 4pda.ru
Привет. Большое спасибо. Всё сразу заработало. как надо. Тут узнал что смена ip адреса возможна и в режиме 4G (LTE) . но там нужно менять net mod , т. е. режим модема с LTE на Авто и обратно. Тогда ip меняется в 4g режиме. Сможешь подсказать как доллен выглядеть код API в таком случае?
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 099
Баллы
113
Привет. Большое спасибо. Всё сразу заработало. как надо. Тут узнал что смена ip адреса возможна и в режиме 4G (LTE) . но там нужно менять net mod , т. е. режим модема с LTE на Авто и обратно. Тогда ip меняется в 4g режиме. Сможешь подсказать как доллен выглядеть код API в таком случае?
Привет!
Извините, но к сожалению, не могу подсказать, т.к. давненько не пользовался этими модемами - симки просрочились, а новые делать пока нет нужды.
По сути, там всего один-два запроса нужно отснифать. Может кто-нибудь другой заморочится и потратит 10 минут времени на это дело, если не сложно.
 

Bober

Пользователь
Регистрация
17.01.2016
Сообщения
34
Благодарностей
20
Баллы
8
Привет!
Извините, но к сожалению, не могу подсказать, т.к. давненько не пользовался этими модемами - симки просрочились, а новые делать пока нет нужды.
По сути, там всего один-два запроса нужно отснифать. Может кто-нибудь другой заморочится и потратит 10 минут времени на это дело, если не сложно.
Спасибо за быстрый ответ. Есть вот кусок кода. может он как то поможет.

Если нет то и на этом благодарю
 

Bober

Пользователь
Регистрация
17.01.2016
Сообщения
34
Благодарностей
20
Баллы
8
Привет!
Извините, но к сожалению, не могу подсказать, т.к. давненько не пользовался этими модемами - симки просрочились, а новые делать пока нет нужды.
По сути, там всего один-два запроса нужно отснифать. Может кто-нибудь другой заморочится и потратит 10 минут времени на это дело, если не сложно.
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 099
Баллы
113

Bober

Пользователь
Регистрация
17.01.2016
Сообщения
34
Благодарностей
20
Баллы
8

CmauJluk

Client
Регистрация
25.12.2017
Сообщения
287
Благодарностей
60
Баллы
28
Не кто не подскажет каким образом сделать именно выкл и вкл 4G модема. Обычный разрыв соединения не помогает менять ip
 
Последнее редактирование:

marsel80

Client
Регистрация
09.04.2015
Сообщения
304
Благодарностей
26
Баллы
28
Смена IP адреса (Переподключение сети) для 3G/4G модемов с прошивкой HiLink и Модифицированным веб-интерфейсом на основе WebUI.

Без перезагрузки модема!
Смена IP происходит за 10 сек.

Внимание! В настройках сети предпочтительный режим должен быть выбран UMTS или GSM, т.к. в сети 4G (LTE) данный способ смены IP не работает.

Посмотреть вложение 17994 Посмотреть вложение 17995

C#:
// Сообщение в лог
project.SendWarningToLog("", "Переподключение сети!", true);

string protocol = project.Variables["Protocol"].Value; // http:// или socks5://
string proxy = project.Variables["Proxy"].Value;
string userAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0";
string host = project.Variables["Host"].Value; // например, 192.168.1.1

// GET запрос
var resultGet = ZennoPoster.HttpGet(
    "http://" + host + "/html/mobileconnection.html",
    protocol + proxy,
    "UTF-8",
    ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.HeaderAndBody,
    30000,
    string.Empty,
    userAgent,
    true,
    5,
    AdditionalHeaders: new[] {
        "Host: " + host,
        "Accept: */*",
        "Accept-Language: ru-RU",
        "Connection: keep-alive",
        "Referer: http://" + host + "/html/home.html"
    }
);

// Парсим Set-Cookie и csrf_token
Match matchCookie = Regex.Match(resultGet, "(?<=Set-Cookie: ).*?(?=;)");
Match matchCsrf_token = Regex.Match(resultGet, "(?<=\"csrf_token\" content=\").*?(?=\")");
if (!matchCookie.Success || !matchCsrf_token.Success)
    return null;
string cookies = matchCookie.Value;
string csrf_token = matchCsrf_token.Value;

// POST Отключение
var resultPost = ZennoPoster.HttpPost(
    "http://" + host + "/api/dialup/mobile-dataswitch",
    "<?xml version=\"1.0\" encoding=\"UTF-8\"?><request><dataswitch>0</dataswitch></request>",
    "application/x-www-form-urlencoded",
    protocol + proxy,
    "UTF-8",
    ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.BodyOnly,
    30000,
    cookies,
    userAgent,
    true,
    5,
    AdditionalHeaders: new[] {
        "Host: " + host,
        "Accept: */*",
        "Accept-Language: ru-RU",
        "Accept-Encoding: gzip, deflate",
        "DNT: 1",
        "Content-Type: application/x-www-form-urlencoded; charset=UTF-8",
        "__RequestVerificationToken: " + csrf_token,
        "X-Requested-With: XMLHttpRequest",
        "Connection: keep-alive",
        "Referer: http://" + host + "/html/mobileconnection.html"
    }
);

// Пауза
Thread.Sleep(2 * 1000);

// GET запрос 2
resultGet = ZennoPoster.HttpGet(
    "http://" + host + "/html/mobileconnection.html",
    protocol + proxy,
    "UTF-8",
    ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.HeaderAndBody,
    30000,
    string.Empty,
    userAgent,
    true,
    5,
    AdditionalHeaders: new[] {
        "Host: " + host,
        "Accept: */*",
        "Accept-Language: ru-RU",
        "Connection: keep-alive",
        "Referer: http://" + host + "/html/home.html"
    }
);

// Парсим Set-Cookie и csrf_token
matchCookie = Regex.Match(resultGet, "(?<=Set-Cookie: ).*?(?=;)");
matchCsrf_token = Regex.Match(resultGet, "(?<=\"csrf_token\" content=\").*?(?=\")");
if (!matchCookie.Success || !matchCsrf_token.Success)
    return null;
cookies = matchCookie.Value;
csrf_token = matchCsrf_token.Value;

// POST Подключение
resultPost = ZennoPoster.HttpPost(
    "http://" + host + "/api/dialup/mobile-dataswitch",
    "<?xml version=\"1.0\" encoding=\"UTF-8\"?><request><dataswitch>1</dataswitch></request>",
    "application/x-www-form-urlencoded",
    protocol + proxy,
    "UTF-8",
    ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.BodyOnly,
    30000,
    cookies,
    userAgent,
    true,
    5,
    AdditionalHeaders: new[] {
        "Host: " + host,
        "Accept: */*",
        "Accept-Language: ru-RU",
        "Accept-Encoding: gzip, deflate",
        "DNT: 1",
        "Content-Type: application/x-www-form-urlencoded; charset=UTF-8",
        "__RequestVerificationToken: " + csrf_token,
        "X-Requested-With: XMLHttpRequest",
        "Connection: keep-alive",
        "Referer: http://" + host + "/html/mobileconnection.html"
    }
);

// Рандомная пауза
Random rnd = new Random();
Thread.Sleep(rnd.Next(7, 11) * 1000);

Как перепрошить свой 3G/4G модем в HiLink читайте на форуме 4pda.ru

Здравствуйте, помогите плиз. У меня тоже хуавей но ваш код не помогает чет. Что там нужно менять? Может я не то подставляю там.
 

Bober

Пользователь
Регистрация
17.01.2016
Сообщения
34
Благодарностей
20
Баллы
8
Здравствуйте, помогите плиз. У меня тоже хуавей но ваш код не помогает чет. Что там нужно менять? Может я не то подставляю там.
для начала скажите какая у вас версия веб интерфейса и вообще есть ли он у вас ?
У меня заработало сразу всё как по маслу . указал переменный свои а именно одну переменную- это прокси от модема. Если же вы хотите рекконектить просто свой модем -который является у вас основным подключением то вам следует в коде как то отредактировать и убрать использование прокси. Думаю автор поста, сможет точно сказать что нужно отредактировать в коде или сами попробуйте поиграться с кодом.
 
  • Спасибо
Реакции: Dimionix

Bober

Пользователь
Регистрация
17.01.2016
Сообщения
34
Благодарностей
20
Баллы
8
Не кто не подскажет каким образом сделать именно выкл и вкл 4G модема. Обычный разрыв соединения не помогает менять ip
смена ip адреса при разрыве соединения , работает только в режиме сигнала 3g. смена же адреса в режиме LTE можно добиться путём полной перезагрузки модема или смена режимов сети
Автоматизировать смену режимов можно также шаблоном зенки через веб интерфейс модема. Так же думаю возможно на виндовс управлять питанием usb
 

Bober

Пользователь
Регистрация
17.01.2016
Сообщения
34
Благодарностей
20
Баллы
8
Не кто не подскажет каким образом сделать именно выкл и вкл 4G модема. Обычный разрыв соединения не помогает менять ip
Привет всем. Решил проблему перезагрузки модема huawei e3372 в режиме 4G, как в ОС linux, так и на Windows.
В Linux использую bash скрипт
В Windows использую зеннопостер (кубик на C#)
Кому интересно - могу помочь в этом !
 
  • Спасибо
Реакции: xabbax и bizzon

CmauJluk

Client
Регистрация
25.12.2017
Сообщения
287
Благодарностей
60
Баллы
28
Привет всем. Решил проблему перезагрузки модема huawei e3372 в режиме 4G, как в ОС linux, так и на Windows.
В Linux использую bash скрипт
В Windows использую зеннопостер (кубик на C#)
Кому интересно - могу помочь в этом !
Поделись подробностями, думаю всем будет интерестно
 
  • Спасибо
Реакции: Koqpe

hepner

Client
Регистрация
09.04.2011
Сообщения
154
Благодарностей
10
Баллы
18
В связи с многочисленными просьбами в ЛС решил выложить простое решение управления 3G модемом, а так же можно VPN Управлять и впрочем любыми соединениями так то, распаковываешь батники из архива в батниках имя меняешь на то которое в адапторах на соединении которое надо включать и отключать оно должно быть на латинском обязательно если на русском то поменять на латинское, а в кубиках прописать пути к батникам соответствующим и всё, простое решение средствами ЗП.
Приветствую! Это не то чтобы управление 3G, это управление любой сетью которая присутствует на компьютере. От проводного интернета до 4G и т.д.
Вот только что бы сменить ip адрес 3G в самом ноутбуке или планшете на Windows должен быть слот под сим-карту т.е. использование сотовой связи в самом устройстве, тогда переподключение будет меня ip и имеет смысл быть! Но что касается если подключается телефон или планшет или устройство которое раздаёт интернет путём подключения через USB, Wi-Fi, Bluetooth то тут просто будет выключаться адаптер без смены ip т.к. чтобы он сменился нужно чтобы переподкючение произошло на устройстве которое раздаёт интернет! Поэтому громкий заголовок переподключение сети 3G бесполезен, просто переподключение или включение и отключение адаптера сети так было бы правильнее! Но опять же повторюсь если в устройстве есть поддержка 3G, 4G напрямую то это актуально в остальных случаях это просто переподключение любого адаптера сети!
 

slavon

Client
Регистрация
24.06.2016
Сообщения
594
Благодарностей
127
Баллы
43
Смена IP адреса (Переподключение сети) для 3G/4G модемов с прошивкой HiLink и Модифицированным веб-интерфейсом на основе WebUI.

Без перезагрузки модема!
Смена IP происходит за 10 сек.

Внимание! В настройках сети предпочтительный режим должен быть выбран UMTS или GSM, т.к. в сети 4G (LTE) данный способ смены IP не работает.

Посмотреть вложение 17994 Посмотреть вложение 17995

C#:
// Сообщение в лог
project.SendWarningToLog("", "Переподключение сети!", true);

string protocol = project.Variables["Protocol"].Value; // http:// или socks5://
string proxy = project.Variables["Proxy"].Value;
string userAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0";
string host = project.Variables["Host"].Value; // например, 192.168.1.1

// GET запрос
var resultGet = ZennoPoster.HttpGet(
    "http://" + host + "/html/mobileconnection.html",
    protocol + proxy,
    "UTF-8",
    ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.HeaderAndBody,
    30000,
    string.Empty,
    userAgent,
    true,
    5,
    AdditionalHeaders: new[] {
        "Host: " + host,
        "Accept: */*",
        "Accept-Language: ru-RU",
        "Connection: keep-alive",
        "Referer: http://" + host + "/html/home.html"
    }
);

// Парсим Set-Cookie и csrf_token
Match matchCookie = Regex.Match(resultGet, "(?<=Set-Cookie: ).*?(?=;)");
Match matchCsrf_token = Regex.Match(resultGet, "(?<=\"csrf_token\" content=\").*?(?=\")");
if (!matchCookie.Success || !matchCsrf_token.Success)
    return null;
string cookies = matchCookie.Value;
string csrf_token = matchCsrf_token.Value;

// POST Отключение
var resultPost = ZennoPoster.HttpPost(
    "http://" + host + "/api/dialup/mobile-dataswitch",
    "<?xml version=\"1.0\" encoding=\"UTF-8\"?><request><dataswitch>0</dataswitch></request>",
    "application/x-www-form-urlencoded",
    protocol + proxy,
    "UTF-8",
    ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.BodyOnly,
    30000,
    cookies,
    userAgent,
    true,
    5,
    AdditionalHeaders: new[] {
        "Host: " + host,
        "Accept: */*",
        "Accept-Language: ru-RU",
        "Accept-Encoding: gzip, deflate",
        "DNT: 1",
        "Content-Type: application/x-www-form-urlencoded; charset=UTF-8",
        "__RequestVerificationToken: " + csrf_token,
        "X-Requested-With: XMLHttpRequest",
        "Connection: keep-alive",
        "Referer: http://" + host + "/html/mobileconnection.html"
    }
);

// Пауза
Thread.Sleep(2 * 1000);

// GET запрос 2
resultGet = ZennoPoster.HttpGet(
    "http://" + host + "/html/mobileconnection.html",
    protocol + proxy,
    "UTF-8",
    ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.HeaderAndBody,
    30000,
    string.Empty,
    userAgent,
    true,
    5,
    AdditionalHeaders: new[] {
        "Host: " + host,
        "Accept: */*",
        "Accept-Language: ru-RU",
        "Connection: keep-alive",
        "Referer: http://" + host + "/html/home.html"
    }
);

// Парсим Set-Cookie и csrf_token
matchCookie = Regex.Match(resultGet, "(?<=Set-Cookie: ).*?(?=;)");
matchCsrf_token = Regex.Match(resultGet, "(?<=\"csrf_token\" content=\").*?(?=\")");
if (!matchCookie.Success || !matchCsrf_token.Success)
    return null;
cookies = matchCookie.Value;
csrf_token = matchCsrf_token.Value;

// POST Подключение
resultPost = ZennoPoster.HttpPost(
    "http://" + host + "/api/dialup/mobile-dataswitch",
    "<?xml version=\"1.0\" encoding=\"UTF-8\"?><request><dataswitch>1</dataswitch></request>",
    "application/x-www-form-urlencoded",
    protocol + proxy,
    "UTF-8",
    ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.BodyOnly,
    30000,
    cookies,
    userAgent,
    true,
    5,
    AdditionalHeaders: new[] {
        "Host: " + host,
        "Accept: */*",
        "Accept-Language: ru-RU",
        "Accept-Encoding: gzip, deflate",
        "DNT: 1",
        "Content-Type: application/x-www-form-urlencoded; charset=UTF-8",
        "__RequestVerificationToken: " + csrf_token,
        "X-Requested-With: XMLHttpRequest",
        "Connection: keep-alive",
        "Referer: http://" + host + "/html/mobileconnection.html"
    }
);

// Рандомная пауза
Random rnd = new Random();
Thread.Sleep(rnd.Next(7, 11) * 1000);

Как перепрошить свой 3G/4G модем в HiLink читайте на форуме 4pda.ru
стоит на виртуалке зенка,к виртуалке подключен модем.папробывал ваш код и сразу выскочила ошибка.
 

lybimiy86

Client
Регистрация
29.10.2016
Сообщения
97
Благодарностей
187
Баллы
33
Доработанная версия скрипта от Dimionix
Т.к. Hilink имеет свой api, но он не обычный, требует id сессии и куки при любом запросе, переделал скрипт под api, почистив от мусора.
Работает смена ip с 4G.
Алгоритм следующий:
Отключаем передачу данных => Переключаем сеть на UMTS => Переключаем сеть на LTE-UMTS => Подключаемся к сети
API по Hilink
PHP:
// Сообщение в лог
project.SendWarningToLog("", "Переподключение сети!", true);
string protocol = project.Variables["Protocol"].Value; // http:// или socks5://
string proxy = project.Variables["Proxy"].Value;
string userAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0";
string host = project.Variables["proxy_host"].Value; // например, 192.168.1.1
// GET Получаем токен
var resultGet = ZennoPoster.HttpGet(
    "http://" + host + "/api/webserver/SesTokInfo",
    proxy,
    "UTF-8",
    ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.HeaderAndBody,
    30000,
    string.Empty,
    userAgent,
    true,
    5
);
// Парсим Set-Cookie и csrf_token
Match matchCookie = Regex.Match(resultGet, "(?<=<SesInfo>).*(?=</SesInfo>)");
Match matchCsrf_token = Regex.Match(resultGet, "(?<=<TokInfo>).*(?=</TokInfo>)");
if (!matchCookie.Success || !matchCsrf_token.Success)
    return null;
string cookies = matchCookie.Value;
string csrf_token = matchCsrf_token.Value;

// POST Отключаем передачу данных
var resultPost = ZennoPoster.HttpPost(
    "http://" + host + "/api/dialup/mobile-dataswitch",
    "<request><dataswitch>0</dataswitch></request>",
    "",
    proxy,
    "UTF-8",
    ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.BodyOnly,
    30000,
    cookies,
    userAgent,
    true,
    5,
    AdditionalHeaders: new[] {
        "__RequestVerificationToken: " + csrf_token,
    }
);

Thread.Sleep(3 * 1000);

// GET Получаем токен
resultGet = ZennoPoster.HttpGet(
    "http://" + host + "/api/webserver/SesTokInfo",
    proxy,
    "UTF-8",
    ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.HeaderAndBody,
    30000,
    string.Empty,
    userAgent,
    true,
    5
);
// Парсим Set-Cookie и csrf_token
matchCookie = Regex.Match(resultGet, "(?<=<SesInfo>).*(?=</SesInfo>)");
matchCsrf_token = Regex.Match(resultGet, "(?<=<TokInfo>).*(?=</TokInfo>)");
if (!matchCookie.Success || !matchCsrf_token.Success)
    return null;
cookies = matchCookie.Value;
csrf_token = matchCsrf_token.Value;

// POST Переключение на 3g
resultPost = ZennoPoster.HttpPost(
    "http://" + host + "/api/net/net-mode",
    "<request><NetworkMode>02</NetworkMode><NetworkBand>3FFFFFFF</NetworkBand><LTEBand>800C5</LTEBand></request>",
    "",
    proxy,
    "UTF-8",
    ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.BodyOnly,
    30000,
    cookies,
    userAgent,
    true,
    5,
    AdditionalHeaders: new[] {
        "__RequestVerificationToken: " + csrf_token,
    }
);

Thread.Sleep(3 * 1000);

// GET Получаем токен
resultGet = ZennoPoster.HttpGet(
    "http://" + host + "/api/webserver/SesTokInfo",
    proxy,
    "UTF-8",
    ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.HeaderAndBody,
    30000,
    string.Empty,
    userAgent,
    true,
    5
);
// Парсим Set-Cookie и csrf_token
matchCookie = Regex.Match(resultGet, "(?<=<SesInfo>).*(?=</SesInfo>)");
matchCsrf_token = Regex.Match(resultGet, "(?<=<TokInfo>).*(?=</TokInfo>)");
if (!matchCookie.Success || !matchCsrf_token.Success)
    return null;
cookies = matchCookie.Value;
csrf_token = matchCsrf_token.Value;

// POST Переключение на 4g-3g lte-UMTS
resultPost = ZennoPoster.HttpPost(
    "http://" + host + "/api/net/net-mode",
    "<request><NetworkMode>0302</NetworkMode><NetworkBand>3FFFFFFF</NetworkBand><LTEBand>800C5</LTEBand></request>",
    "",
    proxy,
    "UTF-8",
    ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.BodyOnly,
    30000,
    cookies,
    userAgent,
    true,
    5,
    AdditionalHeaders: new[] {
        "__RequestVerificationToken: " + csrf_token,
    }
);
Thread.Sleep(3 * 1000);

// GET Получаем токен
resultGet = ZennoPoster.HttpGet(
    "http://" + host + "/api/webserver/SesTokInfo",
    proxy,
    "UTF-8",
    ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.HeaderAndBody,
    30000,
    string.Empty,
    userAgent,
    true,
    5
);
// Парсим Set-Cookie и csrf_token
matchCookie = Regex.Match(resultGet, "(?<=<SesInfo>).*(?=</SesInfo>)");
matchCsrf_token = Regex.Match(resultGet, "(?<=<TokInfo>).*(?=</TokInfo>)");
if (!matchCookie.Success || !matchCsrf_token.Success)
    return null;
cookies = matchCookie.Value;
csrf_token = matchCsrf_token.Value;

// POST Включаем передачу данных
resultPost = ZennoPoster.HttpPost(
    "http://" + host + "/api/dialup/mobile-dataswitch",
    "<request><dataswitch>1</dataswitch></request>",
    "",
    proxy,
    "UTF-8",
    ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.BodyOnly,
    30000,
    cookies,
    userAgent,
    true,
    5,
    AdditionalHeaders: new[] {
        "__RequestVerificationToken: " + csrf_token,
    }
);

Также можно добавить модуль, который проверяет соединение с интернетом через тот же api. Если соединение не установлено в течении указанного времени,то выходит по красной ветке.

PHP:
int x1 = 40;// Количество циклов ожидания подключения модема к сети. Пауза между циклами 3сек,чтоб не напрягать модем. По умолчанию 40 - это 120сек (2минуты)
while (x1 > 0){
    // GET Получаем токен
    var resultGet1 = ZennoPoster.HttpGet(
        "http://" + host + "/api/webserver/SesTokInfo",
        proxy,
        "UTF-8",
        ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.HeaderAndBody,
        30000,
        string.Empty,
        userAgent,
        true,
        5
    );
    // Парсим Set-Cookie и csrf_token
    Match matchCookie1 = Regex.Match(resultGet, "(?<=<SesInfo>).*(?=</SesInfo>)");
    Match matchCsrf_token1 = Regex.Match(resultGet, "(?<=<TokInfo>).*(?=</TokInfo>)");
    if (!matchCookie1.Success || !matchCsrf_token1.Success)
        return null;
    string cookies1 = matchCookie1.Value;
    string csrf_token1 = matchCsrf_token1.Value;
    // GET Получаем статус соединения
    resultGet1 = ZennoPoster.HttpGet(
        "http://" + host + "/api/monitoring/status",
        proxy,
        "UTF-8",
        ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.HeaderAndBody,
        30000,
        cookies1,
        userAgent,
        true,
        5,
        AdditionalHeaders: new[] {
            "__RequestVerificationToken: " + csrf_token1,
        }
    );
    Match matchConnectionStatus = Regex.Match(resultGet1, "(?<=<ConnectionStatus>).*(?=</ConnectionStatus>)");
    string ConnectionStatus = matchConnectionStatus.Value;
    if (ConnectionStatus == "901"){
        project.SendInfoToLog("Соединение установлено!", true);
        break;
    }
    System.Threading.Thread.Sleep(3000);
    x1--;
}
if (x1 == 0){
    project.SendErrorToLog("Соединение не установлено!", true);
    return null;
}
 
Последнее редактирование:

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)