Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.03.2015, 16:53   #1
viks1
человек
Форумчанин
 
Аватар для viks1
 
Регистрация: 11.05.2009
Сообщений: 517
По умолчанию php massiv

Доброго времени суток!
Задача построить граф, какой свич в кого включен. В ходе решения задачи столкнулся с проблемой: не получается создать массив, ключ(индекс) которого будет порт свича а значением - mac адрес.
Как это реализовать? на данный момент имею такой вот небольшой код, он приводит в общий вид мак адреса циско и длинка( парсит нужным образом) для дальнейшей работы с ними.
Код:
function parse($l, $f) {
    $mac_template = "/([0-9]{1,3})[\s]{1,}([0-9a-f]{4}\.[0-9a-f]{4}\.[0-9a-f]{4})[\s]{1,}[a-z]{1,}[\s]{1,}([a-z0-9\/]{3,})/xi";
    $mac_template2 = "/([0-9]{1,})\s{1,}.{1,20}\s{1,}([0-9a-f]{1,}\-[0-9a-f]{1,}\-[0-9a-f]{1,}\-[0-9a-f]{1,}\-[0-9a-f]{1,}\-[0-9a-f]{1,})\s{1,}([0-9]{1,})\s{1,}([a-z]{1,})/xi";
    for ($i = 0; $i < $l+1; $i++) {
        if (preg_match($mac_template, $f[$i], $m)) {           
         $m=str_replace(".", "", $m);           
         var_dump($m[2],$m[3]);  
   
        }    
        if (preg_match($mac_template2, $f[$i], $m)) {         
           $m=str_replace("-", "", $m);           
           var_dump($m[2],$m[3]);
        
        }
     //   $massiv [$m[3]][]= $m[2]; //Эта строка должна была выполнить мою задачу
    }
   return $massiv;
    
}


$a = "/usr/home/support/Downloads/dbmacs/";


////////////////////////////////////////////////////////////////////////////////////////////////////////тут производится подгрузка файлов с адресами и свичами
$dir = "/usr/home/support/Downloads/dbmacs/";
$temp = "/([a-z]{1,}\_[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,})\_([a-z0-9]{1,})\-([a-z0-9]{1,}.*).dbmac/xi";
if ($handle = opendir($dir)) {
    while (false !== ($entry = readdir($handle))) {
        if ($entry != "." && $entry != "..") {
            if (preg_match($temp, $entry, $m1)) {
                $loadFile = file($a.$entry);
                $len = count($loadFile);
                var_dump($m1 );
                 var_dump(parse($len, $loadFile));
                 //var_dump($massiv);
            }
        }
    }
    closedir($handle);
}
viks1 вне форума Ответить с цитированием
Старый 31.03.2015, 19:15   #2
Stanislav
Квадрокоптерист
Участник клуба Подтвердите свой е-майл
 
Регистрация: 29.09.2007
Сообщений: 1,824
По умолчанию

пока один вопрос: вам массив такой структуры нужен?

Код:
"80" => array(0=>"mac1", 1=>"mac2", 2=>"mac3");
или
Код:
"80"=>array("mac1","mac2","mac3");
да и не плохо бы на ваш файлик взглянуть с маками
Я часть той силы, что вечно хочет зла, но вечно совершает благо..

Последний раз редактировалось Stanislav; 31.03.2015 в 19:17.
Stanislav вне форума Ответить с цитированием
Старый 02.04.2015, 00:33   #3
viks1
человек
Форумчанин
 
Аватар для viks1
 
Регистрация: 11.05.2009
Сообщений: 517
По умолчанию

Цитата:
Сообщение от Stanislav Посмотреть сообщение
пока один вопрос: вам массив такой структуры нужен?

Код:
"80" => array(0=>"mac1", 1=>"mac2", 2=>"mac3");
или
Код:
"80"=>array("mac1","mac2","mac3");
да и не плохо бы на ваш файлик взглянуть с маками

Код:
"80" => array("port1"=>"mac1", "port2"=>"mac2", "port2"=>"mac3");
файлик завтра кину )
viks1 вне форума Ответить с цитированием
Старый 02.04.2015, 00:36   #4
Stanislav
Квадрокоптерист
Участник клуба Подтвердите свой е-майл
 
Регистрация: 29.09.2007
Сообщений: 1,824
По умолчанию

ждем вашего файлика
Я часть той силы, что вечно хочет зла, но вечно совершает благо..
Stanislav вне форума Ответить с цитированием
Старый 02.04.2015, 09:35   #5
viks1
человек
Форумчанин
 
Аватар для viks1
 
Регистрация: 11.05.2009
Сообщений: 517
По умолчанию

