scapy发包:用Python脚本构造带有私有协议头(直接带十六进制数据)的报文

问题描述:      

 由于测试需求需要发一个带有私有协议的头部数据的报文来进一步做相关用例测试,而scapy经过查资料和测试只能带已知网络协议(以太网二层协议数据Ether,ip协议等)的头部数据,想带其他报文数据只能被当做字符串处理,而不能直接带自己想要的十六进制数据。

比如我想发一个在以太网头部数据之前附加上自己的私有协议头数据的报文,具体如下:

私有头协议数据:03 00 00 02 10 02 00 00 40 00 00 00 80 03
以太网头部数据:
                           1、目的mac地址:00:11:22:33:44:55

                           2、源mac地址:00:22:22:22:22:22

                           3、vlan TAG 数据:TPID:8100; CFI:0 PCP:0,vlan:d 

尝试直接在进行scapy发包时,发如下数据:

p="0300000210020000400000008003"/Ether(dst='00:11:22:33:44:55', src='00:22:22:22:22:22')/Dot1Q(vlan=13) /"1122334455"
sendp(p, iface = 'veth12', count =1)

解决办法:

则发现直接将 "0300000210020000400000008003"识别成了字符串,转化成相应的ASCII码发出去了,而不是自己想要带的十六进制数据,无奈写了个Python脚本进行构造私有头协议数据,send_tcp_packet.py脚本如下:

import time
import threading
import sys
from scapy.all import *

running = 1;

pad = "0300000210020000400000008003"
pad_decode = pad.decode('hex')

class MyProtocol(Packet):
    name = "MyProtocol"
    fields_desc = [
        StrLenField("Pad","0")
    ]

class Thread_send(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
 
    def run(self):
        n = 0
        packet = MyProtocol(Pad = pad_decode)/Ether(dst='00:11:22:33:44:55', src='00:22:22:22:22:22') \
                        /Dot1Q(vlan=13) /"1122334455"

        sendp(packet, iface = 'veth0', verbose=False)

class Thread_stop(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
 
    def run(self):
        ver = raw_input('Press any key to stop send')
        global running
        running = 0

if __name__=='__main__':

    t1 = Thread_send()
    t2 = Thread_stop()
    t1.start()
    t2.start()

 运行脚本,就可以构造带自己任何想要的数据了。可根据自己需求修改在报文的任意位置添加私有协议数据。

结果展示:

运行结果如下,成功发出带有私有协议头部数据“03 00 00 02 10 02 00 00 40 00 00 00 80 03”的报文:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值