scapy:如何手动编码rdata

时间:2018-06-30 05:22:28

标签: python-3.x 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'

2 个答案:

答案 0 :(得分:0)

我破解了一个解决方案:

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'

答案 1 :(得分:0)

您可以看看https://github.com/secdev/scapy/pull/1511

它做了一些基本的压缩,可与DNScompress(packet)一起使用

但是,如果当前不支持部分压缩(当在同一rdata / rrname中同时具有指针和字符串时)