![]() |
Автоматическая подмена HOSTS
Всем привет, помогите написать батник.
Задача: На ПК есть подключение к 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 переписывается. |
Skylear, а без этих ухищрений, просто по доменному имени, нельзя? Ведь это сопоставление и так уже сделано, с помощью Dyndns.
|
нет, к сожалению нельзя, потому что внутри сессии RDWEB доступ к удаленным приложениям НЕ осуществляется по доменному имени, а по NET-bios имени самого сервера. Не буду объяснять подробно как работает все это, ибо это не в тему))) Но нужно сопоставить динамический адрес с именем сервера в файле hosts, путем узнавания его из пинга dyndns-имени
|
Цитата:
Пока только алгоритм cmd-файла, приближенный к боевому: 1. IP вычленяется достаточно легко: для любой языковой версии операционки команда Код:
ping yandex.ru | find "[" > %TEMP%\IP_line.txt 2. Вычленяем из скобок этот IP и создаём файл (например, %TEMP%\srv_IP.txt) со строкой Код:
<Вычлененный адрес> srv 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: Код:
ipconfig /flushdns Итого — шаги 1, 4 и 5 уже готовы в кодах практически полностью, осталось детализировать шаги 2 и 3. Но тут надо покумекать (хотя для тех, кто часто работает с батниками, это труда не составило бы). |
Цитата:
|
Цитата:
Skylear, Вариант батника без проверки на наличие уже имеющейся строки сопоставления IP и имени сервера. Скрытый текст
Код:
@echo off Напомню, что для возможности записи в каталог %windir% и его подкаталоги командный файл надо запускать с правами администратора. |
попробую данный скрипт, я так понял он не стирает имеющиеся записи сопоставления в файле...? и в принципе так даже не плохо, так как динамический адрес выдается провайдером из пула (хз может 100 адресов), и со временем уже можно будет не запускать батник.
попробую, отпишусь. |
Цитата:
|
Цитата:
ну и не забываем Код:
nbtstat -R |
по данному скрипту, нормально пингует, узнает адрес и записывает в файл в папке темп, но в нем отображаются кракозябры, за исключением латиницы и цифр.... и hosts не записывается? пробовал разные кодировки батника
|
Цитата:
Цитата:
И в третий раз повторю, что запись в каталог Windows и его подкаталоги получится производить только при условии, что программа, которая это делает, запущена от имени Администратора, т.е. с административными правами. PS В Блокноте нет возможности сохранения файла в кодировке 866 (она же — русская OEM-кодировка). Я использую более продвинутый бесплатный Akelpad, в котором возможность выбора кодировки при сохранении есть. |
про кодировку понял 866 akelpadom смотрится. в lmgosts тоже нет ничего. и про права тоже понял, все делал с правами админа и без UAC
если я руками прописываю в файле hosts сопоставление srv 82.209.22.23 а 82.209.22.23 привязан к доменному имени типа srvsrv.noip.com то все работает, пингуя srv отвечает внешний ip, как раз это мне и нужно. |
Цитата:
Цитата:
Код:
REM Дописываем lmhosts.0 и сохраняем как lmhosts Код:
echo on Код:
pause Можете привести скриншот окна с этой частью. |
Почему бы в lmhost не прописать директивы импорта файла, который может быть от редактирован под юзером?
курить дерективу #INCLUDE Код:
#INCLUDE \\this_comp\share\newlmhosts #adds LMHOSTS from this server |
Время: 17:16. |
Время: 17:16.
© OSzone.net 2001-