首页 > 其他分享 >基于网卡地址做设备指纹的优缺点

基于网卡地址做设备指纹的优缺点

时间:2023-06-09 15:33:19浏览次数:35  
标签:优缺点 地址 指纹 网卡 MAC 信息 line 设备

生成设备指纹的目的是为了能唯一地标识设备,而且这个标识在设备的生命周期内保持稳定。因此,在选择设备特征时,通常需要考虑这些特征的唯一性稳定性

  • 软件及配置信息一版不适合,是因为这类变化虽然不大,但万一变化后,设备指纹会变,影响使用。比如:
    • 操作系统信息:操作系统版本、安装日期、系统语言、系统时区等。
    • 配置信息:网络连接类型(WiFi或以太网)、网络运营商、屏幕分辨率、安装的字体、安装的应用程序等。
  • 硬件信息不容易变化,是我们生成设备指纹的首选。比如:
    • CPU型号、硬盘序列号、内存大小、图形处理器(GPU)信息、MAC地址等。

MAC地址做设备指纹的好处

基于网卡地址(MAC地址)做设备指纹的好处:

唯一性:

MAC地址通常在生产时就被硬编码到设备中,并且全世界范围内唯一。这使得它能作为一个很好的设备标识符。

易于获取:

在大多数操作系统中,都有相对简单的方式来获取MAC地址。

稳定性:

与IP地址相比,MAC地址不会因设备在网络中的位置变化而改变,除非用户手动修改或网络适配器被更换。

MAC地址做设备指纹的局限性

但它也有局限性:

用户可修改:

虽然MAC地址通常在硬件中硬编码,但在许多操作系统中,用户可以更改设备的MAC地址。如果用户更改了MAC地址,那么基于MAC地址的设备指纹就会改变。

设备有多个网卡:

如果一个设备有多个网络接口(例如,有线和无线),那么每个网络接口都会有一个不同的MAC地址。这可能会给基于MAC地址生成设备指纹带来困扰。比如要考虑下面问题:

  • 顺序问题,前后顺序是否会影响最终生成的指纹?
  • 多个哪些启用了,哪些没启用,需要考虑;
  • 多个里面的虚拟网卡地址变化的概率要大很多;

隐私和安全问题:

MAC地址可以用来追踪设备,这可能引发隐私和安全问题。为了避免这种情况,一些设备和操作系统提供了“MAC地址随机化”功能,这可能会影响基于MAC地址的设备指纹。

虚拟机和容器:

虚拟机和容器通常有自己的虚拟网络接口和MAC地址。这可能会干扰基于MAC地址的设备指纹。

总结

虽然基于MAC地址的设备指纹有一些局限性要考虑,但综合考虑,在大多数场景下,我们可以忽略这些。

常见问题

MAC地址可变性的应对方案

如果MAC地址可变,那么可能需要考虑使用其他更稳定、不易变化的设备特征。例如,设备的硬件配置(如CPU型号、硬盘序列号等)、操作系统信息(如操作系统版本、安装日期等)、设备配置(如屏幕分辨率、安装的字体等)等,这些信息通常比MAC地址更稳定,不容易被修改。

另外,也可以考虑使用一些复杂的设备指纹技术,这些技术通常会考虑设备的行为特性(如鼠标移动模式、键盘输入模式等)。这种方式可以在一定程度上抵抗设备特征的变化,但可能需要收集更多的数据,并可能面临更大的隐私和安全挑战。

需要注意的是,生成设备指纹并不是一个完美的解决方案,它总是在唯一性、稳定性、隐私和安全之间寻找平衡。在实际应用中,可能需要结合多种方法,并根据具体的需求和约束进行调整。

使用多种信息组合设备指纹的问题

使用多种信息进行设备指纹的生成,可能会碰到下面问题:

  • 增加指纹变化的风险:参与方越多,指纹越容易发生变化。
  • 隐私问题:设备指纹收集的信息越多,可能对用户的隐私侵入也越严重。这可能会引发用户的反感,也可能触犯某些地区的隐私法规。
  • 兼容性问题:不同的设备或操作系统可能提供不同的信息,或者以不同的方式提供信息。如果设备指纹依赖于某些特定的信息或获取方式,可能会导致兼容性问题。
  • 性能问题:获取设备信息需要时间和资源,特别是如果需要收集大量或复杂的信息时。这可能会影响设备的性能或用户的体验。

因此,生成设备指纹需要权衡各种因素,包括唯一性、稳定性、隐私、兼容性、性能和安全等。在实际应用中,可能需要根据具体的需求和约束来调整和优化设备指纹的生成方法。

Python 获得MAC地址

在第一个方法(使用uuid模块)无法获取MAC地址时,执行命令行获得。

import platform
import subprocess

def get_mac():
    try:
        mac = uuid.UUID(int=uuid.getnode()).hex[-12:]
        return ":".join([mac[e:e+2] for e in range(0, 11, 2)])
    except:
        mac = None
        system = platform.system()
        if system in ["Linux", "Darwin"]:
            try:
                output = subprocess.check_output("ifconfig", shell=True).decode("utf-8")
                lines = output.splitlines()
                for line in lines:
                    if "ether" in line:
                        mac = line.split("ether")[1].strip().split()[0]
                        break
            except subprocess.CalledProcessError:
                pass
        elif system == "Windows":
            try:
                output = subprocess.check_output("ipconfig /all", shell=True).decode("utf-8")
                lines = output.splitlines()
                start = False
                for line in lines:
                    if line.strip().endswith('WLAN:'):
                        start = True
                    if (line.lstrip().startswith("Physical Address") or line.lstrip().startswith("物理地址")) and start:
                        mac = line.split(":")[1].strip().replace("-", ":").lower()
                        break
            except subprocess.CalledProcessError:
                pass
        return mac


