2023.05.09 - Mac地址的说明和相关概念

业务需求:网页怎么做到只能指定电脑来访问?

U盾(usb key)登录

​ 网站接入U盾需要使用相应的技术和标准。在中国,U盾一般采用国家密码管理局制定的SM2、SM3、SM4等密码算法和标准,用于加密和保护用户信息。网站接入U盾需要实现这些算法和标准,并与U盾进行通信和交互。

​ 一般情况下,网站提供U盾登录或交易功能的页面会提示用户插入U盾,并要求用户输入U盾密码等信息,然后通过与U盾进行通信来完成身份验证和数据交换。对于网站开发者来说,他们需要使用相应的技术和API来实现U盾的接入和使用。一些U盾厂商也提供相应的SDK和工具包,供网站开发者使用。

​ U盾的好处是它可以提供强大的身份验证和安全保护。它是一种加密设备,可以用于保护个人和敏感信息,例如电子邮件、银行账户、社交媒体账户等。U盾还可以用于进行数字签名,确保电子文档和交易的安全性和完整性。

但是,使用U盾也有一些麻烦之处。首先,U盾需要插入计算机或移动设备中,这可能需要一些额外的步骤和时间。其次,如果您忘记了U盾的密码或丢失了U盾,您将无法访问U盾中的信息。最后,有些网站和应用程序可能不支持U盾,这可能会使您无法登录或使用这些服务。

服务端限制Mac地址

实现

​ 在前端中获取访问电脑的 MAC 地址是不可行的,因为 JavaScript 运行在沙盒环境中,不能直接访问操作系统的底层硬件信息。

MAC 地址是数据链路层的地址,是用于在局域网中唯一标识一个网络设备的。在客户端通过浏览器访问服务器时,HTTP 请求会经过多个网络设备,这些设备之间的通信是通过数据链路层的协议进行的。因此,服务器可以获取到请求来源的 MAC 地址,但是客户端无法获取到自己的 MAC 地址。如果你需要获取访问电脑的唯一标识符来实现一些功能,可以考虑使用其他的技术方案,例如在客户端使用 Cookie 或者浏览器指纹等技术来标识用户。

以Java为例,可以使用Java的NetworkInterface类来获取用户的MAC地址。以下是一个示例代码:

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 ipAddress = InetAddress.getLocalHost();
            NetworkInterface networkInterface = NetworkInterface.getByInetAddress(ipAddress);
            byte[] macAddressBytes = networkInterface.getHardwareAddress();
            StringBuilder macAddressBuilder = new StringBuilder();
            for (int i = 0; i < macAddressBytes.length; i++) {
                macAddressBuilder.append(String.format("%02X%s", macAddressBytes[i], (i < macAddressBytes.length - 1) ? "-" : ""));
            }
            System.out.println("MAC Address: " + macAddressBuilder.toString());
        } catch (UnknownHostException | SocketException e) {
            e.printStackTrace();
        }
    }
}

这个代码片段将获取本地计算机的MAC地址并将其打印到控制台上。请注意,如果计算机上没有网络接口或者网络接口没有MAC地址,则此代码将抛出异常。

主机上如何获取Mac地址?

MacOS系统

在MacBook里查看自己电脑的MAC地址,可以按照以下步骤进行:

  1. 点击屏幕左上角的苹果图标,选择“关于本机”。

  2. 在弹出的“关于本机”窗口中,点击“系统报告”。

  3. 在“系统报告”窗口中,选择“网络”选项卡,在右侧的窗口中可以看到当前网络适配器的MAC地址。

另外,你也可以使用终端命令来查看MAC地址。打开终端(应用程序->实用工具->终端),输入以下命令:

ifconfig en0 | grep ether

其中en0是网络适配器的名称,根据不同的网络适配器名称可能会略有不同。执行命令后,终端会返回当前网络适配器的MAC地址。

window系统

在 Windows 系统下,获取电脑的 MAC 地址可以按照以下步骤进行:

  1. 打开“控制面板”,并进入“网络和 Internet” -> “网络和共享中心”。

  2. 在“网络和共享中心”窗口中,点击左侧面板中的“更改适配器设置”。

  3. 在“更改适配器设置”窗口中,找到你想要获取 MAC 地址的网络适配器,右键点击该适配器,选择“状态”。

  4. 在“状态”窗口中,点击“详细信息”按钮。在弹出的“网络连接详细信息”窗口中,你可以找到该网络适配器的 MAC 地址。

另外,你也可以使用命令行方式获取 MAC 地址。打开命令提示符窗口(按下 Win + R 键,在弹出的“运行”对话框中输入“cmd”并点击“确定”),输入以下命令:

ipconfig /all

执行命令后,你可以在输出结果中找到你想要获取 MAC 地址的网络适配器的物理地址(Physical Address)项,这就是该适配器的 MAC 地址。

其他方法

要实现这个功能,可以通过IP地址过滤或者用户代理字符串过滤来实现。

  1. IP地址过滤:可以通过服务器端的代码实现,只需要判断访问者的IP地址是否在指定的范围内,如果是,则允许访问,否则禁止访问。这种方法需要知道访问者的IP地址,而且IP地址可能会被伪造,不够安全。

  2. 用户代理字符串过滤:可以通过前端的代码实现,只需要判断访问者的浏览器类型或者操作系统类型是否符合指定的条件,如果是,则允许访问,否则禁止访问。这种方法不需要知道访问者的IP地址,但是也有可能被伪造。

需要注意的是,这两种方法都不是绝对安全的,只能起到一定的限制作用。如果需要更高的安全性,建议使用认证和授权机制来限制访问。

posted @ 2023-05-09 11:09  吕业浩  阅读(412)  评论(0)    收藏  举报