Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Автоматическая подмена HOSTS

Ответить
Настройки темы
CMD/BAT - Автоматическая подмена HOSTS

Пользователь


Сообщения: 52
Благодарности: 1

Профиль | Отправить PM | Цитировать


Всем привет, помогите написать батник.
Задача:

На ПК есть подключение к 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

 
mwz mwz вне форума

Аватара для mwz

Ушел из жизни


Сообщения: 8595
Благодарности: 2127

Профиль | Сайт | Отправить PM | Цитировать


Skylear, а без этих ухищрений, просто по доменному имени, нельзя? Ведь это сопоставление и так уже сделано, с помощью Dyndns.

-------
Mikhail Zhilin


Отправлено: 23:26, 29-03-2016 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Пользователь


Сообщения: 52
Благодарности: 1

Профиль | Отправить PM | Цитировать


нет, к сожалению нельзя, потому что внутри сессии RDWEB доступ к удаленным приложениям НЕ осуществляется по доменному имени, а по NET-bios имени самого сервера. Не буду объяснять подробно как работает все это, ибо это не в тему))) Но нужно сопоставить динамический адрес с именем сервера в файле hosts, путем узнавания его из пинга dyndns-имени

Отправлено: 20:49, 30-03-2016 | #3

mwz mwz вне форума

Аватара для mwz

Ушел из жизни


Сообщения: 8595
Благодарности: 2127

Профиль | Сайт | Отправить PM | Цитировать


Цитата Skylear:
потому что внутри сессии »
У меня было такое смутное предположение — и на всякий случай уточнил.

Пока только алгоритм cmd-файла, приближенный к боевому:

1. IP вычленяется достаточно легко: для любой языковой версии операционки команда
Код: Выделить весь код
ping yandex.ru | find "[" > %TEMP%\IP_line.txt
создаёт во временном каталоге пользователя файл IP_line.txt с единственной строкой, где нужный IP (в примере — Яндекса) заключён в квадратные скобки.

2. Вычленяем из скобок этот IP и создаём файл (например, %TEMP%\srv_IP.txt) со строкой
Код: Выделить весь код
<Вычлененный адрес> srv
Файл %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
4.1 По правилам хорошего тона (операция необязательная) стандартно удаляем файл %TEMP%\srv_IP.txt.

5. На всякий случай очищаем кэш DNS:
Код: Выделить весь код
ipconfig /flushdns
и начинаем работать.

Итого — шаги 1, 4 и 5 уже готовы в кодах практически полностью, осталось детализировать шаги 2 и 3.
Но тут надо покумекать (хотя для тех, кто часто работает с батниками, это труда не составило бы).

-------
Mikhail Zhilin


Отправлено: 02:06, 31-03-2016 | #4


Ветеран


Сообщения: 547
Благодарности: 36

Профиль | Сайт | Отправить PM | Цитировать


Цитата Skylear:
доступ к удаленным приложениям НЕ осуществляется по доменному имени, а по NET-bios имени самого сервера »
может тогда речь о lmhosts ?

-------
консольный клиент telegram для Windows: www.elapser.info


Отправлено: 11:23, 01-04-2016 | #5

mwz mwz вне форума

Аватара для mwz

Ушел из жизни


Сообщения: 8595
Благодарности: 2127

Профиль | Сайт | Отправить PM | Цитировать


Цитата Опиум:
может тогда речь о lmhosts ? »
Похоже что так...

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% и его подкаталоги командный файл надо запускать с правами администратора.

-------
Mikhail Zhilin


Последний раз редактировалось mwz, 02-04-2016 в 10:13. Причина: Уточнение по обработке файла lmhosts


Отправлено: 00:39, 02-04-2016 | #6


Пользователь


Сообщения: 52
Благодарности: 1

Профиль | Отправить PM | Цитировать


попробую данный скрипт, я так понял он не стирает имеющиеся записи сопоставления в файле...? и в принципе так даже не плохо, так как динамический адрес выдается провайдером из пула (хз может 100 адресов), и со временем уже можно будет не запускать батник.

попробую, отпишусь.

Отправлено: 22:49, 03-04-2016 | #7

mwz mwz вне форума

Аватара для mwz

Ушел из жизни


Сообщения: 8595
Благодарности: 2127

Профиль | Сайт | Отправить PM | Цитировать


Цитата Skylear:
я так понял он не стирает имеющиеся записи сопоставления в файле...? »
Не стирает (не разобрался, как проанализировать файл и удалить строку, оканчивающуюся на "[пробел] srv" средствами командного процессора). Почему и предложил использовать шаблон, содержащий при необходимости неизменяемую часть, и в котором запись об srv при этом отсутствует изначально.

-------
Mikhail Zhilin


Отправлено: 00:01, 04-04-2016 | #8


Ветеран


Сообщения: 547
Благодарности: 36

Профиль | Сайт | Отправить PM | Цитировать


Цитата mwz:
Похоже что так... »
в lmhost есть возможность оформления деректив импорта.
ну и не забываем
Код: Выделить весь код
nbtstat -R

-------
консольный клиент telegram для Windows: www.elapser.info

Это сообщение посчитали полезным следующие участники:

Отправлено: 10:50, 04-04-2016 | #9


Пользователь


Сообщения: 52
Благодарности: 1

Профиль | Отправить PM | Цитировать


по данному скрипту, нормально пингует, узнает адрес и записывает в файл в папке темп, но в нем отображаются кракозябры, за исключением латиницы и цифр.... и hosts не записывается? пробовал разные кодировки батника

Отправлено: 19:36, 06-04-2016 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Автоматическая подмена HOSTS

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Подмена 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




 
Переход