简单更新一篇:设备指纹获取原理

智数逐影人
• 阅读 754

前言:今天是星期一,大家都应该知道,这种日子,出于人道主义和人体构造,是不应该工作的。 我的左半脑还沉浸在周末的快乐之中,右半脑在为接下来五天而发愁。所以,来写篇短文摸个鱼吧。

设备指纹定义

设备指纹通过用户上网设备的硬件、网络、环境等特征信息生成设备的唯一标识,可有效识别模拟器、刷机改机、Root、越狱、劫持注入等风险。就设备指纹的发展史来看,设备指纹从原来的IP到现在的设备指纹,其中的技术和安全性都有很大的提高。
简单更新一篇:设备指纹获取原理

获取原理

获取设备指纹的原理是利用设备的各种属性和特征,包括硬件、操作系统、网络设置、浏览器配置和插件等信息,对设备进行唯一性的标识和识别。

设备指纹获取原理是基于设备本身的属性和特征来实现的,因此可以在不依赖用户身份信息的情况下,对设备进行唯一性的标识和识别,应用于广告追踪、反欺诈、用户行为分析等领域。

通常来说,一般会涉及到以下步骤:

1.收集设备信息:收集与设备相关的各种信息,包括硬件信息(如CPU、GPU、内存、存储器等)、操作系统信息(如操作系统版本、语言、时区等)、浏览器信息(如用户代理字符串、插件、字体等)以及网络信息(如IP地址、DNS设置等)等。

2.加工信息:将收集到的设备信息进行处理和加工,提取设备的特征和属性,如操作系统位数、浏览器版本、屏幕分辨率、插件列表、语言设置等等。

3.生成设备指纹:根据加工后的设备信息,生成设备指纹,并将其存储到服务器或本地数据库中,用于后续的设备识别和跟踪。

4.设备指纹更新:设备指纹可能会因为硬件或软件的变化而发生变化,因此需要定期更新和验证设备指纹,以确保设备的唯一性和准确性。

具体代码实现

import hashlib
import json
import os

# 收集设备信息
def collect_device_info():
    info = {}
    info['platform'] = os.name
    info['hostname'] = os.uname()[1]
    info['os'] = os.uname()[0] + ' ' + os.uname()[3]
    info['browser'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
    return info

# 加工信息
def process_info(info):
    processed_info = {}
    processed_info['platform'] = info['platform']
    processed_info['os'] = info['os']
    processed_info['browser'] = info['browser']
    return processed_info

# 生成设备指纹
def generate_fingerprint(info):
    processed_info = process_info(info)
    json_info = json.dumps(processed_info, sort_keys=True)
    fingerprint = hashlib.md5(json_info.encode('utf-8')).hexdigest()
    return fingerprint

# 测试
if __name__ == '__main__':
    info = collect_device_info()
    fingerprint = generate_fingerprint(info)
    print(fingerprint)

其实只是一个很简单的使用Python内置的库进行设备信息的收集和处理的过程,其中使用了MD5算法生成设备指纹。

如果有企业实际需要,其实最好是在此基础之上,去做优化和升级。

当然,最简单的方式,就是找一个现成的设备指纹系统:顶象设备指纹

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Easter79 Easter79
3年前
swconfig
 swconfig是交换接口(switch)配置命令。swconfiglist;列出可用的SWITCH设备信息(dev参数)Found:switch0ag71xxmdio.0swconfigdevswitch0help;查询该设备信息switch0:ag71xxmdio.0(Athero
易娃 易娃
4年前
Android开发 - 获取Android设备的唯一标识码(Android 6.0或更高)
在我们的APP开发中,通常需要获取到设备的唯一标识。在Android6.0之前,有很多方法我们可以方便获取到硬件的唯一标识,但是在Android6.0之后,Android系统大幅限制了我们获取设备的硬件信息。Android6.0之前的方法(已过时)1.DEVICE\_ID通getSystem
Stella981 Stella981
3年前
Android app ADB命令
\查看设备adbdevicesps这个命令是查看当前连接的设备,连接到计算机的android设备或者模拟器将会列出显示若有多台安卓设备,可以通过在adb后面加上s<设备id对指定设备进行装包、卸载等操作\启动adbadbstartserver\关闭adbadbkillserver\安装软件
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
(绝对有用)iOS获取UUID,并使用keychain存储
UDID被弃用,使用UUID来作为设备的唯一标识。获取到UUID后,如果用NSUserDefaults存储,当程序被卸载后重装时,再获得的UUID和之前就不同了。使用keychain存储可以保证程序卸载重装时,UUID不变。但当刷机或者升级系统后,UUID还是会改变的。但这仍是目前为止最佳的解决办法了,如果有更好的解决办法,欢迎留言。(我整理的解决办法的参
Stella981 Stella981
3年前
Android蓝牙连接汽车OBD设备
//设备连接public class BluetoothConnect implements Runnable {    private static final UUID CONNECT_UUID  UUID.fromString("0000110100001000800000805F9B34FB");
物联网的基本概念及其实际运用
(TheInternetofthings)的定义于1999年明确提出,其界定非常简单,全部物件都根据射频识别技术等信息内容感测器设备与网络联接,进而完成智能识别和管理方法。物联网就是指各种各样信息内容感知机器设备,如射频识别技术(RFID)机器设备,红外线传感器,卫星导航系统,激光扫描仪等设施与网络融合产生的极大互联网。在其中最重要的工艺之一是射频识别
Stella981 Stella981
3年前
Linux应急响应(二):捕捉短连接
0x00前言​短连接(shortconnnection)是相对于长连接而言的概念,指的是在数据传送过程中,只在需要发送数据时,才去建立一个连接,数据发送完成后,则断开此连接,即每次连接只完成一项业务的发送。在系统维护中,一般很难去察觉,需要借助网络安全设备或者抓包分析,才能够去发现。0x01应急场景​