rss
twitter
  •  

Парсер файла hosts на Delphi

В английской раскладке: gfhcth afqkf hosts yf delphi
В русской раскладке: парсер файла рщыеы на вудзрш
| Рубрика Программирование |
2 498 | Оцените статью
(Нет оценок)
Loading ... Loading ...

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;
begin

WinDirP := 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
begin

ip:=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

Это интересно...

Метки: , ,

Если нужен мерседес - Подпишись на RSS!

Комментарии (1)

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

Комментирование продлевает жизнь!