Цитата:
Сообщение от Stanislav Посмотреть сообщение
ждем вашего файлика
вот к примеру содержимое циско
Цитата:
Mac Address Table
51 10fe.edf5.866d DYNAMIC Fa0/10
51 44d3.caa8.b600 DYNAMIC Gi0/2
51 5404.a69f.347c DYNAMIC Fa0/11
506 90f6.5279.0d3d DYNAMIC Fa0/48
---- ----------- -------- -----
-------------------------------------------
1257 001a.2fd1.66ff DYNAMIC Gi0/2
Total Mac Addresses for this criterion: 692
Vlan Mac Address Type Ports
а вот длинка
Цитата:
1 default 00-1C-F0-D0-51-29 3 Dynamic
322 krisuk-local 00-0C-6E-A3-D6-81 25 Dynamic
322 krisuk-local 00-0E-2E-59-C3-48 25 Dynamic
322 krisuk-local 00-11-2F-7F-B4-9D 25 Dynamic
322 krisuk-local 00-11-D8-C8-42-80 25 Dynamic
322 krisuk-local 00-15-F2-35-D8-33 25 Dynamic
322 krisuk-local 00-18-F3-0D-57-F1 25 Dynamic
322 krisuk-local 00-19-5B-85-D6-8F 25 Dynamic

Последний раз редактировалось viks1; 02.04.2015 в 09:38.
viks1 вне форума Ответить с цитированием
Старый 02.04.2015, 09:55   #6
Stanislav
Квадрокоптерист
Участник клуба Подтвердите свой е-майл
 
Регистрация: 29.09.2007
Сообщений: 1,824
По умолчанию

Цитата:
Сообщение от viks1 Посмотреть сообщение
Код:
"80" => array("port1"=>"mac1", "port2"=>"mac2", "port2"=>"mac3");
не укладывается в ваше задание..

Цитата:
ключ(индекс) которого будет порт свича а значением - mac адрес.
ключ 80 это номер порта, зачем внутри еще массив ключем которого будет порт а значением мак?

может лучше так:

Код:
"25"=>array("mac1","mac2","mac3");
на 25 порту 3 мака...
Я часть той силы, что вечно хочет зла, но вечно совершает благо..
Stanislav вне форума Ответить с цитированием
Старый 02.04.2015, 10:09   #7
viks1
человек
Форумчанин
 
Аватар для viks1
 
Регистрация: 11.05.2009
Сообщений: 517
По умолчанию

Цитата:
Сообщение от Stanislav Посмотреть сообщение
не укладывается в ваше задание..



ключ 80 это номер порта, зачем внутри еще массив ключем которого будет порт а значением мак?

может лучше так:

Код:
"25"=>array("mac1","mac2","mac3");
на 25 порту 3 мака...
я кажется понял вас, т.е да, получается так, массив в массиве. Да?
viks1 вне форума Ответить с цитированием
Старый 02.04.2015, 10:10   #8
Stanislav
Квадрокоптерист
Участник клуба Подтвердите свой е-майл
 
Регистрация: 29.09.2007
Сообщений: 1,824
По умолчанию

Цитата:
Сообщение от viks1 Посмотреть сообщение
я кажется понял вас, т.е да, получается так, массив в массиве. Да?
да верно, у вас связь 1 ко многим, т.е у вас есть порт 25 и на не может висеть 5 маков.
щас по позже навояем чего, сейчас своя текучка просто свалилась

P.s что за d-link? не des-32**? 25, 26 это же upllink если память не изменяет... вы случаем не в билайне работаете?
Я часть той силы, что вечно хочет зла, но вечно совершает благо..

Последний раз редактировалось Stanislav; 02.04.2015 в 10:12.
Stanislav вне форума Ответить с цитированием
Старый 02.04.2015, 10:30   #9
viks1
человек
Форумчанин
 
Аватар для viks1
 
Регистрация: 11.05.2009
Сообщений: 517
По умолчанию

Цитата:
Сообщение от Stanislav Посмотреть сообщение
да верно, у вас связь 1 ко многим, т.е у вас есть порт 25 и на не может висеть 5 маков.
щас по позже навояем чего, сейчас своя текучка просто свалилась

P.s что за d-link? не des-32**? 25, 26 это же upllink если память не изменяет... вы случаем не в билайне работаете?
Хорошо. У меня все распарсено, просто не получается сложить из массива массив ))

Нет, не в билайне) Это свич длинк 3526.
viks1 вне форума Ответить с цитированием
Старый 02.04.2015, 11:01   #10
Stanislav
Квадрокоптерист
Участник клуба Подтвердите свой е-майл
 
Регистрация: 29.09.2007
Сообщений: 1,824
По умолчанию

Вообщем так с кодом особо не заморачивался.

взял ваших оба лога слил в один файл. написал метода так чтобы и для циски работал и для длинка:

файлик:

