поиск строки / подстановочный знак - PullRequest
0 голосов
/ 27 марта 2011

Iv'e в настоящее время работает над сравнительно небольшим проектом, с которым моя компания может поиграть, в основном это прокси в node.js, функции на данный момент относительно просты

  • Кэширование
  • Http (s)
  • Черный список
  • Настраиваемый
  • и т. Д.

Я на этапе, когда я создаю черный списокsystem, и мой файл черного списка представляет собой простой файл, в котором каждый сайт, занесенный в черный список, должен находиться на одной строке.

Теперь черный список будет создан таким образом, чтобы вы могли использовать следующие значения черного списка:

  • google.com
  • google.com / path
  • ww2.google.com / path
  • 202.55.66.201
  • 202.55.66. [100-200]

теперь в файле node.js, когда поступает запрос, у меня есть запрашиваемый URL-адрес со стороны клиента, после чего он будет найден в файле IP-кэша, если онне существует, он проверяется, и я получаю IP-адрес для этого запроса.

Так что несколько бипод рукой имеется информация, 1 - домен, 2 - IP, 3 - порт.

Теперь проблема в том, чтобы найти самый быстрый способ проверки этих значений в черном списке на основе файлов..

Поскольку эти значения не являются прямыми поисками, я не уверен, помещаю ли они затем в объект и выполняем:

if(ip in blacklist || domain in blacklist || fullUri in blacklist)
{
    //block
}

Даже если бы я это сделал, это не было бы действительно полезно, так как я не могупроверьте диапазоны IP-адресов и т. д., в нем отсутствует поддержка более требовательных методов внесения в черный список сайтов.

Я думал о какой-то системе баз данных, но я хотел этого избежать, поэтому в основном я спрашиваю, есть ли какой-то способвыполнять подстановочный поиск в файле данных, не вызывая чрезмерных затрат.

Ответы [ 2 ]

2 голосов
/ 27 марта 2011

Я думаю, что более эффективным способом было бы зацикливание каждой строки файла и сравнение с вашей информацией - также разрешило бы сопоставление с образцом - так в псевдокоде:

each file as line
    if line equal ip or line eq domain or line match 134.567.987.[0-9]{1-3}
        then block and break
0 голосов
/ 28 марта 2011

Вы можете загрузить файл при загрузке процесса nodejs. Затем вы можете обработать весь файл и разделить его на 3 массива (IP, домены и порты).

Быстрый поиск элементов в памяти.

После этого вы можете получить setInterval, который перезагрузит содержимое файла и сохранит его в памяти, чтобы получить последний черный список.

...