我正在尝试对我公司的一台服务器进行身份验证。我最初的连接尝试返回带有标题的 401:
www-authenticate: NTLM TlRMTVNTUAACAAAAAAAAACgAAAABggAAVU9wgQTnlrgAAAAAAAAAAA==
解析base64部分,我得到这个:
0000 4E 54 4C 4D 53 53 50 00 02 00 00 00 00 00 00 00 NTLMSSP.........
0010 28 00 00 00 01 82 00 00 B6 70 AC 57 8C D0 07 44 (........p.W...D
0020 00 00 00 00 00 00 00 00 ........
这反过来又解析为:
Signature = NTLMSSP
msg_type = 2
TargetNameLen = 0
TargetNameMaxLen = 0
TargetNameOffset = 40
NegotiateFlags = 0x8201
ServerChallenge = B6 70 AC 57 8C D0 07 44
这是我应该提到我自己没有解析这个的地方。我认为这并不重要,但我使用的是 Python 2.7,新安装的 python_ntlm-1.0.1 和 requests-ntlm 0.0.2.1 副本,并且 ntlm 模块在其 parse_NTLM_CHALLENGE_MESSAGE 例程中崩溃,因为数据包太短. 从偏移量 0x0020 开始,显然应该有一个 16 字节的保留区域,后跟三个 32 位整数,而不是保留区域中只有 8 个字节的十六进制 00,其他数字丢失。这是我第一次需要比基本身份验证更多的东西。我怀疑 TargetNameLen 为 0 意味着一些特殊的东西,但是在我向 python_ntlm 维护者提交错误报告之前,有人可以帮我解释我得到的数据吗?
谢谢!