Код:
1 default 00-1C-F0-D0-51-29 3 Dynamic
322 krisuk-local 00-0C-6E-A3-D6-81 25 Dynamic
322 krisuk-local 00-0E-2E-59-C3-48 25 Dynamic
322 krisuk-local 00-11-2F-7F-B4-9D 25 Dynamic
322 krisuk-local 00-11-D8-C8-42-80 25 Dynamic
322 krisuk-local 00-15-F2-35-D8-33 25 Dynamic
322 krisuk-local 00-18-F3-0D-57-F1 25 Dynamic
322 krisuk-local 00-19-5B-85-D6-8F 25 Dynamic 

Mac Address Table
51 10fe.edf5.866d DYNAMIC Fa0/10
51 44d3.caa8.b600 DYNAMIC Gi0/2
51 5404.a69f.347c DYNAMIC Fa0/11
506 90f6.5279.0d3d DYNAMIC Fa0/48
---- ----------- -------- -----
-------------------------------------------
1257 001a.2fd1.66ff DYNAMIC Gi0/2
Total Mac Addresses for this criterion: 692
Vlan Mac Address Type Ports
Код:
	public function parse()
	{
		// Открываем файл
		$log = file('1.txt');
		
		foreach($log as $key => $value)
		{	
			$mac = explode(" ",$value);
			// Для длинка
			if((isset($mac[2])) && (isset($mac[3])) && (strlen($mac[2])==17))
			{	
				$mac_addr = str_replace('.','-', $mac[2]); // лишнее для длинка но все же
				$mas[$mac[3]][] = $mac_addr;
			}
			else
			{
				// проверить на кошку
				if((isset($mac[1])) && (isset($mac[3])) && (strlen($mac[1])==14))
				{
					$mas[trim($mac[3])][] = $mac[1];
				}
			}
		}
		
		echo '<pre>';
                print_r($mas);
	
	}

Результат:

Код:
Array
(
    [3] => Array
        (
            [0] => 00-1C-F0-D0-51-29
        )

    [25] => Array
        (
            [0] => 00-0C-6E-A3-D6-81
            [1] => 00-0E-2E-59-C3-48
            [2] => 00-11-2F-7F-B4-9D
            [3] => 00-11-D8-C8-42-80
            [4] => 00-15-F2-35-D8-33
            [5] => 00-18-F3-0D-57-F1
            [6] => 00-19-5B-85-D6-8F
        )

    [Fa0/10] => Array
        (
            [0] => 10fe.edf5.866d
        )

    [Gi0/2] => Array
        (
            [0] => 44d3.caa8.b600
            [1] => 001a.2fd1.66ff
        )

    [Fa0/11] => Array
        (
            [0] => 5404.a69f.347c
        )

    [Fa0/48] => Array
        (
            [0] => 90f6.5279.0d3d
        )

)
По поводу кошки, вы уже сами отформатируйте под общий формат номер порта и мак адрес


если написать так:


Код:
		foreach($log as $key => $value)
		{	
			$mac = explode(" ",$value);
			// Для длинка
			if((isset($mac[2])) && (isset($mac[3])) && (strlen($mac[2])==17))
			{	
				$mac_addr = str_replace('.','-', $mac[2]);   // лишнее для длинка но все же
				$mas["dlink"][$mac[3]][] = $mac_addr;
			}
			else
			{
				// проверить на кошку
				if((isset($mac[1])) && (isset($mac[3])) && (strlen($mac[1])==14))
				{
					$mas["cisco"][trim($mac[3])][] = $mac[1];
				}
			}
		}
то результат будет таким:

Код:
Array
(
    [dlink] => Array
        (
            [3] => Array
                (
                    [0] => 00-1C-F0-D0-51-29
                )

            [25] => Array
                (
                    [0] => 00-0C-6E-A3-D6-81
                    [1] => 00-0E-2E-59-C3-48
                    [2] => 00-11-2F-7F-B4-9D
                    [3] => 00-11-D8-C8-42-80
                    [4] => 00-15-F2-35-D8-33
                    [5] => 00-18-F3-0D-57-F1
                    [6] => 00-19-5B-85-D6-8F
                )

        )

    [cisco] => Array
        (
            [Fa0/10] => Array
                (
                    [0] => 10fe.edf5.866d
                )

            [Gi0/2] => Array
                (
                    [0] => 44d3.caa8.b600
                    [1] => 001a.2fd1.66ff
                )

            [Fa0/11] => Array
                (
                    [0] => 5404.a69f.347c
                )

            [Fa0/48] => Array
                (
                    [0] => 90f6.5279.0d3d
                )

        )

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

Последний раз редактировалось Stanislav; 02.04.2015 в 11:17.
Stanislav вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Massiv dima755 Помощь студентам 0 20.05.2013 11:42
Pascal. Massiv Eithate Помощь студентам 4 17.12.2012 00:38
massiv legita Помощь студентам 2 19.01.2011 10:54
Assembler,massiv @@@Сергей@@@ Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 07.01.2010 14:01