2

nfqueue を使用してパケットをインターセプトし、scapy を使用して TCP パケットの内容を変更するために使用しているこの python スクリプトがあります。しかし、パケットを受け入れようとしたときにパケットを変更した後、このエラーが発生します。

callback failure !
Traceback (most recent call last):
  File "MITMAttack.py", line 47, in callback
    payload.set_verdict_modified(nfqueue.NF_ACCEPT, str(r), len(r))
  File "/home/robertocp25/.local/lib/python2.7/site-packages/scapy/packet.py", line 277, in __str__
    return self.build()
  File "/home/robertocp25/.local/lib/python2.7/site-packages/scapy/packet.py", line 355, in build
    p += self.build_padding()
  File "/home/robertocp25/.local/lib/python2.7/site-packages/scapy/packet.py", line 351, in build_padding
    return self.payload.build_padding()
  File "/home/robertocp25/.local/lib/python2.7/site-packages/scapy/packet.py", line 351, in build_padding
    return self.payload.build_padding()
AttributeError: 'str' object has no attribute 'build_padding'

Python スクリプト コードは次のとおりです。

#print payload
    data = payload.get_data()
    pkt = IP(data)
    if pkt.src == "127.0.0.1" and pkt[IP].dport == 8080:
        r = pkt.copy()
        payload_before = len(r[TCP].payload)
        regex = r"(?<=<d:resume xmlns:d=\"http://demo\">)(.*)(?=</d:resume)"
        matches = re.search(regex, str(r[TCP].payload), re.MULTILINE)
        if matches:
            print matches.group(0)
            print len(matches.group(0))
            result = ''.join(choice(ascii_uppercase) for i in range(len(matches.group(0))))
            print len(result)
            r[TCP].payload = re.sub(regex, result, str(pkt[TCP].payload), 1, re.MULTILINE)
            print r[TCP].payload

        payload_after = len(r[TCP].payload)
        #print "AFTER: " + str(payload_after)

        payload_dif = payload_after - payload_before

        r[IP].len = pkt[IP].len + payload_dif



        payload.set_verdict_modified(nfqueue.NF_ACCEPT, str(r), len(r))

誰がそのエラーを引き起こしているのか考えていますか? ありがとう、ロベルト P.

4

0 に答える 0