python scapy修改替换Pcap包负载

文章讲述了如何使用Python的Scapy库解析数据包,并着重于如何更改HTTP数据包的负载内容以模拟恶意流量。在修改负载后,还需要调整IP和TCP层的长度及校验和。然而,当使用Wireshark打开新生成的pcap文件时,由于数据帧长度不匹配导致问题,解决方案是替换相同长度的负载。
摘要由CSDN通过智能技术生成

使用scapy库进行对数据包的解析,以及希望通过更改负载内容从而生成新的恶意流量数据
在通过scapy提取到的流量数据中,呈现出的是:

<Ether  dst=00:e0:b1:87:f5:94 src=00:0d:60:96:ae:5c type=IPv4 
|<IP  version=4 ihl=5 tos=0x0 len=636 id=9356 flags=DF frag=0 ttl=128 proto=tcp chksum=0x7bf3 src=192.168.4.121 dst=65.54.81.165 
|<TCP  sport=51779 dport=http seq=4271008838 ack=462547690 dataofs=5 reserved=0 flags=PA window=4380 chksum=0x1d81 urgptr=0 
|<Raw  load='GET /image.aspx?uuid=ba1caada-f9f5-4b3b-9fce-6231e98014d5&w=136&h=102 HTTP/1.1\r\nAccept: */*\r\nIf-Modified-Since: Fri, 11 Jun 2010 20:35:57 GMT\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Windows Live Messenger 14.0.8117.0416)\r\nHost: img4.catalog.video.msn.com\r\nConnection: Keep-Alive\r\nCookie: MC1=GUID=e1d357ef6bd5480a8182689e0cff3f86; MH=MSFT; ANON=A=16E2C7EA7BB067D4DEF6578EFFFFFFFF&E=9e3&W=1; NAP=V=1.9&E=989&C=pWlFIRCeoKkXxLybdasmz1ySFGTMCouJK3rZUJj-VDvudt34fDIobg&W=1\r\n\r\n' |>>>>

以上为一个HTTP数据包,其中分为Ether、IP、TCP以及Raw,每一个上层协议都被当做下层协议的负载。
因此在修改负载时,特定指的是最后Raw.load的内容,需要处理的有每个包头(下层协议)的长度以及校验和。

from scapy.all import *

def main():
    pkts = rdpcap('ddossim.pcap')
    pkt_http = []
    payload_http = []
    IP_length_http=[]
    payload_length_http=[]
    for pkt in pkts:
        # raw = pkt.sprintf("%Raw.load%")
        if raw != '??' :
            try:
                payload = pkt['TCP']
                pkt_http.append(pkt)
                payload_http.append(pkt['Raw'].load)
                IP_length_http.append(len(pkt['IP']))
                payload_length_http.append(len(pkt['Raw'].load))

                import pdb;pdb.set_trace()
            except IndexError:
                continue

if __name__ == '__main__':
    main()

在恶意流量种类的选择方面,经过特征选择,最终得到某种恶意流量的特征存在于负载当中,其中包含一些恶意的网站等,接收到这种恶意流量后会被感染,并变成恶意流量发送端。基于此,采用更换负载内容以达到增加恶意流量数据的目的。

经过两次断点后,payload_http 为

随后采用:

                pkt_http[0]['Raw'].load=pkt_http[1]['Raw'].load
                pkt_http[0]['IP'].len= pkt_http[1]['IP'].len

修改第一个HTTP协议的负载以及IP层长度,并且重新计算IP层与TCP层校验和:

                pkt['IP'].chksum = None  # 重新计算校验和
                pkt['TCP'].chksum = None  # 重新计算校验和

最后采用:

				wrpcap("new.pcap",pkt_http[0])

保存修改后的网络流量。

但是保存的new.pcap包在使用Wireshark打开时,会出现以下问题:
在这里插入图片描述
原因在于scapy在处理数据包时,并未将数据帧作为解析对象并呈现,导致数据帧中的Frame Length与修改负载后的长度不匹配。
现在能想到的办法只有替换相同长度的负载,才能避免出现报错的情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值