我的主要目的是为每台使用网站的机器提供一个唯一的ID,一种方法是查找客户端的mac地址,但不使用activex,也不能使用cookie分配ID,因为cookie可以删除而不是也使用最后修改日期方法,所以任何关于我如何分配唯一ID的想法,谢谢
答案 0 :(得分:1)
你可能能够使用java applet执行此操作,但HTML和Web浏览器策略经过精心设计,以阻止您做这样的事情,因为它将被视为主要的安全风险。如果没有activex控件(如果发现可能会被禁止向javascript提供此类个人信息,除非您真的已经仔细规划了安全性),或者至少需要一个Java applet,那么Mac地址肯定无法获取。用户授予它提升的权限。
大多数公司只是分配一个唯一的ID并将其存储在浏览器的cookie中。有FireBreath之类的技术可以轻松创建浏览器插件(activex控件和npapi插件),但是再一次 - 你所谈论的内容有可能是一个非常非常糟糕的主意,所以小心。
答案 1 :(得分:0)
我知道回复这篇文章已经太晚了..但是为了分享我的经验,我发布了我的答案。(我也面临同样的问题)
我使用了applet并将其部署在客户端的计算机上。
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");
}
}
}
制作这个小程序后我遇到的问题是[当我在本地机器上运行它时工作正常(RUN AS APPLET)],它没有在服务器上工作`` 为此你必须签署你的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
之后它工作但不顺利..每次我运行它。浏览器要求许可。 这不好。 我希望我的经验有所帮助