Logo GenDocs.ru

Поиск по сайту:  

Загрузка...

Дипломная работа - Система учета и контроля работоспособности оборудования на примере городской локальной сети - файл 1.doc


Дипломная работа - Система учета и контроля работоспособности оборудования на примере городской локальной сети
скачать (840.5 kb.)

Доступные файлы (1):

1.doc841kb.17.11.2011 04:41скачать

содержание
Загрузка...

1.doc

1   2   3   4   5
Реклама MarketGid:
Загрузка...
^

3.2. Программная реализация проекта


Вся структура системы реализована через PHP скрипты, работающими с данными хранящимися в базе данных MySQL и выводящейся всей необходимой информацией на web приложение, которое наглядно помогает ориентироваться и работать со всеми необходимыми компонентами. Web- интерфейс в свою очередь реализован через средства HTML, PHP и JSHttpRequest под управлением Web-сервера Apache, с дополнительно установленными такими средствами как: JpGraph, GD. Вся система находится под управлением системы FreeBSD v.7.0, в связи с ее стабильностью работы, великолепно себя зарекомендовавшей в качестве операционной системы под сервера, не высокими системными требованиями к аппаратной конфигурации и поддержкой необходимых программного обеспечения для реализации системы.

Система функционирует на сервере с конфигурацией:

Тип ЦП: Pentium 233 МГц

Системная плата: Gigabyte GA-6VTX (1 ISA, 5 PCI, 1 AGP, 1 AMR, 3 DIMM, Audio)

Чипсет системной платы: VIA VT82C694T Apollo Pro133T

Объем оперативной памяти: 128 Мб (SDRAM)

Видеоадаптер: NVIDIA Vanta/Vanta LT (Microsoft Corporation) (8 Мб)

Дисковый накопитель: ST310212A (10Гб, Ultra-ATA/133)

Сетевой адаптер: Realtek RTL8139 Family PCI Fast Ethernet NIC
^

3.2.1. ОБЩИЙ ПРИНЦИП ВЗАИМОДЕЙСТВИЯ МОДУЛЕЙ




Рисунок 3. Принцип взаимодействия модулей.


При обращение к одному из модулей системы производится через web-интерфейс. При обращении к web-интерфейсу web-клиент отсылает передачу данных на www-сервер, который в свою очередь обращается к модулю AJAX для построения web-страницы с выбором данных из сервера БД. Получив ответ от базы данных и www-сервера, нам становится доступна, запрошенная нами, web-страница.




Рисунок 4. Схема взаимодействия Web отображения.

Если обращение происходит к блоку редактирования или занесения информации о каком-то оборудовании, модуль AJAX состоящий из двух компонентов, строит web- страницу выбирая запросами из БД требуемых нами данных. При внесении изменений все отредактированные данные отсылаются и записываются в базу данных.

При обращении к моменту мониторинга сети, происходит выбор прорисовки карты города, которая в свою очередь необходимые ей результаты получает из временных переменных, которые были получены от работы модуля генерации данных временных переменных, запущенного модулем прорисовкой карты. И модуль прорисовки карты и генерации временных переменных обращаются к базе данных с определенными запросами для получения требуемой информации. Так же для выставления отображения цветов отдельных участков сети города на карте определенным цветом, модуль прорисовки карты, благодаря запросу, получает требуемые сведения из базы данных, занесенными туда модулем контроля, который в автономном режиме работает с периодом запуска в 5 минут.
^

3.2.2. Механизм РАБОТЫ С бд


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

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

Извлечение списка всех узлов некоторого поддерева, заданного его вершиной, является одной из самых распространенных задач, решаемых в прикладных программах. Например, чтобы определить обороты по бухгалтерскому счету, необходимо просуммировать проводки по нему и по всем его субсчетам. В складской программе может понадобиться список товаров, принадлежащих некоторой товарной группе и ее подгруппам, причем, таких подгрупп может быть неограниченное количество, и сами они могут иметь вложенные подгруппы и т.д. Хотя, теоретически такая задача решается элементарно с помощью рекурсивного обхода дерева, иногда же приходится выбирать нерекурсивный обход, т.е. извлечение всех узлов заданного поддерева без обращения к рекурсивным процедурам.

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

