一、功能
监听本机指定端口,获取端口上的数据包并解析,解析出相关信息(源IP、目的IP、协议类型等)并显示在UI界面上。
二、实现过程
设计过程主要有一下几个部分:
1、指定端口,抓包并保存
在get_pacp(port)函数中实现,参数port是指定要监听的端口号;
2、解析保存的pcap数据包
在parse(path)函数中实现,参数path是指数据包保存的路径;
3、UI界面--通过文本框输入端口号来指定要监听的端口号,以及在UI上显示数据包的信息
在get_port()函数中实现;
4、UI界面--界面的初始化,以及一些文本框的编写
在主函数中实现。
三、完整代码
实现本代码参考的一些链接:
# 可以用80端口进行试验,只要打开浏览器浏览网页即可捕获数据包
import os
######################################
##########
########## 定义结构体数组,保存源IP、目的IP、协议类型
##########
######################################
class inf:
def __init__(self):
self.SrcIP = '' # 源IP
self.DesIP = '' # 目的IP
self.Protocol = '' # 协议类型
######################################
##########
########## 指定端口,获取数据包并保存
##########
######################################
from scapy.all import *
def get_pacp(port):
filter = 'dst port ' + str(port) # 目的端口
ifs = 'Realtek 8822CE Wireless LAN 802.11ac PCI-E NIC' # 本机网卡
#ip = "116.4.8.127" # 该选项可以用来抓取指定地址的数据包,也可写域名,如:www.baidu.com
dpkt = sniff(iface=ifs,filter=filter,count=1) # 使用sniff函数抓包
path = 'desktop/demo.pacp' # 文件的保存路径
wrpcap(path,dpkt) # 将抓取到的包保存为pcap文件
return path
######################################
##########
########## 解析pcap文件,获取信息
##########
######################################
import struct
import binascii
def parse(path) :
print("Get in parse()")
fpcap = open(path,'rb') # 读取.pcap文件
data = fpcap.read() # 读取到data缓冲中
# print(type(data)) # 输出数据类型 data为bytes类型的数据
lst = inf()
# 获取Protocol,1=ICMP,2=IGMP,6=TCP,17=UDP, 63字节为Protocol