Python中能否伪装PC/操作系统名称,使主机名获取接口返回自定义值
答案
可以实现你要的伪装效果,针对你列出的三个Python接口,有对应的方法让其返回自定义的主机名,不会修改系统真实的PC名称,具体实现如下:
实现方案
1. 覆盖环境变量适配 os.environ['COMPUTERNAME']
这个接口直接读取当前进程的环境变量,仅需修改对应环境变量的值即可:
import os # 替换为你要伪装的PC名 FAKE_PC_NAME = "CustomFakeName" # Windows系统下修改COMPUTERNAME变量 os.environ['COMPUTERNAME'] = FAKE_PC_NAME # Linux/macOS系统下对应修改HOSTNAME变量,若程序明确读取COMPUTERNAME可额外新增该变量 os.environ['HOSTNAME'] = FAKE_PC_NAME
修改仅对当前进程生效,不会影响系统全局环境变量。
2. 猴子补丁适配 socket.gethostname() 和 platform.node()
platform.node() 底层绝大多数场景依赖 socket.gethostname() 实现,保险起见可以同时覆盖两个方法:
import socket import platform FAKE_PC_NAME = "CustomFakeName" # 备份原有方法(需要恢复时可调用) original_gethostname = socket.gethostname original_platform_node = platform.node # 覆盖为返回自定义名称的方法 socket.gethostname = lambda: FAKE_PC_NAME platform.node = lambda: FAKE_PC_NAME
效果验证
修改完成后调用你列出的三个接口,返回值都会变为你预设的伪装名称:
print(platform.node()) # 输出 CustomFakeName print(socket.gethostname()) # 输出 CustomFakeName print(os.environ['COMPUTERNAME']) # Windows下输出 CustomFakeName
注意事项
- 所有修改仅在当前Python进程内生效,不会修改系统真实主机名,也不会影响其他程序的运行
- 如果你需要在不修改目标Python程序源码的情况下实现欺骗,可以将上述补丁代码写入Python的
sitecustomize.py启动脚本,Python进程启动时会自动执行补丁覆盖 - 该方案仅适配你列出的三个标准库接口,如果目标程序直接调用系统原生API获取主机名,需要额外Hook对应的系统API才能实现欺骗
内容的提问来源于stack exchange,提问作者Robby Frank
相关产品推荐
相关产品推荐