INSERT INTO test1 (id, parent)

VALUES (<идентификатор узла>, <идентификатор родителя>);

Для перемещения узла к другому родителю следует выполнить команду UPDATE:

UPDATE test1

SET parent = <идентификатор нового родителя>

WHERE id = <идентификатор перемещаемого узла>;

Удаление узла и всего поддерева осуществляется с помощью команды DELETE:

DELETE FROM test1

WHERE id = <идентификатор удаляемого узла>;

Очевидно, что при такой организации таблицы, с помощью одного SQL запроса можно извлечь только определенное число дочерних уровней. Ниже приведен запрос, который извлекает идентификаторы всех потомков для узла, заданного параметром Р:

SELECT id

FROM

test1

WHERE

parent = :P

Если мы хотим узнать список потомков для всех потомков узла Р, то запрос следует переписать следующим образом:

SELECT t1.id

FROM

test1 t1 JOIN test1 t2

ON t1.parent = t2.id

WHERE

t2.parent = :P
      1. ^

        Модули занесения и редактирования СВЕДЕНИЙ БД


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

prochee.php – отвечает за вывод и постройку в браузере страницы с необходимыми полями для работы;

req.php – отвечает за выборку и подкачку данных на созданную страницу с помощью prochee.php .



Рисунок 5. Добавление информации об оборудование


Модуль построения web-страницы.модуль выборки и подкачки данных использует объект JsHttpRequest. Его интерфейс практически не отличается от интерфейсов Firefox-овского XMLHttpRequest или IE-шного Microsoft.XMLHTTP.

После построение интерфейса, введенные данные передаются функции: function doload(value), расположенной в файле: req.php. При введение данных само вычисление происходит на сервере, а браузер лишь обращается к последнему за данными, используя объект JsHttpRequest.

После получения ответа от сервера у объекта req появляются следующие свойства:

  • responseJS: данные произвольной структуры (например, многомерные массивы), сгенерированные загрузчиком.

  • responseText: прочие данные и сообщения об ошибках.

Все эти данные передаются обратно объекту prochee.php и выводтся нужном поле web-страницы на экран. (ПРИЛОЖЕНИЕ 1, п.1, 2)
^

3.2.3. Механизм ГРАФИЧЕСКОГО ОТОБРАЖЕНИЯ СЕТИ


Модуль графического отображения состоит из пяти отдельных составляющих.

Img.php – главный часть, отвечающая за прорисовку карты сети.

Per.php – переменный модуль, отвечающий за выборку информации из БД об активных пользователях и занесения данной информации в соответствующие временные переменные, для дальнейшей работы с ними главного модуля прорисовки и отображения карты сети.

^ Alt.php – временная переменная для хранения названия каждого дома, и информации о находящихся сейчас с дома активных пользователей.

Coord.php – временная часть для хранения координат.

Poly.php – также временная переменная, а точнее массив как и все выше описанные временные файлы, с хранящейся внутри информации о цвете дома.



Рисунок 6. Схема участка города с обозначенными подключенными домами и расположенным оборудованием


Содержит функции работы с файлами выборки и занесения требуемых данных из/в БД, обнуления временных переменных, возвращения числовых и строковых ключей. Помимо этих функций используемых в каждом модуле в главной части используются модули прорисовки линий и объектов используя библиотеку GD для работы с графикой, такие как:

imagecreatetruecolor() - возвращает идентификатор чёрно-белого изображения размером x_size на y_size;

imagecolorallocate() - возвращает идентификатор цвета, представляющий цвет, составленный из данных RGB-компонентов;

imagepolygon() - создаёт многоугольник на изображении;

imagefilledpolygon() - создаёт заполненный многоугольник на изображении image;