Python 获得硬盘序列号

在Windows中,你可以使用pywin32库,它提供了访问Windows API的接口。你可以使用Win32_DiskDrive WMI类来获取硬盘序列号:

import win32api
import win32file
import pywintypes
import os

def get_hdd_serial_number(drive):
    try:
        vol_name, vol_serial_num, vol_type, vol_flag = win32api.GetVolumeInformation(drive + ":\\")
        return str(vol_serial_num)
    except:
        return None

# Get serial number of C drive
print(get_hdd_serial_number('C'))

这将返回C驱动器的序列号。

在Linux中,硬盘信息通常存储在/dev/disk/by-id/目录下。你可以使用标准的文件操作函数来获取这些信息:

import os

def get_hdd_serial_number():
    # This assumes the primary HDD is sda, adjust if necessary
    hdd_info = os.popen('ls -l /dev/disk/by-id/').read()
    print(hdd_info)

get_hdd_serial_number()

这将输出所有硬盘的详细信息,你可以在其中查找你需要的硬盘序列号。

请注意,获取硬盘序列号可能需要特定的权限,而且可能受到隐私和安全规定的限制。在实际使用时,需要确保你的操作符合相关法律和政策。

标签:优缺点,地址,指纹,网卡,MAC,信息,line,设备
From: https://www.cnblogs.com/ghj1976/p/ji-yu-wang-ka-de-zhi-zuo-she-bei-zhi-wen-de-you-qu.html

相关文章

  • 性能测试-第01天-从理解到体验,最后能够对比说出Loadrunner和JMeter的优缺点
    更多功能测试以及全套学习路线图均在专栏,↑↑戳进去领取~系列文章目录......
  • 如何选择一款安全又实用的防关联指纹浏览器?
    指纹浏览器是什么?指纹浏览器又称作防关联浏览器,是一种用户隐私保护工具,它通过多种技术手段,对用户的浏览器进行修改和优化,从而使得用户的行为、特征、偏好等信息无法被追踪和关联。具体来说,防关联指纹浏览器会屏蔽浏览器和操作系统的一些识别特征,如User-Agent、浏览器版本号、插件......
  • Intel网卡编译安装步骤
    1、网卡厂家官网根据网卡型号搜索驱动。https://www.intel.cn/content/www/cn/zh/download-center/home.html2、查找对应的网卡驱动(下载对应的网卡驱动即可)3、将下载好的软件包上传到系统解压 大部分包都是以kernel开头,可以用命令yumlistinstalled|grepkernel来......
  • 【计算机视觉】基于纹理特征的指纹识别位置与姿态算法
    简介计算机视觉基于纹理特征的指纹识别中的位置和姿态估计是指确定指纹图像中指纹的位置和方向的过程。这些信息对于后续的特征提取和匹配非常重要。下面介绍两个常用的算法来实现位置和姿态的估计:方向图和边界框。方向图(OrientationMap)方向图(OrientationMap)是用来表示指纹图像中......
  • vm - 网卡故障-没有分配ip - mv ens33: <BROADCAST,MULTICAST> mtu 1500 qdisc noop s
    执行指令sudodhclientens33即可恢复红色部分,需要查看自己的机器,改为后缀即可cd/etc/sysconfig/network-scripts 需要等待一会才能刷新,使用 servicenetworkrestart 刷新会失败......
  • 腾达发布Wi-Fi 6 USB网卡:比U盘还小 网速提升90%
    腾达发布Wi-Fi6USB网卡W311MI,造型非常小巧,性能却很是强悍。从造型来看,腾达W311MIUSB网卡长度仅2.1厘米,仅USB接口占据了整体近乎2/3的大小,玲珑身形,甚至比无线键鼠的接收器也大不了多少。据了解,腾达W311MIUSB网卡支持Wi-Fi6无线协议,2.4GHz频段网速可达286Mbps。官方表示相比......
  • 叉车技改:提升叉车安全性,安装叉车指纹锁
    在工业生产中,叉车是一个非常重要的物流设备。然而,由于叉车操作者疲劳、不慎操作或不当使用等因素,往往会导致在操作过程中发生意外事故。因此,提升叉车的安全性显得尤为重要。为了增加叉车的操作安全性,可以采用安装叉车指纹锁这一技改措施。九盾安防叉车指纹锁是一种通过人体生物识......
  • VMware ESXi 6.7 U3 Final Unlocker & OEM BIOS 集成 REALTEK 网卡驱动和 NVMe 驱动 (
    VMwareESXi6.7U3Final最终版,集成驱动版。此版本解决的问题:VMwareHostClient无法将现有虚拟磁盘(VMDK)附加到虚拟机请访问原文链接:https://sysin.org/blog/vmware-esxi-6-sysin/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org2023-02-28,发布一个UIfix版......
  • 面试遇到的,总结一下,欢迎指正:单体架构跟微服务架构的选择以及优缺点
    单体架构:一个war包或者jar包包含了应用的所有功能,称之为单体应用,单体架构中,所有功能集中在一个包中,功能集中、代码跟数据中心化,这是一种比较传统的架构风格,常见的ERP、CRM等系统都以单体架构的方式运行优点:1.架构简单:使用软件设计中的三层模型,即表示层,业务层,数据访......
  • 几种分布式文件系统的优缺点归纳与总结
    1、常用的分布式文件系统有以下几种:1.HadoopHDFS:HadoopDistributedFileSystem(HDFS)是ApacheHadoop生态系统的一部分,用于存储和处理大数据。2.Ceph:Ceph是一个开源的分布式存储系统,提供了高可用性、高性能和可扩展性。3.GlusterFS:GlusterFS是一个开源的分布式文件系统,提供......