scapy:如何手动编码 rdata
scapy : how to manually encode rdata
在scapy中,
rdata = '\x00\n\x0cmxb-000c6b02\x04gslb\x08pphosted\x03com\x00'
真正的意思是:
10 mxb-000c6b02.gslb.pphosted.com.
我们如何编码
"10 mxb-000c6b02.gslb.pphosted.com."
到
'\x00\n\x0cmxb-000c6b02\x04gslb\x08pphosted\x03com\x00' using Python3?
谢谢!
更新:
仔细观察 rdata 字符串后,我找到了解决方案:
import struct
def encode_mx_rdata(MXHOST, MX=10):
_start = struct.pack("!h", int(MX)).decode()
b = ""
for i in MXHOST.split("."):
b += struct.pack("h", len(i) ).decode().rstrip("\x00") + i
if b and _start:
return(_start + b + "\x00")
else:
return False
进行中:
In [2]: mxrdata = encode_mx_rdata("mxb-000c6b02.gslb.pphosted.com.", 10)
In [3]: mxrdata
Out[3]: '\x00\n\x0cmxb-000c6b02\x04gslb\x08pphosted\x03com\x00'
我破解了一个解决方案:
import struct
def encode_mx_rdata(MXHOST, MX=10):
_start = struct.pack("!h", int(MX)).decode()
b = ""
for i in MXHOST.split("."):
b += struct.pack("h", len(i) ).decode().rstrip("\x00") + i
if b and _start:
return(_start + b + "\x00")
else:
return False
在行动:
In [2]: mxrdata = encode_mx_rdata("mxb-000c6b02.gslb.pphosted.com.", 10)
In [3]: mxrdata
Out[3]: '\x00\n\x0cmxb-000c6b02\x04gslb\x08pphosted\x03com\x00'
你可以看看https://github.com/secdev/scapy/pull/1511
它做一些基本的压缩,可用于 DNScompress(packet)
然而,如果当前不支持部分压缩(当您在同一 rdata/rrname 中同时拥有指针和字符串时)
在scapy中,
rdata = '\x00\n\x0cmxb-000c6b02\x04gslb\x08pphosted\x03com\x00'
真正的意思是:
10 mxb-000c6b02.gslb.pphosted.com.
我们如何编码
"10 mxb-000c6b02.gslb.pphosted.com."
到
'\x00\n\x0cmxb-000c6b02\x04gslb\x08pphosted\x03com\x00' using Python3?
谢谢!
更新:
仔细观察 rdata 字符串后,我找到了解决方案:
import struct
def encode_mx_rdata(MXHOST, MX=10):
_start = struct.pack("!h", int(MX)).decode()
b = ""
for i in MXHOST.split("."):
b += struct.pack("h", len(i) ).decode().rstrip("\x00") + i
if b and _start:
return(_start + b + "\x00")
else:
return False
进行中:
In [2]: mxrdata = encode_mx_rdata("mxb-000c6b02.gslb.pphosted.com.", 10)
In [3]: mxrdata
Out[3]: '\x00\n\x0cmxb-000c6b02\x04gslb\x08pphosted\x03com\x00'
我破解了一个解决方案:
import struct
def encode_mx_rdata(MXHOST, MX=10):
_start = struct.pack("!h", int(MX)).decode()
b = ""
for i in MXHOST.split("."):
b += struct.pack("h", len(i) ).decode().rstrip("\x00") + i
if b and _start:
return(_start + b + "\x00")
else:
return False
在行动:
In [2]: mxrdata = encode_mx_rdata("mxb-000c6b02.gslb.pphosted.com.", 10)
In [3]: mxrdata
Out[3]: '\x00\n\x0cmxb-000c6b02\x04gslb\x08pphosted\x03com\x00'
你可以看看https://github.com/secdev/scapy/pull/1511
它做一些基本的压缩,可用于 DNScompress(packet)
然而,如果当前不支持部分压缩(当您在同一 rdata/rrname 中同时拥有指针和字符串时)