Парсер файла hosts на Delphi
В английской раскладке: gfhcth afqkf hosts yf delphi
В русской раскладке: парсер файла рщыеы на вудзрш
| Рубрика Программирование | Дата 08-04-2010
2 498 | Оцените статью
1
Для начала расскажу что такое файл hosts. Обладатели Windows могут найти его в папке с системой (C:\WINDOWS\system32\drivers\etc). Представляет собой текстовый файл, состоящий из двух «столбцов»: первый это IP, второй это имя узла. Еще могут быть комментарии они отделяются символом # (решетка).
Для чего этот файл может служить? С его помощью мы можем запретить или перенаправить обращения к определенным узлам. Например заблокировать сайт exemple.com, для этого нужно добавить в файл hosts строку «127.0.0.0 exemple.com».
В этой статье я буду рассказывать о регулярных выражениях, у меня есть другая статья без регулярных выражений Разбор строк в Delphi. Array of String.
Многие вирусы и «неполезные» программы через этот файл запрещают обращения к популярным сайтам и соц сетям.
Сейчас мы займемся тем, что напишем программу которая будет выдавать содержимое файла hosts.
Необходимо скачать и подключить модуль RegExpr (раньше можно было скачать с сайта разработчика, но на момент написания статьи сайт не работал, поэтому качайте с моего сайта >>RegExpr<<).
procedure TForm1.Loadhosts;
var
I : Integer;ip, host : String;
Fd : TStringList;
Windir : string;
WindirP : PChar;
Res : Cardinal;
regexp : TRegExpr;
beginWinDirP := StrAlloc(MAX_PATH);
Res := GetWindowsDirectory(WinDirP, MAX_PATH);if Res > 0 then
WinDir := StrPas(WinDirP);fd := TStringList.Create;
CopyFile(PChar(WinDir +’\system32\drivers\etc\hosts’),PChar(ExtractFilePath(Application.ExeName)+’\host.s’),false);
fd.LoadFromFile(ExtractFilePath(Application.ExeName)+’\host.s’);regexp:=TRegExpr.Create;
regexp.Expression:=’^\s?\s*([\d\.]+)\s*([^\s]+)’;for i:=0 to fd.Count-1 do
begin
if (regexp.Exec(fd.Strings[i])) then
if not ((regexp.Match[1]=»") or (regexp.Match[2]=»")) then
beginip:=regexp.Match[1];
host:=regexp.Match[2];end;
regexp.Free;
fd.Free;end;
Теперь разберемся что как работает.
Можно конечно править файл hosts «на живую», но я сначала его скопировал в папку с программой. Потом загрузил в StringList. Задал маску и с помощью регулярных выражений убрал строки начинающиеся с «#», разделил ip и хост. В конце я вывел их в отдельные переменные.
‘^\s?\s*([\d\.]+)\s*([^\s]+)’ выглядит немного страшно, но если чуть чуть подумать и почитать информацию все становится просто.
^\s? это обозначает что в начале строки может быть пробел (а может и не быть).
\s* это обозначает что дальше может быть много пробелов (а может и не быть).
([\d\.]+) это обозначает что идут цифры разделяемые точками (ip), в скобках «()»потому что мы содержимое оставляем, оно нам еще пригодится.
\s+ опять много пробелов (один должен быть точно на это указывает +) .
([^\s]+) обозначает что тут могут быть любые символы, только не (^) пробел (\s) .
Более подробное описание синтаксиса регулярных выражений вы можете найти в интернете (например написать в поисковике «Синтаксис регулярных выражений»).
При копировании кода в delphi могут возникнуть проблемы с кавычками. Поменяйте их на ординарные.
Также я не предусмотрел что ip может записан неправильно, состоять из 5 чисел или содержать буквы. Считая что файл хостс всегда правильно наполнен.
Надеюсь вам пригодится моя статья.
При копировании укажите ссылку на http://dimkos.ru


[...] же как и в парсере файла hosts на delphi будем использовать регулярные [...]