imagepng() - выводит GD-поток изображения (image) в формате PNG на стандартный вывод (обычно в браузер) или, если задано имя файла аргументом filename, в файл;

imagedestroy() - освобождает память, ассоциированную с изображением image. image это идентификатор изображения, возвращённого функцией imagecreate().

Принцип работы модуля заключается в следующих аспектах.

При обращении прорисовки карты вызывается главная часть для прорисовки карты на основе данных полученных от переменного модуля. Прорисовка происходит благодаря внесенным в базу координат каждого дома и дорог. Рисование карты города основывается за взятый в качестве точки опоры объект дороги. Отталкиваясь от дорог, происходит вывод каждого дома в отдельности. Каждый объект рисуется за счет функции создания многоугольников на изображении. При этом переменный модуль выбирает из базы данных полученные сведения от модуля мониторинга о находящихся сейчас в сети активных адресов и на основе полученных сведений производит выборку сведений IP-адресс > адрес фактический > номер договора. В зависимости от всех собранных сведений каждый дом зарисовывается отдельным цветом в зависимости от количества активных в нем адресов.

Переменный модуль использует временные переменные, являющиеся массивом для хранения сведений необходимых для работы главной части. (ПРИЛОЖЕНИЕ 1, п.3, 4)
^

3.2.4. Механизм мониторинга сети


Модуль мониторинга сети реализован, как и все остальные модули на языке PHP (Рис. 6). Содержит функции выборки и занесения требуемых данных из/в БД, обнуления временных переменных, возвращения числовых и строковых ключей, а также вызов внешних команд.

Синтаксис используемых функций:

mysql_query() - отправляет запрос текущей активной БД на сервере, ассоциированной со специфицированным идентификатором ссылки/link_identifier. Если link_identifier не специфицирован, принимается последняя открытая ссылка. Если такой ссылки нет, функция пытается установить ссылку, как при вызове mysql_connect() без аргументов, и использует её;

mysql_fetch_array() - это расширенная версия mysql_fetch_row(). Помимо сохранения данных в числовых индексах результирующего массива, она также хранит данные в ассоциативных индексах, используя в качестве ключей имена полей;

mysql_num_rows() - возвращает количество рядов в результирующем наборе. Эта команда верна только для операторов SELECT. Для запрашивания количества рядов, задействованных в запросах INSERT, UPDATE или DELETE, используйте mysql_affected_rows();

sort - Функция sort() предназначена для сортировки массивов в порядке возрастания.



Рисунок 7. Мониторинг отдельно одной из подсети


При запуске данного модуля первоначально производится выборка всех имеющихся на данный момент в БД IP-адресов сканируемой подсети, с последующим присвоением им статуса «Off». В дальнейшем осуществляется выполнение сторонней программы arpdig на выявление откликов от эхо-запроса пользователей, находящихся в активном режиме. В результате, чего получив строковую переменную, сортируем запись на поле IP в массив и проверяем соответствие IP на наличие в БД. По завершению данного цикла производится выборка из базы ip_online IP-адресов, со статусом «On» для сравнения находящихся уже адресов доступных и только, что появившихся в сети. После чего весь цикл повторяется с точностью наоборот, для адресов отключившихся от сети.

Для автоматического запуска модуля с интервалом в 5 минут, он добавлен планировщик задач nncron. (ПРИЛОЖЕНИЕ 1, п.5)

Заключение


В ходе работы была разработана и реализована система для учета и контроля работоспособностей коммутаторов городской локальной сети. Был подробно рассмотрен вопрос необходимой функциональности системы, выбрана архитектура системы, разработана структура данных.

На первом этапе были определены основные задачи, которые должна решать система:

- учет оборудования;

- система мониторинга ЛВС;

- предоставление доступа к интерфейсу.

Далее, исходя из задач, была определена минимальная функциональность:

  • хранение информации об оборудовании;

  • возможность производить систему мониторинга сети;

  • предоставление доступа к наглядному интерфейсу для работы с данными;

  • предоставление к наглядному отображению этих данных на странице в виде карты города.

