|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Автоматическая подмена HOSTS |
|
|
CMD/BAT - Автоматическая подмена HOSTS
|
Пользователь Сообщения: 52 |
Всем привет, помогите написать батник.
Задача: На ПК есть подключение к RDWEB по динамическому DNS типа https://mydns.server/rdweb, где mydns.server - динднс имя забитое в роутере на стороне сервера. Сервер называется srv. Так как ip-адрес от провайдера выдается временный, то собственно нужно сопоставить адрес сервера и его имя на стороне ПК. (82.209.69.64 srv) Нужен батник, который пользователь будет запускать перед началом сессии. Батник должен пинговать mydns.server, на пинг отвечает выданный провайдером адрес 82.209.69.64, далее батник записывает в файл hosts сопоставление 82.209.69.64 srv. И пользователь подключается к сессии. Потом после изменения ip-адреса процедура повторяется и hosts переписывается. |
|
Отправлено: 19:01, 29-03-2016 |
Ушел из жизни Сообщения: 8595
|
Профиль | Сайт | Отправить PM | Цитировать Skylear, а без этих ухищрений, просто по доменному имени, нельзя? Ведь это сопоставление и так уже сделано, с помощью Dyndns.
|
------- Отправлено: 23:26, 29-03-2016 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 52
|
Профиль | Отправить PM | Цитировать нет, к сожалению нельзя, потому что внутри сессии RDWEB доступ к удаленным приложениям НЕ осуществляется по доменному имени, а по NET-bios имени самого сервера. Не буду объяснять подробно как работает все это, ибо это не в тему))) Но нужно сопоставить динамический адрес с именем сервера в файле hosts, путем узнавания его из пинга dyndns-имени
|
Отправлено: 20:49, 30-03-2016 | #3 |
Ушел из жизни Сообщения: 8595
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Skylear:
Пока только алгоритм cmd-файла, приближенный к боевому: 1. IP вычленяется достаточно легко: для любой языковой версии операционки команда создаёт во временном каталоге пользователя файл IP_line.txt с единственной строкой, где нужный IP (в примере — Яндекса) заключён в квадратные скобки. 2. Вычленяем из скобок этот IP и создаём файл (например, %TEMP%\srv_IP.txt) со строкой Файл %TEMP%\IP_line.txt оставлем для последующих проверок на тему "не изменился ли IP". 3. Проверяем файл hosts на наличие строки с окончанием "<пробел> srv" и при её наличии удаляем эту строку. Проверяем, что последняя строка файла hosts пустая (как это должно быть; она может быть непустой в случае если, например, файл правили руками и не нажали Enter после ввода последней строки); если нет — создаём в конце пустую строку (нужно для следующего шага). Сохраняем файл (при этом нужны права Администратора). 4. Дописываем (опять же с правами администратора) файл srv_IP.txt к файлу hosts: copy /b %windir%\System32\drivers\etc\hosts+%TEMP%\srv_IP.txt %windir%\System32\drivers\etc\hosts 5. На всякий случай очищаем кэш DNS: и начинаем работать. Итого — шаги 1, 4 и 5 уже готовы в кодах практически полностью, осталось детализировать шаги 2 и 3. Но тут надо покумекать (хотя для тех, кто часто работает с батниками, это труда не составило бы). |
|
------- Отправлено: 02:06, 31-03-2016 | #4 |
Ветеран Сообщения: 547
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Skylear:
|
||
------- Отправлено: 11:23, 01-04-2016 | #5 |
Ушел из жизни Сообщения: 8595
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Опиум:
Skylear, Вариант батника без проверки на наличие уже имеющейся строки сопоставления IP и имени сервера. Скрытый текст
@echo off Setlocal EnableDelayedExpansion REM Задаём имя сервера (впишите своё) и его Netbios имя: Set Server_name=yandex.ru Set Netbios_name=srv REM Определяем промежуточные файлы Set Src=%TEMP%\IP_line.txt Set Dest=%TEMP%\srv_IP.txt if exist "%Dest%" del /f "%Dest%" REM Пингуем сервер по имени и записываем строку с [IP] в %Src% ping %Server_name% | find "[" > %Src% REM Если сервер не найден (пинг не проходит) — разбирайтесь, что делать; здесь стоит заглушка: if errorlevel 1 echo Server not found! & Pause & Goto :eof REM Извлечение IP REM Разбираем только часть строки, не включающую символы начиная с закрывающей квадратной скобки после IP: for /f "UseBackQ Delims=]" %%A in ("%Src%") do ( Set /A n=-1 Set /A Lenght=-1 Call :TrimBeg "%%~A" ) REM Удаление строки с srv из lmhosts при её наличии — не написано: REM Если записей должна быть не одна, а остальные фиксированы, то проще иметь в той же папке шаблон файла без этой строки, с именем, например, lmhosts.0. REM Если запись должна быть единственная — можно в качестве шаблона использовать имеющийся в папке шаблон lmhosts.sam REM Дописываем lmhosts.0 и сохраняем как lmhosts copy /b %windir%\System32\drivers\etc\lmhosts.0+%Dest% %windir%\System32\drivers\etc\lmhosts REM удаляем второй промежуточный файд if exist "%Dest%" del /f "%Dest%" REM Чистим кэш DNS ipconfig /flushdns REM Завершаем работу файла Goto :eof REM Поиск IP в промежуточном файле :TrimBeg %1-String.Line Set /A n+=1 Set /A Lenght+=1 Set "L=%~1" Set "L=!L:~%n%,1!" REM Когда добрались до открывающей квадратной скобки - начинаем считать оставшуюся длину, т.е. длину записи IP if "%L%"=="[" (set /A Lenght=-1) REM Если очередного символа уже нет, записываем извлечённый IP, т.е. последние %Lenght% символов разбиравшейся части if not defined L (Call :WriteIP %1& Exit /B) Goto :TrimBeg "%~1" :WriteIP REM Создание файла %Dest% для последующего дописывания в lmosts Set "IP=%~1" Set "IP=!IP:~-%Lenght%!" echo %IP% %Netbios_name%>%Dest% Exit /B Напомню, что для возможности записи в каталог %windir% и его подкаталоги командный файл надо запускать с правами администратора. |
|
------- Последний раз редактировалось mwz, 02-04-2016 в 10:13. Причина: Уточнение по обработке файла lmhosts Отправлено: 00:39, 02-04-2016 | #6 |
Пользователь Сообщения: 52
|
Профиль | Отправить PM | Цитировать попробую данный скрипт, я так понял он не стирает имеющиеся записи сопоставления в файле...? и в принципе так даже не плохо, так как динамический адрес выдается провайдером из пула (хз может 100 адресов), и со временем уже можно будет не запускать батник.
попробую, отпишусь. |
Отправлено: 22:49, 03-04-2016 | #7 |
Ушел из жизни Сообщения: 8595
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Skylear:
|
|
------- Отправлено: 00:01, 04-04-2016 | #8 |
Ветеран Сообщения: 547
|
Профиль | Сайт | Отправить PM | Цитировать Цитата mwz:
ну и не забываем |
|
------- Отправлено: 10:50, 04-04-2016 | #9 |
Пользователь Сообщения: 52
|
Профиль | Отправить PM | Цитировать по данному скрипту, нормально пингует, узнает адрес и записывает в файл в папке темп, но в нем отображаются кракозябры, за исключением латиницы и цифр.... и hosts не записывается? пробовал разные кодировки батника
|
Отправлено: 19:36, 06-04-2016 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Подмена hosts | yarosl | Лечение систем от вредоносных программ | 7 | 05-03-2013 10:37 | |
Периодическая блокировка сайтов соц. сетей (подмена hosts) | xXx34rus | Лечение систем от вредоносных программ | 5 | 03-03-2013 20:28 | |
Разное - Подмена IP | Solker | Microsoft Windows 2000/XP | 0 | 06-05-2009 21:21 | |
Подмена файла "hosts" для запрета "Одноклассников" | D_Master | Хочу все знать | 10 | 17-10-2008 15:40 | |
Подмена символа | lehha | Программирование и базы данных | 1 | 09-03-2006 08:23 |
|