如何确定并保存远程用户的MAC地址?

时间:2010-12-16 11:24:45

标签: java servlets mac-address

我正在使用代码

byte[] mac = ni.getHardwareAddress(); 
for (int i = 0; i < mac.length; i++) {
    System.out.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : "");

输出:00-27-0E-C2-53-B7

我需要将此输出存储在变量中,我需要一个查询来将其保存到MySQL数据库中。我还想在登录页面上自动获取MAC地址以及用户详细信息。

这样,我可以将用户的MAC地址及其用户名和密码存储在数据库中。我们的想法是,当用户登录时,我希望能够自动获取MAC地址以对用户进行身份验证。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

你问了很多问题。

  1. 您的Mac地址已存储在变量中。 Array mac []是一个数组变量。如果您需要单独的变量,请按以下方式定义:

    String myMac = mac [i];

  2. 在数据库中保存数据。我相信你已经在使用DB了。例如,对于exampel,您使用的是纯JDBC构造insertupdate SQL语句,如下所示: 插入UserData('mac')VAULUES(?)其中user_id =? 显然,具体字段取决于您的数据库架构。 如果您正在使用某个ORM系统,请询问有关此ORM的更具体问题。但在大多数情况下,这将更简单。例如,如果您已经有类User:

    类用户{     私有String用户名;     私有字符串密码;     //等 }

  3. ...只需在其中添加新字段mac:     class User {         私有String用户名;         私有字符串密码;         私有String mac;         //等     }

    如果您使用JPA,您的数据库架构将自动更新,数据也将保存在那里。

    1. 登录页面也一样。如果您已经有显示例如用户ID的登录页面,请为MAC
    2. 添加类似的代码 等等等......

答案 1 :(得分:0)

Python的禅宗说“简单比复杂更好。”

此代码来自SO用户Carles Barrobes

public String obtainMacAddress() throws Exception 
{
Process aProc = Runtime.getRuntime().exec("ipconfig /all");
InputStream procOut = new DataInputStream(aProc.getInputStream());
BufferedReader br = new BufferedReader(new InputStreamReader(procOut));

String aMacAddress = "((\\p{XDigit}\\p{XDigit}-){5}\\p{XDigit}\\p{XDigit})";
Pattern aPatternMac = Pattern.compile(aMacAddress);
String aIpAddress = ".*IP.*: (([0-9]*\\.){3}[0-9]).*$";
Pattern aPatternIp = Pattern.compile(aIpAddress);
String aNewAdaptor = "[A-Z].*$";
Pattern aPatternNewAdaptor = Pattern.compile(aNewAdaptor);

// locate first MAC address that has IP address
boolean zFoundMac = false;
boolean zFoundIp = false;
String foundMac = null;
String theGoodMac = null;

String strLine;
while (((strLine = br.readLine()) != null) && !(zFoundIp && zFoundMac)) {
    Matcher aMatcherNewAdaptor = aPatternNewAdaptor.matcher(strLine);
    if (aMatcherNewAdaptor.matches()) {
        zFoundMac = zFoundIp = false;
    }
    Matcher aMatcherMac = aPatternMac.matcher(strLine);
    if (aMatcherMac.find()) {
        foundMac = aMatcherMac.group(0);
        zFoundMac = true;
    }
    Matcher aMatcherIp = aPatternIp.matcher(strLine);
    if (aMatcherIp.matches()) {
        zFoundIp = true;
        if(zFoundMac && (theGoodMac == null)) theGoodMac = foundMac;
    }
}

aProc.destroy();
aProc.waitFor();

return theGoodMac;}

请注意,必须使用以太网或wifi连接才能运行上述内容。