После определения задач и функциональности были рассмотрены наиболее приемлимые архитектура и структура данных.

И на заключительном этапе были выбраны средства разработки и с их помощью программно реализована система. Наиболее подходящим для решения поставленной цели, было определено, что средство быстрой разаработки приложений сочетание PhP и MySQL на платформе FreeBSD.

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

^

список использованной литературы


      1. Вишневский, В.М. Теоретические основы проектирования компьютерных сетей / В.М. Вишневский – Москва : Техносфера, 2003. – 3с.

      2. В. Г. Олифер, Н. А. Олифер. Компьютерные сети. Принципы, технологии, протоколы – Питер, 2003 г. · 864 стр.

      3. Л. Томсон, Л. Веллинг - Разработка Web-приложений на РНР и MySQL – ДиаСофтЮП, 2003 г. - 672 стр.

      4. Максим Столяров, Илья Трифаленков. “На пути к управляемым информационным системам” http://www.jetinfo.ru

      5. Мартин Грабер (Martin Gruber). “Понимание SQL” Пер. с англ. М.: Бином; Научная книга, 1995 год, 384 с.

      6. Д.Боуман, C.Эмерсон, М.Дарновски “Практическое руководство по SQL” Изд. “Диалектика” Киев 1997 год, 235 с.

      7. Кузнецов Максим, Симдянов Игорь MySQL на примерах. — Спб.: «БХВ-Петербург», 2007. — С. 952.

      8. Кузнецов Максим, Симдянов Игорь MySQL 5. В подлиннике. — Спб.: «БХВ-Петербург», 2006. — С. 1024.

      9. Кузнецов Максим, Симдянов Игорь, Голышев Сергей PHP 5 на примерах. — Спб.: «БХВ-Петербург», 2005. — С. 576.

      10. Форумы ЦИТ - Режим доступа: http://forum.citforum.ru/

Русский сайт по MySQL - Режим доступа:http://www.mysql.ru/
^

Приложение 1

ЛИСТИНГ программы


1. Исходный код построения web-интерфейса для внесения данных prochee.php

<?php

