NetSearcher - сканер локальной сети

Введение

       Предположим ваш компьютер входит в состав некоторой одноранговой сети (домашная сеть, сеть общежития и т.п.), то есть такой, в которой все компьютеры равноправны и нет отдельный выделенных ресурсов типа файловых или каких-либо других серверов. При количестве компьютеров превышающем десяток, найти в такой сети конкретный файл или группу файлов по некоторому расширению (например, фильмы: *.avi) практически не представляется возможным. Найти вы может быть и сможете, но следить за обновлением таких файлов - непосильная задача.

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

Описание

      Итак, общий подход заключается в следующем: сканер периодически запускается на одной из машин вашей одноранговой сети, сканирует разделяемые (shared) каталоги других пользователей сети, а полученный снимок сети (в виде xml-файла) отправляет на web-сервер post-запросом (это легко переделывается, можете сохранять файл снимка локально). Далее, сценарий принимающий post-запрос сохраняет информацию о фильмах, например, в базе данных. Пользователь посредством web-интерфейса может просматривать доступные в сети фильмы и закачивать их. Таким образом, ему не обязательно пролазить все компьютеры в сети, эту работу за него сделает сканер сети.

      Сканер не является сервисом в смысле WinNТ, а запускается при старте системы (то есть его необходимо поместить в каталог Startup или соответствующий ключ реестра HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run). Однако, являясь по сути резидентным приложением, может послужить основой для создания некоторого сервиса поиска фильмов в сети (как в предыдущем азбзаце - интеграция с web-сервером).

Ниже перечисленны основные возможности сканера:

  • Поиск файлов в локальной сети по заданному расширению(ям) в каталогах, чье название проходит по накладываемой маске
  • Определение MAC-адреса хоста, на котором были найдены файлы (данная информация поможет при идентификации хостов)
  • Формирование xml-файла с описанием найденных файлов: хост, каталог, имя файла, дата сканирования
  • Определение длины файла, а также его идентификация (в случае .avi файлов - продолжительность фильмов в миллисекундах)
  • Часто при плохом соединении поиск файлов может повисать, для этого случая предусмотрено уничтожение зависшего потока.
  • Отправка xml-снимка состояния сети на web-сервер post-запросом (посредством msxml)
  • Отчуждаемое ядро сканера, которое может быть обличено в консольное приложение, win32-приложение, winnt-сервис и т.п.

    Настройка сканера

    Реализована возможность настройка сканера (netsearcher.xml): хосты, по которым искать (если не задано, то поиск идет по всем хостам), маска для названия шар (например, фильмы, films, кино, video), список расширений файлов, частота сканирования, адрес страницы web-сервера, которая будет принимать post-запрос.

    <netsearcher>
    	<parameters>
    		<hostslike/>
    		<shareslike>films, film, фильмы, кино, flm, video</shareslike>
    		<extslike>avi, mov</extslike>
    		<frequency>300</frequency>
    	</parameters>
    	<send>
    		<host>http://localhost/net/synchro.php</host>
    	</send>
    </netsearcher>
    

    Обработка post-запроса

    Обработка post-запроса, присланного сканером сети, может быть реализована на php следующим образом:

    <?php
    	$fp = fopen ("data.xml", "wt");
    	fwrite($fp, $HTTP_RAW_POST_DATA);
    	fclose($fp);
    ?>
    
    Далее с этим файлом вы можете делать очень много вещей: просто показывать список фильмов доступных в сети, организовать базу данных, в которую помещать найденные фильмы, а затем показывать пользователю как новые фильмы (недавно появившиеся в сети), так и все фильмы, добавив разбивку по жанрам и многое другое.

     Evgeny Savitsky © 2002-2003