最近在看SMB协议,在自己构造数据包的时候发现了一个问题。
经过查阅资料发现NETBIOS对主机名的编码方式如下:
1.将字符补齐到16字节,不够的用空格补 2.将每个字符拆成高4bit和低4bit 3.再用0x41就是A加上这个值
举个例子abcd
的编码流程:
1.补空格到16字节
"abcd " |
---|
2.将每个字符拆开
拆分前0x61 0x62 0x63 0x64 0x20 0x20 0x20 0x20 0x20 ...拆分后0x6 0x1 0x6 0x2 0x6 0x3 0x6 0x4 0x2 0x0 0x2 0x0 |
---|
3.用0x41加上这个值
0x47 0x42 0x47 0x43 0x47 0x44 0x47 0x45 0x43 0x41 ...GBGCGDGECA |
---|
自己用python实现了一下
def encode(src): src = src.ljust(16,"\x20") names = [] for c in src: char_ord = ord(c) high_4_bits = char_ord >> 4 low_4_bits = char_ord & 0x0f names.append(high_4_bits) names.append(low_4_bits) res = "" for name in names: res += chr(0x41+name) return res |
---|