gifts2017

Переключение используемой сети

Опубликовал - - (Rebelx) в раздел Администрирование - Системное

Итак, имеем ноутбук, который приходится использовать в различных сетях. Причем смена сетей может быть достаточно частой (т.е. сегодня там, завтра – здесь, а вечером – дома вдруг понадобится…).
Для решения этой задачи есть, конечно, всякие разные программы, например "Mobile Net Switch" (http://www.mobilenetswitch.com/ ), ну и еще есть парочка, точно названий не помню, но мне они не понравились. Люблю, знаете ли, контроль над системой.
Как известно, нет техники неподвластной человеку, и я решил сделать по-своему.

Мы хотим, чтобы вне зависимости от сети у нас всегда работало:

• IE,
• ICQ (я пользуюсь R&Q),
• Skype,
• Антивирус обновлялся,
• Сетевые диски были доступны,
• Нужный принтер установился бы по умолчанию,
• А еще сетевые адаптеры включились / выключились как надо (например нигде кроме дома я не использую WiFi).
• Специфическая программа для проверки почты (Alt-N ComAgent) должна узнать, что изменились настройки сети, и при этом надо изменить ее настройки.

В домен я нигде не вхожу, а зачем? я сам свой ноут администрирую.

Для начала – надо выбрать интерфейсное решение. Тут я думал не долго – блокнот для настройки и MDesktop (http://infostart.ru/projects/2269/ ) для переключения сетей:

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

 

Меню строится непосредственно перед показом, на основе данных реестра. Для элемента, который указан в значении по умолчанию – выводится галочка.

По поводу интерфейса переключения – все.

 

Теперь – реализация.

 Весь функционал реализован на cmd, vbs и ahk файлах. Соответственно чтобы это все работало, необходима программа AutoHotkey. Она стоит заметить реализует у меня еще несколько задач (например, закрытие консоли ошибок в Опере, удобно модифицирует поведение клавиатуры ноута, в т.ч. под конфигуратор 1С, …).

 

Общая идеология реализации сводится к тому, что запускается единственный cmd файл с параметром, который определяет имя сети. Для этого имени существует так же каталог, в котором хранятся необходимые файлы:

Для заполнения меню и задания красивой иконки в нем используются lnk файлы – один файл на каждый пункт. В ярлыке – запуск «switch.cmd» с параметром:

 

 

Описание файлов по порядку:

cntlm.ini – файл настроек одноименной программы, локальный прокси сервер, с возможностью ntlm авторизации, т.е. там прописаны внешний прокси, имя, пароль, а прочие программы могут иметь доступ в инет используя локальный адрес:

Это пример для ICQ (R&Q), но также настроены Skype, антивирус, MailAgent, …

Стоит отметить, что при относительно большом трафике, cntlm начинает клинить, и вообще она снижает скорость доступа в инет. Т.е. это приемлемо для всяких разных программ, но при вебсерфинге – неудобно. Таким образом, IE и Опера ходят в инет не через этот прокси. Настройки для IE меняются в реестре, при переключении сети, настройки в Опере меняются в меню Оперы:

 

ComAgent.ini – файл настроек для одноименной программы, которая показывает наличие новых писем для корпоративной почты (самой почтой пользуюсь через web интерфейс). Необходимость изменения этого файла – внутри корпоративной сети адрес mail сервера используется другой, внутренний (для экономии трафика), а если извне – тогда внешний.

favicon.ico – иконка для ярлыка

IE_settings.reg – файл настроек IE. Конечно, изменение ключа в реестре не достаточно для моментального изменения настроек в текущих сессиях IE, но выполнять переключение при работающем IE я не собираюсь:

 

net_disk.cmd – командный файл для подключения сетевых дисков:

Для дисков устанавливается флаг, что запоминать подключение не требуется. При перезагрузке этот файл должен быть выполнен. Вообще при загрузке системы у меня вызывается специальный cmd файл для инициализации всякой всячины и вызвать в нем дополнительный cmd – не проблема.

printer.cmd – определяет имя принтера по умолчанию:

net_cfg.cmd – в настройках для офиса этого файла нет, т.к. он изменяет настройки сетевых адаптеров, а в офисе можно оставить все как обычно. Вообще основное назначение включения/выключения сетевых адаптеров для меня в том, чтобы убрать лишние иконки из трея – типа если адаптер включен, а сети нет. Это нужно для разных виртуальных адаптеров. Также не маловажная особенность – под ХР мой Vaio почему-то при загрузке долго инициализирует WiFi – несколько минут. При включении во время работы – включается сразу. Почему – не знаю. Поэтому, как правило, WiFi выключен. Но дома – хожу на этом буке в инет без проводов, соответственно надо включить. Для включения / выключения адаптеров используется программа cnic.exe:

Ну и шлюз по умолчанию добавляется.

 

Вообще не все файлы в этом каталоге обязательны - для некоторых проверяется наличие, и если файла нет, то либо ничего не делается, либо выполнятся файл по умолчанию, который находится в каталоге «_utils»:

Cnic.exe – программа для управления сетевыми адаптерами от MS

ComAgent.ini – настройки по умолчанию для одноименной программы

GetDefailtPrinterName.vbs – выводит на экран наименование принтера по умолчанию

Net_cfg_def.cmd – файл настроек сетевых адаптеров по умолчанию:

Net_disk.cmd – файл с настройками сетевых дисков, копируется сюда из каталога текущих настроек

Oldname.cmd – содержит имя текущей настройки. Нужен для того, чтобы можно было сохранить текущие настройки программ:

Файл создается динамически, в процессе переключения настроек.

 OnStartSystem.cmd – как следует из названия, запускается при старте системы (из автозагрузки):

Printer_def.cmd – файл выполняет переключение принтера, используемого по умолчанию. Если никакой принтер не может быть использован в этой сети – устанавливается виртуальный принтер:

Для того чтобы установить принтер по умолчанию, файл должен быть запущен с параметром (любым). Если без параметров – устанавливается только имя принтера по умолчанию - виртуальный принтер.

RegParamQuery.vbs – скрипт, позволяющий получить значение параметра реестра на экран в виде "Параметр" = "Значение". Это нужно для сохранения параметров реестра при переключении сетей.

set_IE_settings.cmd – предназначен для переключения настроек IE. При необходимости предварительно сохраняет текущую настройку в файл в каталог текущей сети:

ReRunComAgent.ahk – скрипт для перезапуска программы ComAgent. Особенностью перезапуска этой программы является то, что завершить работу ее надо корректно (через контекстное меню в трее, т.е. посылкой соответствующего сообщения нужному окну), просто процесс снять нельзя, иначе останется иконка в трее, а это не есть гуд.

Sleep.vbs – просто пауза

 

Теперь непосредственно сам файл для переключения:

 

 

@echo ----------------------------------------------------------------------------
@echo Получаем имя предыдущей настройки
@rem это нужно чтобы копировать текущие настройки программ в соответствующий каталог настроек при переключении
@set OLD_NET_SETTINGS_NAME=
@if exist "_utils\oldname.cmd" (
call _utils\oldname.cmd
@rem удалим имя старой настройки, пока новая не до конца проинициализирована
@rem иначе можем затереть не те настройки, которые надо

del _utils\oldname.cmd
)
 
@if defined OLD_NET_SETTINGS_NAME (
echo Определение наличия каталога %OLD_NET_SETTINGS_NAME%
if exist "%OLD_NET_SETTINGS_NAME%" (
echo существует
) else (
echo отсутствует
@set OLD_NET_SETTINGS_NAME=
)
) else (
echo не определена
)
 
 
@echo ----------------------------------------------------------------------------
@echo Изменение отмеченного пункта меню для MDesktop
@rem меню модифицируется путем модификации реестра
@rem а реестр меняется с помощью файлов и запуска regedit с нужными параметрами
@echo REGEDIT4 >set.reg
@echo [HKEY_CURRENT_USER\Software\Mecoptera\MDesktop\Clock\run\Lan switch] >>set.reg
@echo @="%1" >>set.reg
regedit /s set.reg
del set.reg
 
@echo ----------------------------------------------------------------------------
@echo Изменение настроек Internet Explorer
@rem ну тут все просто – запускается отдельный файл с параметром, и он все делает
call _utils\set_IE_Settings.cmd %1
 
@echo ----------------------------------------------------------------------------
@echo Изменение настроек и перезапуск ComAgent
@rem сохраняем настройку
if defined OLD_NET_SETTINGS_NAME (
if exist "%OLD_NET_SETTINGS_NAME%\ComAgent.ini" (
echo сохраняем текущую настройку
copy /y "C:\Documents and Settings\ValeriVP\Application Data\ComAgent\ComAgent.ini" "%OLD_NET_SETTINGS_NAME%\"
)
)
@rem если существует файл настроек в нужном каталоге – берем его, если нет – берем по умолчанию
if exist "%1\ComAgent.ini" (
copy /y "%1\ComAgent.ini" "C:\Documents and Settings\ValeriVP\Application Data\ComAgent\"
) else (
copy /y "_utils\ComAgent.ini" "C:\Documents and Settings\ValeriVP\Application Data\ComAgent\"
)
@rem и перезапускаем программу
_utils\ReRunComAgent.ahk
 
@echo ----------------------------------------------------------------------------
@echo Изменение настроек сетевых адаптеров
@rem если есть специфичные настройки – используем, если нет – то по умолчанию
if exist "%1\net_cfg.cmd" (
call "%1\net_cfg.cmd"
) else (
call _utils\net_cfg_def.cmd
)
 
@echo ----------------------------------------------------------------------------
@echo Изменение настроек локального прокси
@rem прокси перезапускать просто – можно просто снимать процесс
taskkill /f /im cntlm.exe
if defined OLD_NET_SETTINGS_NAME (
echo сохраняем текущую настройку
copy /y "C:\Program Files\Cntlm\cntlm.ini" "%OLD_NET_SETTINGS_NAME%\"
)
copy /y "%1\cntlm.ini" "C:\Program Files\Cntlm\"
@rem но есть особенность – процесс снимается довольно долго, надо подождать
_utils\sleep.vbs 2
"c:\Program Files\Cntlm\cntlm.exe"
 
@echo ----------------------------------------------------------------------------
@echo Подключение сетевых дисков
@rem для начала отключим все диски
net use * /delete /yes
@rem сохраним текущую настройку
if exist _utils\net_disk.cmd (
if defined OLD_NET_SETTINGS_NAME (
if exist "%OLD_NET_SETTINGS_NAME%\net_disk.cmd" (
echo сохраняем текущую настройку
copy /y _utils\net_disk.cmd "%OLD_NET_SETTINGS_NAME%\"
)
)
del _utils\net_disk.cmd
)
@rem скопируем файл подключения дисков как файл по умолчанию
if exist "%1\net_disk.cmd" (
copy /y "%1\net_disk.cmd" _utils\
@rem и подключим все что надо
call _utils\net_disk.cmd
)
 
@echo ----------------------------------------------------------------------------
@echo Установка принтера по умолчанию
@rem для начала сбросим настройку
call _utils\printer_def.cmd
@rem если для сети определен принтер – определим его имя
if exist "%1\printer.cmd" (
call "%1\printer.cmd"
)
@rem и установим принтер по умолчанию
call _utils\printer_def.cmd set
 
@echo ----------------------------------------------------------------------------
@echo Запоминаем текущую настройку
@rem сохраняем имя текущей настройки, для возможности сохранения настроек программ при переключениях
echo set OLD_NET_SETTINGS_NAME=%1> _utils\oldname.cmd
 
@echo ----------------------------------------------------------------------------
@rem подождем несколько секунд, а вдруг захочется посмотреть на экран после переключения
@echo pause 1
@_utils\sleep.vbs 1
@echo pause 2
@_utils\sleep.vbs 1
@echo pause 3
@_utils\sleep.vbs 1
@echo pause 4
@_utils\sleep.vbs 1
@echo pause 5
@_utils\sleep.vbs 1
@echo pause 6
@_utils\sleep.vbs 1
@echo pause 7
@_utils\sleep.vbs 1
@echo pause 8
@_utils\sleep.vbs 1
@echo pause 9
@_utils\sleep.vbs 1
 
 

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Пример настройки
.zip 50,58Kb
24.08.14
16
.zip 50,58Kb 16 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Алексей Коробов (WiseSnake) 23.06.09 18:04
Пользуюсь вот этим:
http://www.mobilenetswitch.com/Manual/
и все что вы сказали она вроде умеет...
2. Александр Рытов (Арчибальд) 23.06.09 18:08
(1) Да прикалывается автор...
3. - - (Rebelx) 23.06.09 18:19
(1) да, видел я эту программу, даже пробовал пользоваться. но что-то мне в ней не понравилось. например:
- она платная. а каждая украденная программа - еще один шаг к особо крупному размеру :)
- она не решает проблему программ, которые ходят в инет через прокси, который надо устанавливать в настройке проги.

(2) это демонстрация методики "не нравится готовое - сделай сам"
Арчибальд; +1 Ответить 1
4. Алексей Коробов (WiseSnake) 23.06.09 18:33
(3) Так и рождаются новые программы ;)...
Правда тут подводные камни... Если я в мобилсвиче что то могу понять и настроить, то в Вашей программе я... нахрен винду снесу )))))..
5. Александр Рытов (Арчибальд) 23.06.09 18:38
(4) Виндоуз маст дай! Юникс форева! :)))
6. - - (Rebelx) 23.06.09 23:23
(4) а по-моему такой скрипт имеет меньше шансов снести винду - все же видно
7. - - (Rebelx) 24.06.09 09:13
(1) и что еще не умеют эти проги - сохранять автоматически текущие настройки сети и программ при переключении. в данном же случае - при изменении настроек например IE его настройки при переключении в другую сеть будут сохранены, и при возвращении- восстановлены.
т.е. один раз настраивается переключалка, а потом про нее можно забыть, и настраивать программы а не переключалку
8. Алексей Плутенко (Noy) 25.06.09 10:09
Хорошая заметка! Сам делал подобное через кучку cmd, но только на смену IP/Gateway/DNS.
А тут побольше функционала будет.
+
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа