读取客户端mac地址判断访问权限

一、用wmi读取本机的mac地址的ActiveX

using System;
using System.Runtime.InteropServices;
using System.Management;
namespace NGetid
{
    public interface Nst
    {
        string FGet();
        string GetHardDiskID();
    }
    [ClassInterface(ClassInterfaceType.AutoDual)]
    public class NGetClass : Nst
    {
        public string FGet()
        {
            return "Success";
        }
        public String GetHardDiskID()
        {
            string mac="";
            ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
            ManagementObjectCollection moc = mc.GetInstances();
            foreach (ManagementObject mo in moc)
            {
                if ((bool)mo["IPEnabled"] == true)
                 mac= mo["MacAddress"].ToString().Replace(":", "");
                mo.Dispose();
            }
            return mac;
        }
    }
}

编译为dll:  csc /t:library ngetclass.cs

在客户机安装: regasm ngetclass /tlb /codebase

二、服务器端接收mac地址,用ajaxpro进行验证返回验证结果

前台:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="getmac.aspx.cs" Inherits="getmac" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>读取Mac地址进行身份验证</title>
</head>
<body>
    <form id="form1" runat="server">
        <div id="top">
        您的网卡Mac地址为:
        <asp:TextBox ID="txtMacAddress" runat="server" Width="100px"></asp:TextBox>
        <asp:Label ID="lbAlert" runat="server" Width="100px">aaa</asp:Label>
        </div>
        <div id="login"  style="visibility:hidden">
            <asp:Button ID="Button1" runat="server" Text="登陆" />
		</div>
		<script type="text/javascript">
			var macAddress=document.getElementById("txtMacAddress");
			var x=new ActiveXObject("NGetid.NGetClass");
			var value=x.GetHardDiskID();
			macAddress.value=value;
			var v=getmac.checkmac(value).value;
                           var logindiv=document.getElementById("login");
			if(v=="ok")
			{
				logindiv.style.visibility = "visible";
				document.getElementById("lbAlert").innerText="验证通过";
			}
			else
			{
				logindiv.style.visibility = "hidden";
				document.getElementById("lbAlert").innerText="验证未通过";
			}
		</script>
    </form>
</body>
</html>
 

后台:

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class getmac : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        AjaxPro.Utility.RegisterTypeForAjax(typeof(getmac), this.Page);
    }
    [AjaxPro.AjaxMethod]
    public string  checkmac(string mac)
    {
        if (mac == "00E04CD67945")
        {
            return "ok";
        }
        else
        {
            return "error";
        }
    }
}

三、客户机需要把服务器的地址加入浏览器信任站点

由于没有数字签名,所以必须确认internet选项中允许未签名的activex,要不每次运行会出现确认窗口

四、运行效果

验证通过

验证未通过

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Java获取客户端MAC地址可以通过以下步骤实现: 1. 导入相关的Java类库:需要导入`java.net`包和`java.net.NetworkInterface`类。 2. 使用`NetworkInterface`类获取本机的网络接口列表,可以通过`NetworkInterface.getNetworkInterfaces()`方法实现。这个方法将返回一个枚举类型的网络接口,包含了所有的网络接口,如以太网卡、无线网卡等。 3. 遍历网络接口列表,获取本机的MAC地址。可以通过调用`NetworkInterface.getHardwareAddress()`方法来获取MAC地址的字节数组,之后将字节数组转换为十六进制字符串。 下面是利用Java代码实现的示例: ``` import java.net.*; import java.util.*; public class GetMacAddress { public static void main(String[] args) { try { Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces(); while (networkInterfaces.hasMoreElements()) { NetworkInterface networkInterface = networkInterfaces.nextElement(); byte[] mac = networkInterface.getHardwareAddress(); if (mac != null) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < mac.length; i++) { sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : "")); } System.out.println("MAC地址为:" + sb.toString()); } } } catch (SocketException e) { e.printStackTrace(); } } } ``` 以上代码会遍历本机的所有网络接口,获取到对应的MAC地址,并将其以十六进制字符串的形式输出。注意,可能会有多个网络接口,因此可能会输出多个MAC地址。 ### 回答2: 要使用Java获取客户端MAC地址,可以使用Java的网络编程库和系统命令。 一种方法是使用Java的网络编程库来获取客户端的IP地址,然后使用系统命令来获取与该IP地址关联的MAC地址。 首先,可以通过Java的InetAddress类的getLocalHost()方法获取本地IP地址。然后,通过使用NetworkInterface类的getByInetAddress()方法,传入上一步获取的IP地址,来获取与该IP地址关联的网络接口。 接下来,通过调用NetworkInterface类的getHardwareAddress()方法,即可获取MAC地址的字节数组。然后,可以将字节数组转换为十六进制字符串。 下面是示例代码: ```java import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.net.UnknownHostException; public class GetMacAddress { public static void main(String[] args) { try { InetAddress ip = InetAddress.getLocalHost(); NetworkInterface network = NetworkInterface.getByInetAddress(ip); byte[] mac = network.getHardwareAddress(); StringBuilder sb = new StringBuilder(); for (int i = 0; i < mac.length; i++) { sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : "")); } System.out.println("MAC Address: " + sb.toString()); } catch (UnknownHostException e) { e.printStackTrace(); } catch (SocketException e) { e.printStackTrace(); } } } ``` 注意,此示例中只是获取本地主机的MAC地址。如果要获取远程主机的MAC地址,需要使用不同的方法。 另外,获取MAC地址需要在有相应权限的情况下才能成功运行,特别是在某些操作系统中可能需要管理员权限。 ### 回答3: 在Java中获取客户端MAC地址的方式有两种:使用ARP命令或通过网络接口获取。 第一种方法是使用ARP命令。在Windows系统上,可以通过使用Java的Runtime类来执行系统命令获取客户端MAC地址。具体步骤如下: 1. 使用Runtime.getRuntime().exec()方法执行命令行命令"arp -a"。 2. 读取命令执行的输出流并解析,找到与本机IP地址对应的MAC地址。 第二种方法是通过网络接口获取。可以使用Java的NetworkInterface类来获取网络接口的信息。具体步骤如下: 1. 使用NetworkInterface.getNetworkInterfaces()方法获取所有网络接口的列表。 2. 遍历网络接口列表,找到符合条件的接口,如有IP地址且非回环接口。 3. 使用NetworkInterface.getHardwareAddress()方法获取MAC地址的字节数组。 4. 将字节数组转换为十六进制字符串表示。 需要注意的是,这两种方法都需要在具有相应权限的操作系统上运行。在某些情况下,可能无法获取MAC地址或需要额外的配置或权限。 综上所述,通过ARP命令或网络接口获取MAC地址是在Java中获取客户端MAC地址的常见方法。具体使用哪种方法取决于操作系统和环境的要求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值