Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Сеть > Как узнать MAC адрес


Автор: geek2600 14.6.2008, 22:09
Здравствуйте.Уважаемые участники форума, у меня следующий вопрос.
Для определения IP входящих на сайт компьютеров я использую следующий код:
Код

<?php
$filename = 'KLIENT-IP.log';
$_SERVER['REMOTE_ADDR'];
$PROXY;
$ip = &$_SERVER['REMOTE_ADDR'];
$LP = "\x0D\x0A";
$LD = " IN TIME : ";

// Вначале давайте убедимся, что файл существует и доступен для записи.
if (is_writable($filename)) {

    // В нашем примере мы открываем $filename в режиме "дописать в конец".
    // Таким образом, смещение установлено в конец файла и
    // наш $somecontent допишется в конец при использовании fwrite().
    if (!$handle = fopen($filename, 'a')) {
         echo "Не могу открыть файл ($filename)";
         exit;
    }

    // Записываем $somecontent в наш открытый файл.
    if (fwrite($handle, $ip) === FALSE) {
        echo "Не могу произвести запись в файл ($filename)";
        exit;
    }

    if (fwrite($handle, $LD) === FALSE) {
        echo "Не могу произвести запись в файл ($filename)";
        exit;
    }

$dt=date('Y-m-d [H:i:s]');
    if (fwrite($handle, $dt) === FALSE) {
        echo "Не могу произвести запись в файл ($filename)";
        exit;
    }

    if (fwrite($handle, $LP) === FALSE) {
        echo "Не могу произвести запись в файл ($filename)";
        exit;
    }

    fclose($handle);

} else {
    echo "Файл $filename недоступен для записи";
}
?>



Как мне сделать так, чтобы фиксировался не только IP входящего компьютера,но и MAC адрес?
Т.е. если компьютер имеет выход в интернет через локальную сеть.
Заранее благодарен.



M
MoLeX
Модератор: Я буду тебя очень благодарен, если будешь свой код соответсвенно оформлять. (включаем JS и жмем на кнопку КОД).

Автор: Feldmarschall 14.6.2008, 22:28
код - шедевр.
ответ на вопрос - никак.

Автор: geek2600 14.6.2008, 22:58
Я на оригинальность и идеальность кода не претендую.
Так , что действительно никак?

Автор: gta4kv 14.6.2008, 23:01
geek2600, действительно никак.

Автор: Feldmarschall 14.6.2008, 23:05
geek2600, напротив, код твой нереально оригинальный. Так что можешь смело претендовать.

Автор: geek2600 14.6.2008, 23:24
Feldmarschall, я хочу Вам задать вопрос не в тему вопроса.Скажите если человек выходит в интернет по вышеописанной схеме, и я пошлю ping на его интернет IP,куда пойдет мой IP пакет?Какому именно компьютеру?Я просто имею лишь поверхностное понятие о том как происходит маршрутизация пакета.
Заранее благодарен.

Автор: Feldmarschall 14.6.2008, 23:31
Куда пошлешь - туда и придет.

Автор: geek2600 14.6.2008, 23:56
немного не понял.В IP пакете есть поле содержащее MAC адрес?

Автор: Feldmarschall 15.6.2008, 00:06
Цитата(geek2600 @  14.6.2008,  23:56 Найти цитируемый пост)
немного не понял.

что ты не понял?
вот ты пишешь: "я пошлю ping на его интернет IP". "компьютер имеет выход в интернет через локальную сеть"
через какое место эта сеть выходит в интернет - в это место и придет твой пинг. разве это не очевидно?

Цитата(geek2600 @  14.6.2008,  23:56 Найти цитируемый пост)
В IP пакете есть поле содержащее MAC адрес?

нет

Автор: Glip 15.6.2008, 00:10
geek2600, http://ru.wikipedia.org/wiki/TCP/IP и http://ru.wikipedia.org/wiki/IP
нет там мак адреса, мак адрес это уже уровень ethernet (Канальный уровень)

Автор: geek2600 15.6.2008, 00:15
т.е. в пакете который отсылается в интернет MAC адре не содержится.Тогда как маршрутизатор опознает какому MAC чего пришло?

Автор: Glip 15.6.2008, 00:23
geek2600, для определения мак адресов есть протокол http://ru.wikipedia.org/wiki/ARP, но для начала маршрутизатор узнает IP адрес по таблице маршрутизации, если есть nat то еще и с учетом его.
учите матчасть. 
разговор уже на тему чисто сетевых технологий и к php не имеет отношения

