Комментарии 163
А почему должны?
Потому что программа правит host, к которому у многих антивирусов повышенный интерес.
И то что программа обращается к хосту эвристика думаю определить сможет. поддерживаю вопрос :)
И то что программа обращается к хосту эвристика думаю определить сможет. поддерживаю вопрос :)
Хм. Действительно, как это я не подумал об этом. У меня Avira Antivir во время разработки ни разу не ругалась. Судя по результату VirusTotal другие антивирусы поступают так же.
Ругаеться UAC :) И весь кайф командной строки теряется, если не запускать консоль под админом
Во первых — Вы молодец! Во вторых такую программу надо уст. на половину комп-ов моих знакомых, которые через день звонят и...:
yyy-Я В Контакт. Не могу войти! пишет отправь смс.
yyy-У меня сайты не работают!
и т.д… (Если рассматривать червя который хост правит)
А вот если такой фикс поставить, то достаточно будет сказать:
Открой консоль и напиши: hosts restore
Жить станет легче :)
yyy-Я В Контакт. Не могу войти! пишет отправь смс.
yyy-У меня сайты не работают!
и т.д… (Если рассматривать червя который хост правит)
А вот если такой фикс поставить, то достаточно будет сказать:
Открой консоль и напиши: hosts restore
Жить станет легче :)
Спасибо :) Для данного случая можно было бы применить менее радикальный метод: hosts rem vk* — удалит все записи, начинающиеся на vk.
+
route -f
route -f
В тему: согласно мелкомягким восстановление параметров файла hosts по умолчанию, например, для Windows XP, сводится к одной записи: 127.0.0.1 localhost
=)
=)
плюсанул, но.
1. не вижу ни чего, ради чего стоит тянуть dotNET. Все делается на bat файлах.
2. вы под админом сидите? :) не айс.
3. у программы проблемы с кодировкой.В host кодировку не менял, все стандартное
4. если нет админских прав — пишет что запись добавлена. но не может создать бэкап.
1. не вижу ни чего, ради чего стоит тянуть dotNET. Все делается на bat файлах.
2. вы под админом сидите? :) не айс.
3. у программы проблемы с кодировкой.В host кодировку не менял, все стандартное
4. если нет админских прав — пишет что запись добавлена. но не может создать бэкап.
Спасибо за комментарий. По порядку:
1. Для работы с хостами по маскам, включения-отключения хостов, различных выборок и др. одним bat файлом на мой взгляд не удалось бы обойтись. Хотелось реализовать более-менее стабильное приложение, которое не испугало бы например перемещение hosts в другой каталог (с изменением ссылки в реестре на его конечно же).
2. К сожалению, под Windows XP с большим набором старых программ тяжело работать под ограниченной учётной записью.
3. У меня английская Windows, поэтому и не заметил подобных проблем. Судя по всему в русской версии файл сохранён в кодировке cp1251. В следующем обновлении учту этот момент.
4. Программа пытается сделать бэкап до того момента, как сохранит все изменения в оригинальный файл, а ADDED в начале символизирует о том, что в памяти операцию удалось провести успешно. С следующим обновлением сделаю более понятный вывод ошибок.
1. Для работы с хостами по маскам, включения-отключения хостов, различных выборок и др. одним bat файлом на мой взгляд не удалось бы обойтись. Хотелось реализовать более-менее стабильное приложение, которое не испугало бы например перемещение hosts в другой каталог (с изменением ссылки в реестре на его конечно же).
2. К сожалению, под Windows XP с большим набором старых программ тяжело работать под ограниченной учётной записью.
3. У меня английская Windows, поэтому и не заметил подобных проблем. Судя по всему в русской версии файл сохранён в кодировке cp1251. В следующем обновлении учту этот момент.
4. Программа пытается сделать бэкап до того момента, как сохранит все изменения в оригинальный файл, а ADDED в начале символизирует о том, что в памяти операцию удалось провести успешно. С следующим обновлением сделаю более понятный вывод ошибок.
В реестре нет ссылки на файл hosts и его расположение не может быть переопределено редактированием реестра.
ru.wikipedia.org/wiki/Hosts
Расположение
%SystemRoot%\system32\drivers\etc\ по умолчанию. Расположение можно изменить в ключе реестра \HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\DataBasePath.
technet.microsoft.com/en-us/library/cc962455.aspx
Файла hosts в описании нет, кроме того попробуйте самостоятельно изменить его расположение этим ключом.
Specifies the path to the standard Internet database files, such as Hosts.sam, Lmhosts.sam, Services.sam, Networks, Protocol, and Quotes. The Windows Sockets interface uses this entry.
Файла hosts в описании нет, кроме того попробуйте самостоятельно изменить его расположение этим ключом.
Повторю вопрос — вы пробовали лично менять расположение файла hosts изменением ключа в реестре? У меня этот способ не работает.
перезагружаться не пробовали?
Пробовал. А вы, похоже, нет :)
машина не выключается неделями, проверять не стал:) лень:)
Аналогично, проверял на виртуальной. VEG хотя бы для интереса проверил перед использованием в своей программе. Мои тесты показали, что независимо от ключа и наличия/отсутствия файла hosts в папках, учитывается только путь по умолчанию. Если кто-то получит другие результаты — пусть поделится рецептом ;)
Думаю стоит встроить в программу требование запуска от имени администратора при модификациях hosts либо какую-то операцию для повышения привилегий уже после запуска путём ввода пароля администратора (если такое возможно). Разбираться уже на свежую голову буду.
открытие hosts для записи -> облом -> runas
Нужно лишь вставить манифест, делается очень легко. Я в свое время тоже писал такую утилиту (правда она командную часть имеет слабую, но с визуальным интерфейсом). hostseditor.codeplex.com/
Там это реализовано (повышение прав), посмотрите, если хотите.
Там это реализовано (повышение прав), посмотрите, если хотите.
Программа по умолчанию работает с файлом в кодировке UTF-8, то есть все созданные программой записи отображаются корректно. На мой взгляд UTF-8 всё же лучше и универсальнее, чем Windows-1251. Постараюсь реализовать в программе конвертацию из Windows-1251 в UTF-8 при необходимости, чтобы стандартное содержимое файла в русских Windows не теряло свой опрятный вид.
Смело. не боитесь криков хомячков «разкукожте мой файл обратно»? =) все же лучше оставлять ту кодировку которая была, или определять в какой кодировке файл (в 7 он по моему юникод?) и с тем работать.
Стандартный блокнот в Windows XP поддерживает UTF-8. Думаю, большинство пользователей не заметило бы смены кодировки :)
1. Это не ваш файл, ни вам решать каким ему быть.
2. Мало ли кто что с ним вздумает делать. консоль восстановления как UTF8 воспримит? edit досовский?
3. Встроенная утилита type не умеет utf в результате получится совсем страшно. Вашу программу могут и удалить а файл останется измененный.
4. Не вы один пытаетесь работать с этим файлом. другие программы могут не ожидать что файл в utf (saddo ваша программа ка себя поведет с utf файлом?) в лучшем случае не сможет работать — в худшем испортит вовсе файл.
5. От программы ждут что она будет делать то что должна, а уж ни как не заниматься оптимизацией моей ОС. много таких оптимизаций в результате вообще убьют ОС. Амбиции, понимаю, но делайте хорошо свою программу, а не операционку твикайте.
2. Мало ли кто что с ним вздумает делать. консоль восстановления как UTF8 воспримит? edit досовский?
3. Встроенная утилита type не умеет utf в результате получится совсем страшно. Вашу программу могут и удалить а файл останется измененный.
4. Не вы один пытаетесь работать с этим файлом. другие программы могут не ожидать что файл в utf (saddo ваша программа ка себя поведет с utf файлом?) в лучшем случае не сможет работать — в худшем испортит вовсе файл.
5. От программы ждут что она будет делать то что должна, а уж ни как не заниматься оптимизацией моей ОС. много таких оптимизаций в результате вообще убьют ОС. Амбиции, понимаю, но делайте хорошо свою программу, а не операционку твикайте.
UTF-8 спроектирован так, чтобы не конфликтовать с программами, которые читают файл с любой ANSI кодировкой. Максимум, что может произойти — это не-ASCII символы будут отображены неправильно (то есть проблема касается только русских комментариев в файле).
Программа saddo, как оказалось, тоже работает с этим файлом в кодировке UTF-8. То есть русские символы в windows-1251 тоже были потеряны. Логично, ведь в .NET всё по умолчанию в Юникоде :)
Впрочем, вы меня всё равно убедили. Я реализую загрузку, которая будет проверять текущую кодировку файла (UTF-8 или системная ANSI), и по возможности сохранять её.
Программа saddo, как оказалось, тоже работает с этим файлом в кодировке UTF-8. То есть русские символы в windows-1251 тоже были потеряны. Логично, ведь в .NET всё по умолчанию в Юникоде :)
Впрочем, вы меня всё равно убедили. Я реализую загрузку, которая будет проверять текущую кодировку файла (UTF-8 или системная ANSI), и по возможности сохранять её.
Простите, но в 2010 году н.э., .NET должен стоять везде. Или вы до сих пор на Win98?
Кому должен? У меня он на нетбуке не стоит например. Он мне не нужен в работе, да и места нет на диске что бы «на всякий случай» его ставить.
Почему можно узнать? У меня на WinXP не стоит, незачем (а на linux стоит Mono :) но в нём программа не работает, вываливается с эксепшеном про регистрикей )
>как было бы классно работать с hosts из командной строки
>получилась небольшая программа hosts.exe
echo «127.0.0.1 habrahabr.ru» >> /etc/hosts
echo «127.0.0.1 habrahabr.ru» >> C:\Шindows\System32\drivers\etc\hosts
>получилась небольшая программа hosts.exe
echo «127.0.0.1 habrahabr.ru» >> /etc/hosts
echo «127.0.0.1 habrahabr.ru» >> C:\Шindows\System32\drivers\etc\hosts
sudo!!!
бр… парсер…
sudo !!
Судо — это проблема убунтоводов. Обычно для правки системных конфигов логинятся рутом через su ;)
А в Шindows для правки системных конфигов нужно пускать командную строку от имени администратора, так что права админа уже есть.
А в Шindows для правки системных конфигов нужно пускать командную строку от имени администратора, так что права админа уже есть.
Win Key + R
notepad %systemroot%\drivers\etc\hosts
notepad %systemroot%\drivers\etc\hosts
Подойдёт для простых операций. Но так будет сложно реализовать операции с хостами по маске например.
Три вопроса
1. hosts может быть переназначен. Программа это учитывает?
2. работает ли от юзера без прав редактирования файла?
3. зачем вообще править hosts?
1. hosts может быть переназначен. Программа это учитывает?
2. работает ли от юзера без прав редактирования файла?
3. зачем вообще править hosts?
Внезапно вопрос. Как переназначить hosts под Windows?
Нет, я просто не знал что в реестре переназначается.
Искал «Как переназначить hosts под Windows».
Искал «Как переназначить hosts под Windows».
Я даже не знаю что ответить… вроде как почти все в винде в реестре конфигурируется.
А все таки зачем?
ответ на №2 я предполагаю отрицательный
А все таки зачем?
ответ на №2 я предполагаю отрицательный
Ну почти всё да не всё. Есть ещё ini файлы, и кое-что ещё можно junction point'ами перенаправить ;)
В Windows x64 тяжеловато его с первого раза найти. Переназначу потом его в папку куда-нибудь по ближе.
В Windows x64 тяжеловато его с первого раза найти. Переназначу потом его в папку куда-нибудь по ближе.
Все хост-трояны ищут файл hosts по дефолтному пути, при изменении его, я думаю примерно 80% этих потеряют актуальность.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
скажу на память что параметр DataBasePath
скажу на память что параметр DataBasePath
1. Да, программа берёт путь к hosts файлу из реестра. Выше я писал об этом
2. Без прав редактирования файла программа не сможет его изменить
3. А нужно ли это — каждый может решить сам для себя.
2. Без прав редактирования файла программа не сможет его изменить
3. А нужно ли это — каждый может решить сам для себя.
Вот прочитал я всё это, и задумался… А зачем оно всё…
У меня файл hosts не менялся ни разу с момента установки Windows. Может быть я делаю что-то не так?
Но автор, безусловно, молодец.
У меня файл hosts не менялся ни разу с момента установки Windows. Может быть я делаю что-то не так?
Но автор, безусловно, молодец.
edit "%systemroot%\drivers\etc\hosts"
открывается редактор консольный
открывается редактор консольный
Можно установить np++, а он установлен у большинства, то у меня, к примеру, он сохраняется во вкладке(пока ее не закроешь), и если запустить от имени администратора np++, то спокойно можно модифицировать hosts.
Надо сделать доп функцию, пусть ваша программа блокирует hosts :)
hosts.exe — похоже на название вируса. Я б увидел, непроизвольно удалил бы )
А я всегда пользовался ярлычком на рабочем столе с таким вот содержанием :)
C:\WINDOWS\system32\notepad.exe C:\WINDOWS\system32\drivers\etc\hosts
C:\WINDOWS\system32\notepad.exe C:\WINDOWS\system32\drivers\etc\hosts
для пользователей unix-like систем есть рубишный gem
gem ghost
github.com/bjeanes/ghost
ну и если вдруг будет возможность поставить gem на винду, то тоже
gem ghost
github.com/bjeanes/ghost
ну и если вдруг будет возможность поставить gem на винду, то тоже
Спасибо за Win+R!
Ещё есть:
Win + D
Win + M
Win + E
Win + F
Win + Break
И в Windows 7 добавлено:
Win + Tab
Win + влево
Win + вправо
Win + вниз
Win + вверх
Win + D
Win + M
Win + E
Win + F
Win + Break
И в Windows 7 добавлено:
Win + Tab
Win + влево
Win + вправо
Win + вниз
Win + вверх
Win +Break и Win + E не знал, спасибо!
Ещё очень помогает «Ctrl + Shift + Esc» для вызова диспетчера задач.
еще Ctrl+Esc
Win+Tab работает и в XP. Просто переключает не окна а задачи на панели. мне удобнее использовать именно это сочетание.
Win+Tab работает и в XP. Просто переключает не окна а задачи на панели. мне удобнее использовать именно это сочетание.
Не холивара ради, но всё-таки как мучаются люди под Windows, когда в других операционных системах есть всяческие sed, awk и т.п.
О каких мучения идет речь, если ТС продемонстрировал узкоспециализированный инструмент, которой в своей сфере применения положит «sed, awk и т.п.» на лопатки? И еще вопрос ради моего самообразования. Что есть такого в «sed, awk и т.п.», чего нет в windows powershell?
sed есть сразу, ps надо ставить.
В Win7 из коробки, в Win2008 из коробки.
Пока XP больше. Особено в корпоративном секторе.
И что? После данного тезиса powershell надо будет ставить на win7/2008? Я просто уточнил Ваше заявление, что powershell надо ставить далеко не на все рабочие места. Причем этих самых мест с ps гораздо больше, чем тех, что с упомянутыми sed/awk на борту.
После данного тезиса вам должно было придти понимание что ps нет на большинстве Win компов.
И его нужно ставить, в отличии от sed, который есть из коробки.
Поставить на все компы с XP (согласитесь в корпоративном секторе они преобладают) ps нужно сделать лишнее движение. Или ногами пройтись или политикой поставить. А если вы зашли телнетом и вдруг обнаруживает что ps нет… неприятно.
В то же время зайдя на линукс машины телнетом вы не сталкиваетесь с тем что вдруг нет sed.
И его нужно ставить, в отличии от sed, который есть из коробки.
Поставить на все компы с XP (согласитесь в корпоративном секторе они преобладают) ps нужно сделать лишнее движение. Или ногами пройтись или политикой поставить. А если вы зашли телнетом и вдруг обнаруживает что ps нет… неприятно.
В то же время зайдя на линукс машины телнетом вы не сталкиваетесь с тем что вдруг нет sed.
А я этого понимания не искал, просто исправил Вашу же ошибку, что де «ps надо ставить». Тогда как на 20% рабочих мест его ставить не надо. Все остальные Ваши доводы просто пытаются обосновать, что 20% — это несущественно, статистическая погрешность, с чем я не совсем согласен. Но права иметь свою «систему мер и весов» я у Вас отнять не могу.
так уж и на лопатки? даже не смешно
А Вы имеете убеждение, что специализированный софт проигрывает в области свои специализации ПО широко назначения? Может нарисуете строчку с использованием sed/awk аналогичную приведенным ТС, чтобы мы вместе не посмеялись?
Добавить:
echo 127.0.0.1 vkontakte.ru >> /etc/hosts
Удалить
cat /etc/host | grep -v vk > /etc/host
Отключить:
cat /etc/hosts | sed -e "/\(.*vk.*\)/#\1/" > /etc/host
Лист:
cat /etc/host
Бэкап:
cp /etc/host /etc/host.bak
echo 127.0.0.1 vkontakte.ru >> /etc/hosts
Удалить
cat /etc/host | grep -v vk > /etc/host
Отключить:
cat /etc/hosts | sed -e "/\(.*vk.*\)/#\1/" > /etc/host
Лист:
cat /etc/host
Бэкап:
cp /etc/host /etc/host.bak
cat /etc/hosts | sed -e "/\(.*vk.*\)/#\1/" > /etc/host
вс
hosts disable local?ost
Как-то не похоже «на лопатки» по юзабельности.
После прочтения статьи, кстати, решил написать простенький скрипт с таким же функционалом для linux. Спасибо, что показали несколько примеров :)
вс
hosts disable local?ost
Как-то не похоже «на лопатки» по юзабельности.
После прочтения статьи, кстати, решил написать простенький скрипт с таким же функционалом для linux. Спасибо, что показали несколько примеров :)
что мешает сохранить этот «cat....» в sh скрипт и вызывать так же
EdHostDis.sh vk
EdHostAdd.sh vk.com 127.0.0.1
Все скрипты будут весить около 5-9кб. и не понадобиться ни .net ни mono ;)
(написал по памяти, может не работать 100%, мог ошибиться в регэкспе ;) так что потренируйтесь на кошках)
EdHostDis.sh vk
EdHostAdd.sh vk.com 127.0.0.1
Все скрипты будут весить около 5-9кб. и не понадобиться ни .net ни mono ;)
(написал по памяти, может не работать 100%, мог ошибиться в регэкспе ;) так что потренируйтесь на кошках)
Это и будет bash скрипт, только синтаксис «hosts add vk.com 127.0.0.1» мне нравится больше, чем «EdHostAdd.sh vk.com 127.0.0.1» :)
Точно также можно было это завернуть в WSH-скрипты. Не нужно было бы ни .net, ни моно. Но ТС сделал так, Вы бы сделали sh-скрипт, я бы ps-скриптлет. Вопрос предпочтения.
echo 127.0.0.1 vkontakte.ru >> /etc/hosts
Не проверяет, существует ли уже подобный хост в hosts. Если существует, старая запись должна обновиться.
cat /etc/host | grep -v vk > /etc/host
Удалит строки, где например в комментариях случайно оказалось vk. То есть мы рискуем потерять нужные записи.
cat /etc/hosts | sed -e "/\(.*vk.*\)/#\1/" > /etc/host
Строки, которые уже закомментированы, будут закомментированы повторно. Опять не учитывается, что vk должен находиться только в имени хоста.
Будет странно если vk встретиться в IP 8-)
Согласен, но это уже доработки и защиты от дурака. Все это можно учесть, и написать более сложный но все же скрипт.
Согласен, но это уже доработки и защиты от дурака. Все это можно учесть, и написать более сложный но все же скрипт.
При чём тут IP, речь о подобном случае:
Ну и с повторным комментированием строк тоже неприятность, снять комментарии по маске тоже вряд ли красиво получится.
Написать это можно было на чём угодно. Совсем не понимаю, почему по вашему мнению скрипт обязательно лучше программы?
127.0.0.1 testing.dev # Это не vkontakte.ru
Ну и с повторным комментированием строк тоже неприятность, снять комментарии по маске тоже вряд ли красиво получится.
Написать это можно было на чём угодно. Совсем не понимаю, почему по вашему мнению скрипт обязательно лучше программы?
Вы правда не понимаете что это надуманая проблема и исключить из обработки комментированые строки или не искать в комментариях не сложно.
Или троллите?
Или троллите?
Обратите внимание на комментарий Guderian, с которого начался этот диалог.
выглядит проще, чем
при этом если в последнем случае постараться добиться повторения поведения первого, ваш вариант несколько прибавит в объёме.
Я это всего лишь к тому, что в специализированных решениях что-то есть.
И даже если вы напишите шелл-скрипт, который будет иметь аналогичный hosts.exe внешний интерфейс, это уже будет то самое специализированное решение, просто реализованное другими средствами.
hosts disable vk*
выглядит проще, чем
cat /etc/hosts | sed -e "/\(.*vk.*\)/#\1/" > /etc/host
при этом если в последнем случае постараться добиться повторения поведения первого, ваш вариант несколько прибавит в объёме.
Я это всего лишь к тому, что в специализированных решениях что-то есть.
И даже если вы напишите шелл-скрипт, который будет иметь аналогичный hosts.exe внешний интерфейс, это уже будет то самое специализированное решение, просто реализованное другими средствами.
Ну Вы же понимаете, что это вопрос вопроса, при желании это легко дополняется. Всё зависит от постановки задачи и исходных данных. Так или иначе, но шелл-скрипт, который будет делать всё, будет гораздо проще и меньше Вашей утилиты.
Не забывайте, что моя программа ориентирована для Windows. Я и не сомневался, что под Linux вряд ли кто-то встретит подобную инициативу положительно :)
Я встретил и даже попробовал её запустить под Ubuntu, но вылетает с эксепшеном :(
Да нет, речь просто о вопросе выбора инструмента. Если уж bash/grep/sed Вам не подходят (хотя они есть под виндами), возьмите awk, хотя программа получится больше. Не нравится awk — на здоровье, напишите на Tcl или Perl, но тогда размер ещё несколько возрастёт. Но писать такую программу на C#, C или C++ я бы не стал ни в коем случае, и не потому что C# — это MS, C — K&R, а C++ — Строуструп, а потому что это языки слишком низкого уровня для такой задачи.
И таки да, я бы такую утилиту назвал бы update-hosts (по аналогии с update-rc.d, update-grub и так далее).
И таки да, я бы такую утилиту назвал бы update-hosts (по аналогии с update-rc.d, update-grub и так далее).
Добавить — в корзину. Даже не обрабатывает ситуации, когда запись уже присутствует.
Удалить — выглядит сложнее и совершенно не гарантирует правильного удаления (а если у меня vk в комменте присутсвует)
Отключить — сложнее и так же не гарантирует правильного отключения
Лист — это не листинг хостов, это вывод всего вместе с комментариями.
Бэкап — почти эквивалентно… до тех пор пока мне не захочется добавить в имя бэкапа таймстемп.
Удалить — выглядит сложнее и совершенно не гарантирует правильного удаления (а если у меня vk в комменте присутсвует)
Отключить — сложнее и так же не гарантирует правильного отключения
Лист — это не листинг хостов, это вывод всего вместе с комментариями.
Бэкап — почти эквивалентно… до тех пор пока мне не захочется добавить в имя бэкапа таймстемп.
блин. ни разу за 10 лет админско-программерской жизни не столкнулся с необходимостью править hosts. Имхо — эта программа просто ещё один костыль для тех кто не хочет системно заняться безопасностью и правильно настроить ось.
>>блин. ни разу за 10 лет админско-программерской жизни не столкнулся с необходимостью править hosts.
Пообслуживайте компанию программистов с разными продакшен и препродакшен серверами. И начнете редактировать.
Пообслуживайте компанию программистов с разными продакшен и препродакшен серверами. И начнете редактировать.
вообще то для компании лучше dns поднять для этих целей. а правка hosts — это всё же костыль.
ДНС тоже поднят. Используется все.
Сервер DNS может резолвить запросы для некоторых доменов по разному в зависимости от IP клиента? Или на каждом компе устанавливать сервер и настраивать его как авторитетный для таких доменов?
на мой взгляд это извращения обусловленные неправильной постановкой задачи изначально — и как следствие — использование костылей.
если я не прав — приведите реальный пример.
если я не прав — приведите реальный пример.
Алгоритм работы скрипта завязан на имя домена, разработчикам и тестировщикам надо как-то локально проверять работу скрипта.
Общепринятое, имхо, решение — у каждого локально поднят веб-сервер с привязкой к этому домену, а домен прописан в hosts на 127.0.0.1. (если нужен доступ к реальному хосту домена, то строчка комментируется/удаляется). Вариация — веб-сервер поднят на удаленном developmment сервере, но каждый разработчик или тестировщик должен иметь возможность переключать локально для своего компьютера обращаться к development или production по точному имени.
Общепринятое, имхо, решение — у каждого локально поднят веб-сервер с привязкой к этому домену, а домен прописан в hosts на 127.0.0.1. (если нужен доступ к реальному хосту домена, то строчка комментируется/удаляется). Вариация — веб-сервер поднят на удаленном developmment сервере, но каждый разработчик или тестировщик должен иметь возможность переключать локально для своего компьютера обращаться к development или production по точному имени.
Костыль — это когда у вас веб-девелоперы будут работать не в своей локальной песочнице с локальным веб-сервером, забинженым через hosts на имя разрабатываемого сайта, а дружно сливать свой шлак на сервер компании с прописанным в dns именем. А для распределенной команды фрилансеров будет вообще полный капут. Каждому из них при каждом чихе осуществлять деплой проекта на централизованный сервер?
Конечно костыль. Зачем использовать в dev имя prod сервера?
Для тестирования того, что всё на имени prod будет работать как нужно?
Во-первых, есть огромное количество CMS и прочих систем, для которых имя домена играет роль.
Во-вторых, вы можете просто использовать вместо someproject.com локально someproject. Это гораздо удобнее localhost:4576, особенно когда вы работаете одновременно далеко не с одним проектом.
В-третьих, ключевым было то, что девелоперы не будут гадить в том место, куда указывает единая на компанию dns-запись, которую Вы предложили.
Во-вторых, вы можете просто использовать вместо someproject.com локально someproject. Это гораздо удобнее localhost:4576, особенно когда вы работаете одновременно далеко не с одним проектом.
В-третьих, ключевым было то, что девелоперы не будут гадить в том место, куда указывает единая на компанию dns-запись, которую Вы предложили.
Идем к UNIX-way — много мелких программ, которые делают 1-2 вещи, но делают это хорошо :).
Мы пойдем другим путем: runas /user: Администратор «notepad %systemroot%\system32\drivers\etc\hosts»
кстати, а runas умеет юзера SYSTEM?
не-а, но… можно так:
at 20:27 /interactive cmd
но надо знать время и быть админом :) либо как-то так: codebox.org.uk/pages/scripts/run-as-system
at 20:27 /interactive cmd
но надо знать время и быть админом :) либо как-то так: codebox.org.uk/pages/scripts/run-as-system
Указываю свой админский аккаунт — все равно не дает сохранить потом файл на нужное место.
«Если бы люди умели пользоваться vim, grep, sed, awk, то миллионы программных продуктов так никогда и не были бы созданы» © bash.org.ru
Часто проще написать свою утилиту с жёстким функционалом, чем разбираться с многостраничными описаниями и мануалами универсальных программ. Что уж говорить, если утилита уже кем-то написана.
Да уж. В то время как под Linux модифицировать hosts элементарно, пользователи Windows пишут специальные утилиты на каждый чих, посты и кучу комментов.
Я вот сейчас пишу аналогичную утилиту на языке bash'a — для меня конструкция типа «cat /etc/hosts | sed -e „/\(.*vk.*\)/#\1/“ > /etc/host» не является элементарной (один раз разобраться, вписать в скрипт и забыть можно, использовать ежедневно — напряжно каждый раз во второй консоли открывать man sed), а использовать иногда по нескольку раз в день конструкцию «sudo gedit /etc/hosts &» и потом редактировать ручками — утомляет.
Ну что ж… я рад, что ты используешь Linux… Но во-первых, sed можно использовать с -i, а во-вторых вот твой скрипт за 5 минут (он удаляет строку из файла по любому паттерну):
#!/bin/bash
FILE="./hosts";
ACTION="$1";
DOM="$2";
IP="$3";
usage() {
echo «Usage: $0 ACTION DOMAIN [IP]»;
}
if [[ $# -lt 2 ]];
then
usage;
exit;
fi
case $ACTION in
add)
echo add;
echo "$IP $DOM" >> $FILE;
;;
del)
echo del
grep -v "$DOM" $FILE > $FILE.tmp;
mv $FILE.tmp $FILE;
;;
*)
usage;
exit 1;
esac
#!/bin/bash
FILE="./hosts";
ACTION="$1";
DOM="$2";
IP="$3";
usage() {
echo «Usage: $0 ACTION DOMAIN [IP]»;
}
if [[ $# -lt 2 ]];
then
usage;
exit;
fi
case $ACTION in
add)
echo add;
echo "$IP $DOM" >> $FILE;
;;
del)
echo del
grep -v "$DOM" $FILE > $FILE.tmp;
mv $FILE.tmp $FILE;
;;
*)
usage;
exit 1;
esac
Что-то похожее и у меня получается (подсмотрел во всяких /etc/init.d/ скриптах как обрабатывают параметры-команды). Основная проблема в том, что универсальные паттерны (учитывающие, например, что строка в hosts может иметь вид «127.0.0.1 vk.com vkontakte.ru» и удалить нужно только vk.com) слишком сложны для написания на лету и иной раз проще написать скрипт на ЯП общего назначения, чем регулярку, учитывающие все варианты, не зря же ввели в синтаксис PCRE возможность составления выражения в несколько строк и комментирования.
гм… keep it simple. ты задачу неправильно ставишь. не нужно тебе все варианты учитывать. просто пиши парами и все. hosts не треснит, а если треснит, то для этого bind есть. Там уже все утилиты написаны.
А в итоге… да… человек на ЯП написал несколько сотен строк кода… вместо этих 32ух. enbable/disable/backup/clean… прямо отдельный программный продукт, как правильно написал badguy. Не понимаю я этого.
А в итоге… да… человек на ЯП написал несколько сотен строк кода… вместо этих 32ух. enbable/disable/backup/clean… прямо отдельный программный продукт, как правильно написал badguy. Не понимаю я этого.
Решить эту задачу для меня лишь средство достижения цели :) А цель — научиться писать шелл-скрипты, которые не только я буду использовать («сборка» проектов, их тестирование, деплой и т. п.). А тут задача поставлена хорошо мне знакомая, но о возможности автоматизации её я даже не задумывался, хотя в /etc/hosts бывает десятки раз за день захожу, чтобы закомментить или раскомментить строчку. Двух зайцев убью :)
Если ты уже под админом, можно просто добавить запись такой командой:
echo 127.0.0.1 vkontakte.ru >> %systemroot%\system32\drivers\etc\hosts
echo 127.0.0.1 vkontakte.ru >> %systemroot%\system32\drivers\etc\hosts
а что бы удалитьпотом:type %SystemRoot%\system32\drivers\etc\hosts | find /v «vk» > host.new && del %SystemRoot%\system32\drivers\etc\hosts && copy host.new %SystemRoot%\system32\drivers\etc\hosts && del host.new
Достаточно type %SystemRoot%\system32\drivers\etc\hosts | find /v «vk» > %SystemRoot%\system32\drivers\etc\hosts
а оно не затрёт исходный файл в процессе его обработки? в юниксах вся цепочка работает сразу, потому исходный файл после такой команды будет потерян :)
Ну так это проблема юниксов, нэ? +)
У меня, при двух строчках в нём, не затёрло, при одной (специально внесённого 127… vkonta...) результат был пустой файл, но проверять мне было лень. Win7 х32
У меня, при двух строчках в нём, не затёрло, при одной (специально внесённого 127… vkonta...) результат был пустой файл, но проверять мне было лень. Win7 х32
голова :)
windows :D
Сделал маленькое обновление:
— Сохраняется исходная кодировка hosts (актуально для русских Windows)
— Возможность создания стандартного hosts файла (recreate)
— Программа требует для запуска администраторские права (для Vista и 7)
code.google.com/p/hostscmd/downloads/list
— Сохраняется исходная кодировка hosts (актуально для русских Windows)
— Возможность создания стандартного hosts файла (recreate)
— Программа требует для запуска администраторские права (для Vista и 7)
code.google.com/p/hostscmd/downloads/list
Прога обалденная!
В windows 7 корректно требует администраторские права. Но после разрешения запускается в отдельном консольном окне, которое сразу же после вывода закрывается. В режиме list не успеваешь прочитать. Не уверен, что это можно исправить, т.к. Defraggler ведёт себя точно так же.
Пока нашёл маленький workaround — нужно запустить сам cmd (или аналог) с правами администратора, тогда новых окон не открывается и вывод остаётся в его окне. Ну или как вариант — направить вывод в файл.
В windows 7 корректно требует администраторские права. Но после разрешения запускается в отдельном консольном окне, которое сразу же после вывода закрывается. В режиме list не успеваешь прочитать. Не уверен, что это можно исправить, т.к. Defraggler ведёт себя точно так же.
Пока нашёл маленький workaround — нужно запустить сам cmd (или аналог) с правами администратора, тогда новых окон не открывается и вывод остаётся в его окне. Ну или как вариант — направить вывод в файл.
Спасибо.
Сегодня вышла новая версия программы. Просьба протестировать на Windows 7.
— Поддержка IDN (на экране отображается в декодированном виде)
— Поддержка IPv6 адресов
— Поддержка алиасов (несколько доменных имён в строке)
— Новая операция rollback для отмены работы последней команды
— add и set — разные команды (добавление и обновление соответственно)
— Команда add сама догадывается о порядке параметров, всё что после # — комментарий
— Возможность создавать несколько резервных копий hosts, задавая имя копии
Сегодня вышла новая версия программы. Просьба протестировать на Windows 7.
— Поддержка IDN (на экране отображается в декодированном виде)
— Поддержка IPv6 адресов
— Поддержка алиасов (несколько доменных имён в строке)
— Новая операция rollback для отмены работы последней команды
— add и set — разные команды (добавление и обновление соответственно)
— Команда add сама догадывается о порядке параметров, всё что после # — комментарий
— Возможность создавать несколько резервных копий hosts, задавая имя копии
Проверил всё кроме IPv6, работает. Ситуация с отдельным консольным окном не улучшилась — всё так же.
Возможно, баг:
hosts add a.pusher.we b.pusher.we
hosts set a.pusher.we 192.168.0.2 — изменит и b.pusher.we тоже, хотя я мог просто забыть, что они алиасы.
Возможно, баг:
hosts add a.pusher.we b.pusher.we
hosts set a.pusher.we 192.168.0.2 — изменит и b.pusher.we тоже, хотя я мог просто забыть, что они алиасы.
Как я понял, наиболее адекватное решение проблемы с отдельным консольным окном — только запуск консоли от имени администратора. По этой части я только улучшил вывод ошибки, если у программы нет прав на запись в hosts.
По поводу алиаса. Я долго размышлял что делать в подобных случаях. Внутренности программы позволяют обрабатывать их отдельно. Но разрывать строку на две на мой взгляд немного нелогично, ведь это алиасы. Для такого случая я и сделал операцию rollback. При hosts set a.pusher.we 192.168.0.2 выведется какая строка была обновлена, и пользователь сразу поймёт что не так, и при необходимости сделает откат.
По поводу алиаса. Я долго размышлял что делать в подобных случаях. Внутренности программы позволяют обрабатывать их отдельно. Но разрывать строку на две на мой взгляд немного нелогично, ведь это алиасы. Для такого случая я и сделал операцию rollback. При hosts set a.pusher.we 192.168.0.2 выведется какая строка была обновлена, и пользователь сразу поймёт что не так, и при необходимости сделает откат.
Вышла версия 1.4:
— Встроенный командный интерпретатор, который запускается при вызове hosts без параметров
— Команда hosts open открывает hosts в программе, ассоциированной с .txt
— Команда hosts view упрощена, по умолчанию отображает только включённые и не скрытые хосты
Скачать обновление можно на страничке проекта Hosts Commander.
— Встроенный командный интерпретатор, который запускается при вызове hosts без параметров
— Команда hosts open открывает hosts в программе, ассоциированной с .txt
— Команда hosts view упрощена, по умолчанию отображает только включённые и не скрытые хосты
Скачать обновление можно на страничке проекта Hosts Commander.
Вышла новая версия 1.5 с поддержкой запуска под Mono на Linux и Mac OS X. Описание в новой статье: habrahabr.ru/blogs/webdev/132963/
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Hosts Commander — модификация hosts из командной строки