Как получить MAC-адрес клиента без использования activex - PullRequest
0 голосов
/ 30 июня 2011

Моя основная цель - дать каждому компьютеру, использующему веб-сайт, уникальный идентификатор, один из способов - найти mac-адрес клиента, но не используя activex, а также не может назначить идентификатор с помощью cookie, поскольку куки могут быть удалены также с использованием метода последнего изменения даты, поэтому любые идеи о том, как я мог бы назначить уникальный идентификатор, спасибо

Ответы [ 2 ]

1 голос
/ 03 сентября 2011

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

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

0 голосов
/ 03 октября 2013

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

Я использовал апплет и развернул егона компьютере клиента.

import java.applet.Applet;
import java.applet.Applet;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;


public class app extends Applet{

public String macAddr="";

public void init()
 {
    try
        {
            System.out.println("Start");
            InetAddress ip = InetAddress.getLocalHost();
            System.out.println((new StringBuilder("Current IP address:"+ip.toString())));
            NetworkInterface network = NetworkInterface.getByInetAddress(ip);
            byte mac[] = network.getHardwareAddress();
            System.out.println("mac : "+mac.toString());
            System.out.print("Current MAC address : ");
            StringBuilder sb = new StringBuilder();
            for(int i = 0; i < mac.length; i++)
                sb.append(String.format("%02X%s", new Object[] {
                        Byte.valueOf(mac[i]), i >= mac.length - 1 ? "" : "-"
                }));

            System.out.println(sb.toString());
            macAddr=String.valueOf(sb);
            System.out.println("okay good");

        }
     catch(SocketException e)

        {
            macAddr=e.toString();
            e.printStackTrace();
            System.out.println("not good");
        }
        catch (Exception e) {
            macAddr=e.toString();
            e.printStackTrace();
            System.out.println("bad good");
        }    
     }
       }

Проблема, с которой я столкнулся после создания этого апплета, состоит в том [что он работал нормально, когда я запускаю его на компьютере локально (запустить приложение)], но это не работаетРАБОТА НА СЕРВЕРЕ `` для этого вам нужно подписать свой jar

Keytool -genkey -alias signFiles -keystore compstore -keypass KEYPASS -dname "cn = XYZ" -storepass KEY-validity 125000 jarsigner -keystore compstore -storepass PASS -keypass KEYPASS appletname.jar signFiles

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

...