scapy: как вручную кодировать данные - PullRequest
0 голосов
/ 30 июня 2018

В лохмотьях

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 голосов
/ 10 июля 2018

Вы можете взглянуть на https://github.com/secdev/scapy/pull/1511

Имеет базовое сжатие, используемое с DNScompress(packet)

Однако, если в настоящее время не поддерживается частичное сжатие (когда у вас есть и указатель, и строка в одном и том же rdata / rrname)

0 голосов
/ 06 июля 2018

Я взломал решение:

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'
...