You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JMeter中提取响应二进制数据转十六进制(VNC DES认证场景)

嘿,我完全懂你在VNC DES认证场景下的困扰——用JMeter提取二进制响应转十六进制确实不能用常规的文本提取手段,那些不可打印字符简直是坑。下面给你几个实测有效的解决方案,都是针对JMeter环境优化的:

方法一:用JSR223 PostProcessor直接处理响应(推荐)

这是最高效可靠的方式,Groovy在JMeter里性能拉满,能直接操作原始二进制数据,避免编码转换的坑。

  • 给你的VNC请求添加一个JSR223 PostProcessor
  • 在脚本编辑框里粘贴这段Groovy代码:
// 获取请求的原始二进制响应字节数组
byte[] rawResponse = ctx.getPreviousResult().getResponseData()

// 将二进制字节转换为小写十六进制字符串(VNC认证常用小写)
String hexResult = javax.xml.bind.DatatypeConverter.printHexBinary(rawResponse).toLowerCase()

// 把结果存入JMeter变量,方便后续调用,这里变量名是vnc_challenge_hex
vars.put("vnc_challenge_hex", hexResult)
  • 解释下关键逻辑:ctx.getPreviousResult().getResponseData()直接拿到服务器返回的原始二进制数据,跳过了任何文本编码解析;printHexBinary是Java标准库的方法,能精准把每个字节转成两位十六进制字符,不会出错。
方法二:先保存二进制文件再转换(适合调试)

如果你需要先把响应存成文件留底,再转十六进制,注意一定要保持原始二进制格式:

  1. 添加Save Responses to a file元件到请求下:
    • 填写保存路径(比如./vnc_challenge.bin)
    • 务必取消勾选*"Save as UTF-8"*,否则二进制数据会被编码破坏
  2. 再添加一个JSR223 PostProcessor,读取文件并转换:
// 替换成你实际的文件路径
File binaryFile = new File("./vnc_challenge.bin")
byte[] fileBytes = binaryFile.bytes
String hexResult = javax.xml.bind.DatatypeConverter.printHexBinary(fileBytes).toLowerCase()
vars.put("vnc_challenge_hex", hexResult)
为什么之前的方法失效?
  • Regular Expression Extractor:正则是基于文本解析的,二进制里的控制字符(比如0x00、0x10这类不可打印字符)会被JMeter的文本解析器当成乱码或丢失,根本没法正确提取。
  • Save Responses to a file:如果选了"Save as UTF-8",JMeter会把二进制数据当成UTF-8文本解码再重新编码,直接篡改原始字节,导致后续转换完全错误。
额外小提示:VNC DES认证后续处理

拿到十六进制的挑战值后,你可以继续用JSR223处理加密逻辑,比如把十六进制转回字节数组,再用DES密钥加密:

// 从变量中取出十六进制字符串,转回字节数组
byte[] challengeBytes = javax.xml.bind.DatatypeConverter.parseHexBinary(vars.get("vnc_challenge_hex"))

// 这里可以继续编写DES加密逻辑,比如生成密钥、加密挑战值等
// 示例(伪代码):
// SecretKey desKey = generateDesKeyFromPassword("your_vnc_password")
// Cipher cipher = Cipher.getInstance("DES/ECB/NoPadding")
// cipher.init(Cipher.ENCRYPT_MODE, desKey)
// byte[] encryptedChallenge = cipher.doFinal(challengeBytes)

内容的提问来源于stack exchange,提问作者Léandre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:08:39