как получить MAC-адрес клиента из HttpServlet?

Меня попросили написать сервлет, который собирает данные клиента, такие как ip, mac-адрес и т. Д.

получить его IP-адрес довольно просто (request.getRemoteAddr()), но я не нахожу элегантного способа получить его MAC-адрес.

кажется разумным, что веб-сервер имеет доступ к таким данным, как Mac-адрес и т. д., поскольку он получает пакеты TCP и все такое. эти данные где-то записываются? это доступно?

(Я работаю поверх Tomcat6)


person Amir Arad    schedule 08.05.2009    source источник


Ответы (5)


Вы, вероятно, не получите того, чего хотите. (MAC-адрес клиента)

Если сервер расположен достаточно близко (напрямую подключен через концентратор или, возможно, коммутатор), вы можете ARP для MAC-адрес. Если вы сделаете это для IP-адреса через Интернет, вы, вероятно, получите внутренний интерфейс ближайшего маршрутизатора или коммутатора.

Из-за того, как работает TCP / IP, MAC-адрес, используемый в «кадре», будет отрываться и повторно собираться на каждом этапе, когда информация проходит между сервером и хостом.

alt text

Инкапсуляция

person atom255    schedule 08.05.2009
comment
Перечитывая другие ответы, я согласен с тем, что если вы заставите компьютеры людей отказаться от своей внутренней конфигурации, вы сможете добиться большего, но я сомневаюсь, что какая-либо модель безопасности позволит это. То же, что и попытка получить чей-то внутренний IP-адрес, лучшее, что вы обычно можете сделать, - это получить маршрутизатор, который выполняет преобразование адресов. - person atom255; 08.05.2009
comment
@ atom225 Я не эксперт, но, посмотрев опубликованное вами изображение, я могу представить сценарий, в котором мы запрашиваем и отправляем MAC-адрес на уровне приложения. Что вы думаете о моей идее? - person ziMtyth; 31.10.2017

TCP / IP ... Вы не можете получить MAC-адрес, это слишком низкий уровень AFAIK

person ivmos    schedule 08.05.2009
comment
MAC доступен, однако не имеет значения, поскольку это, скорее всего, не сетевой адаптер клиента, а какой-то MAC ближайшего к серверу устройства. - person Tzury Bar Yochay; 11.01.2010

Это невозможно через класс HttpServlet.

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

person Steve Claridge    schedule 08.05.2009
comment
это так сложно: stackoverflow.com/questions/3385/mac-addresses -in-javascript - person user3600935; 22.04.2019
comment
Ты прав. Если клиент предоставит, они будут раскрывать свои данные, и нарушение безопасности будет несложным. Перед этим нужно провести надлежащие исследования и разработки. - person Satish Patro; 02.11.2019

Я считаю, что клиентам необходимо разрешить это в их JVM:

См. Эту ветку

person AndreiM    schedule 08.05.2009
comment
я предполагал, что клиентом будет браузер? - person Steve Claridge; 08.05.2009

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

есть код php, который намного лучше

<font color="black" face="courier new">
<b>mac/linux/android</b>(arp -an)<br>

<?php
$mac = system('arp -an');
echo $mac;
echo "<hr>";
?>
<b>mac/linux/android</b>(ifconfig)<br>
<?php
$macall = system('ifconfig');
echo $macall;
echo "<hr>";
?>
<b>pc/win</b>(ipconfig /all)<br>
<?php
$pc = system('ipconfig /all');
echo $pc;
echo "<hr>";
?>
</font>
person Akhil Sharma    schedule 15.09.2015
comment
Это не получит MAC от клиента; он получит MAC-адрес сервера. - person Haroldo_OK; 03.02.2016