欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python网络编程实验三 以代码方式解析Wireshark抓包文件并绘制图形

程序员文章站 2022-07-01 14:51:08
...

实验内容

首先打开Wireshark,在联网的网卡上开始抓包过程,再用浏览器打开网页,关闭网页并结束抓包过程,然后将抓包内容保存为pcapng格式的文件。对上述pcapng文件,使用Scapy库或其他解析库,获取到tcp三报文连接或tcp四报文释放的信息,获取到相关信息后,再用Matplot库绘制三报文连接或四报文释放的过程。

程序源码

from scapy.all import * 
import matplotlib.pyplot as plt

pcap_path = "python网络编程/实验三/3.pcap"
packets = rdpcap(pcap_path) # 读取数据包

plt.figure(figsize=(10,8)) # 设置figure大小
# 隐藏边框
plt.gca().spines["top"].set_alpha(.0)
plt.gca().spines["bottom"].set_alpha(.0)
plt.gca().spines["right"].set_alpha(.0)
plt.gca().spines["left"].set_alpha(.0)
plt.title("TCP connection", fontsize=18) # 添加标题
plt.axis([0,10,0,10]) # 横纵坐标范围
plt.xticks([1,9],[packets[0]["IP"].src, packets[0]["IP"].dst]) # 添加横坐标标签
plt.yticks([]) # 隐藏纵坐标标签
# 两条竖线
plt.vlines(x=1, ymin=0, ymax=10, linestyles='dotted')
plt.vlines(x=9, ymin=0, ymax=10, linestyles='dotted')
# 添加文字
plt.text(1, 10, 'Client', horizontalalignment='center', fontsize=15)
plt.text(9, 10, 'Server', horizontalalignment='center', fontsize=15)

client_ip = packets[0]["IP"].src
for i in range(len(packets)): # 对每一个数据包的数据进行处理
    if packets[i]["IP"].src == client_ip: # 如果是从客户端发往服务器
        p1=[1,9-2*i]
        p2=[9,9-2*i-1]
    else: # 如果是从服务器发往客户端
        p1=[9,9-2*i]
        p2=[1,9-2*i-1]
    # 画一条带箭头的线
    plt.arrow(p1[0],p1[1],p2[0]-p1[0],p2[1]-p1[1],
        length_includes_head=True, # 长度包含箭头部分
        head_width=0.1,head_length=0.2,color='black') # 箭头的长宽和颜色
    # 添加数据信息
    message = 'sport='+str(packets[i]["TCP"].sport)+','+'dport='+str(packets[i]["TCP"].dport)+','+'seq='+str(packets[i]["TCP"].seq)+','+'ack='+str(packets[i]["TCP"].ack)+','+'flags='+str(packets[i]["TCP"].flags)
    plt.text(5, p1[1], message, horizontalalignment='center', fontsize=10)

plt.show()

图形

python网络编程实验三 以代码方式解析Wireshark抓包文件并绘制图形
python网络编程实验三 以代码方式解析Wireshark抓包文件并绘制图形

相关标签: python tcpip