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

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

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

Внимание! В настройках сети предпочтительный режим должен быть выбран UMTS или GSM, т.к. в сети 4G (LTE) данный способ смены IP не работает.
Здравствуйте, у меня 3g модем huawei беспроводной(можно и по проводу юзать).
Как пользоваться вашим кодом?
Что-то менять нужно?
 
В общем если автор темы не против, то законспектирую в его теме то как мне удалось победить (ребутнуть) модем от МегаФона 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]
Гуру посмеются :-)
Новички поблагодарят
 

Вложения

  • upload_2017-7-12_23-14-31.png
    upload_2017-7-12_23-14-31.png
    8,4 KB · Просмотры: 81
  • Спасибо
Реакции: 2Mechanic и spbalexpiter
Совершенно верно,так и делаю
может авто подключение модема не включено? надо просто наглядно это видеть, много чего может мешать подключению, даже защитник и фаервол может палки в колеса пихать
 
  • Спасибо
Реакции: leha52rus
Бат файл для переподключения 3G модэма.если провайдер другой - меняйте MTS3G

ping -n 3 127.0.0.1 > nul
rasdial "MTS3G" /callback:*99#
 
В общем если автор темы не против, то законспектирую в его теме то как мне удалось победить (ребутнуть) модем от МегаФона E 352b
Дело было так.
У меня такой же модем, не могу его побороть. После втыкания запускается установка проги Huawei Modem 3.5. Ее вообще надо ставить? Если ее поставить то соединение работает, но в списке соединений почему-то значится как нерабочее:
huawei.jpg
Вероятно из-за этого FreeProxy не показывает его в списке и не дает выбрать.
Как правильно создать свое соединение? Прогу сносить надо?

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

Сайт лочит IP после 3-х использований.
При однопотоке несложно нужное реализовать, а как сделать так что бы 3 потока отрабатывали по одному разу, а после этого смена IP на модеме?
 
DmKa, можно использовать глобальную переменную или запись чего-то в файл с последующей проверкой, вариантов масса...
 
"массы" не вижу - ну проверил "поток 1" что IP есть в списке и остановился. Дальше то что? Как определить что все потоки остановились и можно запускать смену IP ?

Хотя....... можно при остановки Потока писать строку в файл.
Но тогда надо ставить отдельный поток на постоянный монироринг этого файла
 
DEL
 
Последнее редактирование:
В конце проекта делаешь проверку счетчика в файле, добавляешь к значению +1, типа restart=[1].
Далее набрал 3, если нужно вешаешь потоки на небольшую паузу, обнуляешь счетчик и перезагружаешь модем, все в одном шаблоне. Тоже самое можно через глобальные переменные сделать, это самые простые варианты.
 
Не усложняйте. В настройках выполнения шаблона ставите количество потоков 3 и количество выполнений тоже 3.

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

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

Как поставить проверку количество работающих потоков определенного шаблона?
 
Как поставить проверку количество работающих потоков определенного шаблона?
Поищите на форуме решение C# или попробуйте снипет который возвращает статус шаблона, работает или нет:
http://zennolab.com/discussion/threads/uznat-kolichestvo-zapuschennyx-potokov.25120/#post-175171
 
Смена 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 в таком случае?
 
Привет. Большое спасибо. Всё сразу заработало. как надо. Тут узнал что смена ip адреса возможна и в режиме 4G (LTE) . но там нужно менять net mod , т. е. режим модема с LTE на Авто и обратно. Тогда ip меняется в 4g режиме. Сможешь подсказать как доллен выглядеть код API в таком случае?
Привет!
Извините, но к сожалению, не могу подсказать, т.к. давненько не пользовался этими модемами - симки просрочились, а новые делать пока нет нужды.
По сути, там всего один-два запроса нужно отснифать. Может кто-нибудь другой заморочится и потратит 10 минут времени на это дело, если не сложно.
 
Привет!
Извините, но к сожалению, не могу подсказать, т.к. давненько не пользовался этими модемами - симки просрочились, а новые делать пока нет нужды.
По сути, там всего один-два запроса нужно отснифать. Может кто-нибудь другой заморочится и потратит 10 минут времени на это дело, если не сложно.
Спасибо за быстрый ответ. Есть вот кусок кода. может он как то поможет.
i8by1c

