探索请求头中的UUID的不同版本:UUID1、UUID3、UUID4和UUID5

背景:

​ 最近在做一些网站的逆向分析的时候,请求头会出现uuid这个字段,出一篇文章讲一下。

基础铺垫:

在请求头中使用UUID作为参数可以用于以下情况:

  1. 唯一标识请求:通过将UUID作为请求头中的参数,可以为每个请求分配一个唯一的标识符。这可以帮助服务器端识别和跟踪每个请求,确保请求的唯一性和正确性。
  2. 防止重复请求:通过在请求头中包含UUID参数,可以防止客户端发送重复的请求。服务器端可以检查已接收到的UUID,如果发现重复的UUID,则可以拒绝重复请求或采取相应的处理措施。
  3. 用户身份识别:在某些情况下,UUID可以用作用户的唯一标识符。通过在请求头中携带UUID参数,可以将用户身份与请求关联起来,实现用户的身份验证和授权操作。
  4. 请求跟踪和日志记录:通过在请求头中添加UUID参数,可以帮助在分布式系统中跟踪请求的流程和处理过程。UUID可以用于标识和追踪请求的执行路径,方便日志记录和故障排查。
uuid库:

Python的uuid模块是用于生成和操作UUID(Universally Unique Identifier)的模块。UUID是一种标识符,用于在全球范围内唯一地标识信息或实体。

uuid模块还提供了一些有用的函数和属性,如:

  • uuid.UUID: UUID类,用于表示UUID对象。可以使用它来创建、操作和比较UUID。
  • uuid.UUID.hex: 返回UUID的十六进制字符串表示。
  • uuid.UUID.int: 返回UUID的整数表示。

uuid模块提供了几种方法来生成不同类型的UUID,包括:

  1. uuid1(node,clock_seq): 基于主机的MAC地址和当前时间生成UUID。这种方法可能会受到安全性和隐私方面的限制。
    • 这个是不断变化的
import uuid
# 生成UUID
uuid_obj = uuid.uuid1() 
print(uuid_obj)  # 输出UUID对象 7a882786-84f2-11ee-8e61-601895215252
print(uuid_obj.hex)  # 输出UUID的十六进制表示 7a88278684f211ee8e61601895215252
print(uuid_obj.int)  # 输出UUID的整数表示     162872769530213458403891555076281553490

2.uuid3(namespace, name): 基于给定的名称和命名空间生成UUID。命名空间可以是UUID或字符串形式。

该方法接受两个参数:namespacename

  • namespace:命名空间参数可以是UUID对象或字符串形式的UUID。命名空间是用于创建UUID的命名空间标识符。
  • name:名称参数是一个字符串,用于与命名空间一起生成UUID。
  • 产生的的值是固定的
import uuid
namespace_uuid = uuid.UUID('6ba7b810-9dad-11d1-80b4-00c04fd430c8')  # 根据一个字符串撞见UUID对象
name = 'example'
uuid_obj = uuid.uuid3(namespace_uuid, name)
print(uuid_obj) # c5e5f349-28ef-3f5a-98d6-0b32ee4d1743
print(uuid_obj.hex,len(uuid_obj.hex)) #  c5e5f34928ef3f5a98d60b32ee4d1743 32
print(uuid_obj.int) # 263051885572091086230243226840799713091

3.uuid4(): 基于伪随机数生成器的随机值生成UUID。这是最常用的生成UUID的方法,32位,没有任何参数。

  • 产生的值不是固定的
import uuid

uuid_obj = uuid.uuid4()
print(uuid_obj) # e5980dd7-7449-44df-a2d7-1ac36fd08a31
print(uuid_obj.int) # 305182720898611654703443082428223097393
print(uuid_obj.hex,type(uuid_obj.hex),len(uuid_obj.hex)) #e5980dd7744944dfa2d71ac36fd08a31  32 

4.uuid5(namespace, name): 方法用于基于给定的名称和命名空间生成UUID,类似于uuid3(),但使用的是SHA-1散列算法。

它接受两个参数:namespacename

  • namespace:命名空间参数可以是UUID对象或字符串形式的UUID。命名空间是用于创建UUID的命名空间标识符。
  • name:名称参数是一个字符串,用于与命名空间一起生成UUID。
import uuid

namespace_uuid = uuid.UUID('6ba7b810-9dad-11d1-80b4-00c04fd430c8')  # 示例命名空间UUID
name = 'example'
uuid_obj = uuid.uuid5(namespace_uuid, name)
print(uuid_obj) # 7cb48787-6d91-5b9f-bc60-f30298ea5736
print(uuid_obj.hex,type(uuid_obj.hex),len(uuid_obj.hex)) # 7cb487876d915b9fbc60f30298ea5736  32

你可能感兴趣的:(反爬策略,爬虫,python)