switch (TRUE){

…….


case ($prochee=="add_yash"):

echo "Добавить ящик

<meta http-equiv=\"content-type\" content=\"text/html;charset=windows-1251\">

<script src=\"./../js/JsHttpRequest.js\"></script>

<script>

function doload(value){

var req=new JsHttpRequest();

req.onreadystatechange=function(){

if(req.readyState==4) document.getElementById(\"result\").innerHTML=req.responseText;}

req.open(null,\"req.php\",true);req.send({gorod_yash:value});} </script>


<script>

function doload1(value){

var req=new JsHttpRequest();

req.onreadystatechange=function(){

if(req.readyState==4) document.getElementById(\"result1\").innerHTML=req.responseText;}

req.open(null,\"req.php\",true);req.send({street_yash:value});} </script>


<form name=\"yash_add\" method=\"post\" action=\"?vivod=prochee&prochee=added_yash\"><table>

<tr><td>Место Установки</td></tr>

<tr><td>

<select name=\"gorod_yash\" onchange=\"doload(this.value);\">

<option value=\"no\" selected>Город</option>

<option value=\"1\">Апатиты</option>

<option value=\"2\">Кировск</option>

</select>

<div id=\"result\"></div>

</td></tr>

<tr><td>№Подъезда </td><td><input type=\"text\" name=\"pod\" size=\"15\"></td></tr>

<tr><td>Тип</td><td><select name=\"tip\">

<option value=\"1\">$yash_tip[1]</option>

<option value=\"2\" selected>$yash_tip[2]</option>

<option value=\"3\">$yash_tip[3]</option>

<option value=\"4\">$yash_tip[4]</option>

</select>

<tr><td>Координаты </td><td> <textarea name=\"coords\" cols=\"30\" rows=\"3\"></textarea></td></tr>

<tr><td>Запитка </td><td> <textarea name=\"pitanie\" cols=\"30\" rows=\"3\"></textarea></td></tr>

<tr><td>Примечание </td><td> <textarea name=\"prim\" cols=\"30\" rows=\"3\"></textarea></td></tr>

</td></tr></table>

<input type=\"submit\" name=\"Submit\" value=\"Внести\">

</form>

";

break;


case ($prochee=="added_yash"):

if (empty($_POST['dom'])): $dom_id=""; else: $dom_id=(int)$_POST["dom"]; endif;

if (empty($_POST['pod'])): $pod=""; else: $pod=(int)$_POST["pod"]; endif;

if (empty($_POST['pitanie'])): $pitanie=""; else: $pitanie=$_POST["pitanie"]; endif;

if (empty($_POST['tip'])): $tip=""; else: $tip=(int)$_POST["tip"]; endif;

if (empty($_POST['coords'])): $coords=""; else: $coords=$_POST["coords"]; endif;

if (empty($_POST['prim'])): $prim=""; else: $prim=$_POST["prim"]; endif;

mysql_query("INSERT INTO yashik (`dom_id`, `podezd`, `pitanie`, `tip`, `prim` , `coords`)

VALUES ('$dom_id', '$pod', '$pitanie', '$tip', '$prim', '$coords')") or die ("Insrt trabla 32456");

echo "Добавили ящик";

break;


……..

}

?>

2. Исходный код части подкачки - req.php

#Запрос по город-ящики

if ($_REQUEST["gorod_yash"]!=""){

$gorod=$_REQUEST["gorod_yash"];

$html="

<select name=\"street_yash\" onchange=\"doload1(this.value);\">

<option value=\"all\">Улица</option>";

$str=mysql_query("SELECT id, name FROM street WHERE gorod_id='$gorod'");

$str_num = MYSQL_NUM_ROWS($str);

for ($i=0;$i<$str_num;$i++){

$street=mysql_fetch_array($str);

$html.="

<option value=\"$street[id]\">$street[name]</option>"; }

$html.="</select>

<div id=\"result1\"></div> "; }


#Запрос по улица-ящик

if ($_REQUEST["street_yash"]!=""){

$street_id=$_REQUEST["street_yash"];

$html="

<select name=\"dom\">

<option value=\"all\">Дом</option>";

$str=mysql_query("SELECT id, num FROM dom WHERE street_id='$street_id'");

$str_num = MYSQL_NUM_ROWS($str);

for ($i=0;$i<$str_num;$i++){

$dom=mysql_fetch_array($str);

$html.="

<option value=\"$dom[id]\">$dom[num]</option>"; } }

3. Исходный код главной части - img.php

<?php

include("poly.php");

include("./../../include/config.inc.php");

$del="2";

$W=2836/$del;

$H=1800/$del;

function DrawIllustratorFile($im,$filename,$maxw,$maxh,$color) {

^ GLOBAL $W,$H;

$coords=$filename[coords];

if (count($coords)==1) {$d=split('[LlmCc]',$coords);}

$poly=Array();$poly_alt=Array();

for ($i=0;$i<count($d);$i++)

if (eregi("([0-9.]+) ([0-9.]+) ",$d[$i],$r)) {

$poly[]=$r[1];

$poly[]=$r[2]; }

for ($i=0;$i<count($poly);$i+=2) {

$poly[$i]/=$maxw;

$poly[$i+1]/=$maxh;

$poly[$i]*=($W-10);

$poly[$i+1]*=($H-10);

$poly[$i+1]=$H-$poly[$i+1]; }

imagefilledpolygon($im, $poly, count($poly)/2, $color);

imagepolygon($im, $poly, count($poly)/2, $color["black"]); }

$d=file("full.ai");

if (count($d)==1) $d=explode("\r",$d[0]);

$maxw=$maxh=0;

for ($i=0;$i<count($d);$i++)

if (eregi("([0-9.]+) ([0-9.]+) [lLmCcVvYy]",$d[$i],$r)) {

if ($maxw<$r[1]) $maxw=$r[1];

if ($maxh<$r[2]) $maxh=$r[2]; }


$points=Array(); $num=-1;

for ($i=0;$i<count($d);$i++) {

if (eregi("([0-9.]+) ([0-9.]+) [m]",$d[$i],$r)) {

$num++; $points[$num][]=$r[1]; $points[$num][]=$r[2]; }

if (eregi("([0-9.]+) ([0-9.]+) [lCc]",$d[$i],$r)) {

$points[$num][]=$r[1]; $points[$num][]=$r[2]; } }


$im = imagecreatetruecolor($W, $H);

$bg = imagecolorallocate($im, 255, 255, 255);

imagefilledrectangle($im,0,0,imagesx($im),imagesy($im),$bg);

$ink=imagecolorallocate($im,0,0,0);


for ($j=0;$j<count($points);$j++) {

$poly=Array();

for ($i=0;$i<count($points[$j]);$i+=2) {

$x=$points[$j][$i]; $y=$points[$j][$i+1]; $x=$x/$maxw;

$y=$y/$maxh; $x=$x*($W-10); $y=$y*($H-10); $y=$H-$y;

$poly[]=$x; $poly[]=$y; }

imagepolygon($im, $poly, count($poly)/2, $ink); }

$color=Array(); $color["black"]=$ink; $color[0]=imagecolorallocate($im,0,0,255);

$q=mysql_query("SELECT dom.id, dom.coords FROM dom WHERE dom.coords IS NOT NULL");

$num_q= MYSQL_NUM_ROWS($q); for ($i=0;$i<$num_q;$i++){

$files=mysql_fetch_array($q); $co="$files[id]";

if ($col[$co]=="1"){ $color[0]=imagecolorallocate($im,0,140,0);}

if ($col[$co]=="2"){ $color[0]=imagecolorallocate($im,0,180,0);}

if ($col[$co]=="3"){ $color[0]=imagecolorallocate($im,0,200,0);}

if ($col[$co]=="4"){ $color[0]=imagecolorallocate($im,0,220,0);}

if ($col[$co]=="green"){ $color[0]=imagecolorallocate($im,0,255,0);}

if ($col[$co]=="red"){ $color[0]=imagecolorallocate($im,220,220,220);}

DrawIllustratorFile($im,$files,$maxw,$maxh,$color[0]); }

imagepng($im);

imagedestroy($im);

?>

4. Исходный код переменной части - per.php

<?php

include("./../../include/config.inc.php");

$file=array();

$file[poly]=fopen("poly.php","w");

$file[alt]=fopen("alt.php","w");

fwrite($file[poly],"<?php

\$col=array(); ");

fwrite($file[alt],"<?php

unset(\$alt);

\$alt=array(); ");


$q=mysql_query("SELECT dom.id, dom.coords, dom.num, street.name FROM dom, street WHERE dom.coords IS NOT NULL AND street.id=dom.street_id");

$num_q= MYSQL_NUM_ROWS($q);


for ($i=0;$i<$num_q;$i++){

$q_=mysql_fetch_array($q);

$domid=$q_[id];

unset($alt);

$alt="\$alt[$domid]=\"$q_[name] - $q_[num]";

$col="red";

$z_q=mysql_query("SELECT zayav.num, zayav.fam, zayav.date_za, dom.num AS dom, dom.id AS dom_id

FROM zayav, dom WHERE zayav.dom_id='$domid' AND dom.id='$domid'

AND (zayav.date_podkl='' OR zayav.date_podkl is NULL) AND zayav.otkaz IS NULL");

$num_z= MYSQL_NUM_ROWS($z_q);

if ($num_z==1){$col="1";} if ($num_z==2){$col="2";}

if ($num_z==3){$col="3";}

if ($num_z==4){$col="4";} if ($num_z>=5){$col="green";}

if ($num_z<=0){ $u_onl="0";}

for ($ii=0; $ii<$num_z; $ii++) {

$zay=mysql_fetch_array($z_q);

$alt.="$zay[num] - $zay[fam] ( $zay[date_za] )";}


fwrite ($file[poly],"\$col[$domid]=\"$col\";");

$alt.="\";";

fwrite ($file[alt],$alt);}


fwrite($file[alt],"?>");

fwrite($file[poly],"?>");

fclose($file[poly]);

fclose($file[alt]);

?>

5. Исходный код модуля мониторинга сети - onl_full.php

<?php

include("./config.inc.php");

$t_date=date('Y-m-d H:i:s');

$net=array(0,4,8,12,16,20,24,28,32,36,40,48);

$A=count($net);


for ($i=0; $i<$A; $i++){

unset($ip);unset($ip_all);unset($ipp);unset($counter);unset($n_off);

$nett=$net[$i];

if ($nett<="9"){$vlan="10$nett";} else {$vlan="1$nett";}


//выборка всех ip из базы

$q=mysql_query("SELECT ip FROM ip WHERE `netw`='$nett'");

$ip_num = MYSQL_NUM_ROWS($q); echo "IP в подсети ($nett) $ip_num\r\n";


// Присваиваем всем IP из базы статус OFF

$ip_all=array(0);

for ($ii=0; $ii<$ip_num; $ii++){

$q_=mysql_fetch_array($q);

$ip=$q_[ip];

$ip_all[]=$ip; }


//запуск выполнеия пинга подсети

$str=exec("/usr/local/bin/arpdig -n -i vlan$vlan -F 172.22.$nett.2 172.22.$nett.0/22",$ipp,$err);

$counter=count($ipp); $cnt=count($ip_all);


//сортируем запись на поле ip

for ($i2=2;$i2<$counter;$i2++){

$fields=explode(" ",$ipp[$i2]);

$ip=$fields[0];


//Проверяем IP на наличае в базе

unset($aaa);unset($aaaa);

$aaa= array_keys($ip_all,$ip);

$aaaa=$aaa[0];

if (!$aaaa){

}else{

//выбираем из базы IP Которые щас в Он

$q2=mysql_query("SELECT status FROM ip_online WHERE `ip`='$ip' ORDER BY id DESC LIMIT 1");

$ip2_num = MYSQL_NUM_ROWS($q2);


// если такие в базе ip_online есть

if ($ip2_num==1){

$q2_=mysql_fetch_array($q2);

$status=$q2_[status];


//заносим тех кто был off в базу online

if ($status=="off"){

mysql_query("INSERT INTO ip_online (`ip`, `status`, `last_date`) VALUES ('$ip', 'on', '$t_date')")); } }

else{

/esli net v baze takogo ip so statusom

mysql_query("INSERT INTO ip_online (`ip`, `status`, `last_date`) VALUES ('$ip', 'on', '$t_date')")); } }


//Удаляем из базы IP со статусом On

unset($ip_all[$aaaa]); }


$n_off=count($ip_all);

sort($ip_all);


for ($ii=0; $ii<$n_off; $ii++){

$ip=$ip_all[$ii];

$q3=mysql_query("SELECT status FROM ip_online WHERE `ip`='$ip' ORDER BY id DESC LIMIT 1");

$ip_num3 = MYSQL_NUM_ROWS($q3);

if ($ip_num3==1){

$q3_=mysql_fetch_row($q3);

$status=$q3_[0];

if ($status=="on"){

mysql_query("INSERT INTO ip_online (`ip`, `status`, `last_date`) VALUES ('$ip', 'off', '$t_date')"); } }

else{ //Инсерт в базу новых IP со сотутсом Офф

mysql_query("INSERT INTO ip_online (`ip`, `status`, `last_date`) VALUES ('$ip', 'off', '$t_date')"); } } }

?>

1   2   3   4   5



Скачать файл (840.5 kb.)

Поиск по сайту:  

© gendocs.ru
При копировании укажите ссылку.
обратиться к администрации