Если нет то и на этом благодарю
 
Привет!
Извините, но к сожалению, не могу подсказать, т.к. давненько не пользовался этими модемами - симки просрочились, а новые делать пока нет нужды.
По сути, там всего один-два запроса нужно отснифать. Может кто-нибудь другой заморочится и потратит 10 минут времени на это дело, если не сложно.
VmpLYSe8SWI.jpg
 
Не кто не подскажет каким образом сделать именно выкл и вкл 4G модема. Обычный разрыв соединения не помогает менять ip
 
Последнее редактирование:
Смена 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


Здравствуйте, помогите плиз. У меня тоже хуавей но ваш код не помогает чет. Что там нужно менять? Может я не то подставляю там.
 
Здравствуйте, помогите плиз. У меня тоже хуавей но ваш код не помогает чет. Что там нужно менять? Может я не то подставляю там.
для начала скажите какая у вас версия веб интерфейса и вообще есть ли он у вас ?
У меня заработало сразу всё как по маслу . указал переменный свои а именно одну переменную- это прокси от модема. Если же вы хотите рекконектить просто свой модем -который является у вас основным подключением то вам следует в коде как то отредактировать и убрать использование прокси. Думаю автор поста, сможет точно сказать что нужно отредактировать в коде или сами попробуйте поиграться с кодом.
 
  • Спасибо
Реакции: Dimionix
Не кто не подскажет каким образом сделать именно выкл и вкл 4G модема. Обычный разрыв соединения не помогает менять ip
смена ip адреса при разрыве соединения , работает только в режиме сигнала 3g. смена же адреса в режиме LTE можно добиться путём полной перезагрузки модема или смена режимов сети
Автоматизировать смену режимов можно также шаблоном зенки через веб интерфейс модема. Так же думаю возможно на виндовс управлять питанием usb
 
Не кто не подскажет каким образом сделать именно выкл и вкл 4G модема. Обычный разрыв соединения не помогает менять ip
Привет всем. Решил проблему перезагрузки модема huawei e3372 в режиме 4G, как в ОС linux, так и на Windows.
В Linux использую bash скрипт
В Windows использую зеннопостер (кубик на C#)
Кому интересно - могу помочь в этом !
 
  • Спасибо
Реакции: xabbax и bizzon
Привет всем. Решил проблему перезагрузки модема huawei e3372 в режиме 4G, как в ОС linux, так и на Windows.
В Linux использую bash скрипт
В Windows использую зеннопостер (кубик на C#)
Кому интересно - могу помочь в этом !
Поделись подробностями, думаю всем будет интерестно
 
  • Спасибо
Реакции: Koqpe
В связи с многочисленными просьбами в ЛС решил выложить простое решение управления 3G модемом, а так же можно VPN Управлять и впрочем любыми соединениями так то, распаковываешь батники из архива в батниках имя меняешь на то которое в адапторах на соединении которое надо включать и отключать оно должно быть на латинском обязательно если на русском то поменять на латинское, а в кубиках прописать пути к батникам соответствующим и всё, простое решение средствами ЗП.
Приветствую! Это не то чтобы управление 3G, это управление любой сетью которая присутствует на компьютере. От проводного интернета до 4G и т.д.
Вот только что бы сменить ip адрес 3G в самом ноутбуке или планшете на Windows должен быть слот под сим-карту т.е. использование сотовой связи в самом устройстве, тогда переподключение будет меня ip и имеет смысл быть! Но что касается если подключается телефон или планшет или устройство которое раздаёт интернет путём подключения через USB, Wi-Fi, Bluetooth то тут просто будет выключаться адаптер без смены ip т.к. чтобы он сменился нужно чтобы переподкючение произошло на устройстве которое раздаёт интернет! Поэтому громкий заголовок переподключение сети 3G бесполезен, просто переподключение или включение и отключение адаптера сети так было бы правильнее! Но опять же повторюсь если в устройстве есть поддержка 3G, 4G напрямую то это актуально в остальных случаях это просто переподключение любого адаптера сети!
 
Смена 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
стоит на виртуалке зенка,к виртуалке подключен модем.папробывал ваш код и сразу выскочила ошибка.
 
Доработанная версия скрипта от 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;
}
 
Последнее редактирование:

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