Автор: geek2600 15.6.2008, 00:26
Спосибо большое!!!!Буду изучать.

Автор: Feldmarschall 15.6.2008, 01:05
а код, может, подправишь, все-таки?
чтобы эпохальная конструкция 
Код

    if (fwrite($handle, ХХХ) === FALSE) {
        echo "Не могу произвести запись в файл ($filename)";
        exit;
    }

вызывалась только один раз?

Автор: MuToGeN 18.6.2008, 10:06
Скажем так... Media Access Control (в сокращении - MAC) адрес используется для того, чтоб сетевой концентратор (хаб, свич, аксесспоинт итд) понимал, по какому каналу передавать пакет дальше, и не более того. MAC - это идентификатор железки, в которую воткнут кабель. Когда пакет минует очередной роутер, MAC адрес отправителя, указанный в пакете, становится MAC адресом роутера. Т.е. для того, чтоб узнать мак, тебе нужно иметь свою точку в одной подсети с тем, чей мак ты хочешь узнать.
А если вы физически в одной подсети, то arp -a.

Автор: MuToGeN 18.6.2008, 22:57
Цитата(Feldmarschall @  15.6.2008,  00:06 Найти цитируемый пост)
нет

Ответ неверный -) Конечно, если разложить все по модели OSI и отделить зерна от плевел, можно сказать, что его там нет. Попробуйте запустить что-то типа ethereal и посмотреть, что ходит по сети. В любом пакете 0-5 байт - мак отправителя, 6-11 байт - мак получателя. Это, кстати, одно из того немногого, что идет без контрольных сумм, на других слоях OSI уже есть как минимум проверка четности.

Автор: Sannis 18.6.2008, 23:30
MuToGeN, а вы возьмётесь реализовать это на PHP? Я конечно не местный, но что-то мне не верится smile

Автор: MuToGeN 19.6.2008, 00:01
Sannis, если бы мне за это заплатили, я бы взялся. Только и исключительно на PHP это сделать нереально, но никто не запрещает использование внешних инструментов.

Автор: gta4kv 19.6.2008, 00:11
MuToGeN, ну а вот тема у нас про PHP, так то понятно что можно smile

Автор: MuToGeN 19.6.2008, 00:18
gta4kv, в том и дело, что 80% людей, считающих себя гуру в пхп, о наличии каких-то внешних инструментов не догадывается в принципе.

Автор: gta4kv 19.6.2008, 00:46
MuToGeN, внешние средства не везде сможешь использовать.
Не у всех "считающих себя гуру в пхп" есть свои сервера. ;) или даже впсы.

Автор: Feldmarschall 19.6.2008, 00:50
Sannis, практическая ценность такого решения будет равна нулю.
Всё уже разжевали на предыдущей странице. Кто не понял - перечитайте ещё раз.

Автор: Sannis 19.6.2008, 01:20
Feldmarschall, да я в курсе, мой вопрос был для выяснения ответа MuToGeN'а ;)

Автор: Feldmarschall 19.6.2008, 01:24
Самое забавное, что - я сейчас посмотрел - он же и разжевывал. Вот в чем прикол.
В принципе, мотивы человека понять можно, я даже и отвечать не стал. А тут захожу - такая дискуссия.

Автор: MuToGeN 19.6.2008, 03:26
Sannis, тот, кто знает, когда вступать в битву и когда отступить, одержит победу. "Исскуство войны".
К чему это я...... 
Нет ничего невозможного. Просто нет, это аксиома. Можно сделать все, что пожелаешь. Есть какая-то умная философская мысль, но раньше чем завтра я ее не сформулирую.

Автор: Sannis 19.6.2008, 07:09
Разумеется. Только вы же не будете объяснять это каждому, кто с периодичностью раз в полгода приходит с вопросом про МАК, с вопросом о супербане etc., не имея при даже знаний в PHP, не говоря уже о влезании в код сервера для выхватывания начала пакета(я не в курсе, но мне кажется даже на более низком уровне). Сделать можно, но большинству это не по карману, так что лучше ответить "нет", зная что собеседник не собирается заказывать разработку, да и повторных вопросов будет меньше smile

Автор: Feldmarschall 19.6.2008, 10:06
Sannis, сделать нельзя. поставим уже точку в этой дискуссии. 
Ни дорого, ни дешево. Вообще никак.
Здесь вообще речь не о том. Не "можно ли определить", а "содержится ли в пакете". А что в нем содержится - см. выше.
Собственно, вся вторая страница к первоначальному вопросу никакого отношения не имеет, а представляет собой отвлеченный разговор о технологических тонкостях. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)