Python基于Scapy的抓包协议分析器

2023-11-15

环境:py3.8

原理:模仿wireshark ,利用python的scapy模块下的sniff()函数进行数据的抓取,并进行所谓的“消费者处理”即跟据OSI网络协议模型进行协议分析

。将整个程序精简的概括得到最关键的一句代码:

 sniff(prn=lambda pkt: packet_consumer(pkt), stop_filter=lambda pkt: stop_sniff_event.is_set(),
          filter=fitler_entry.get(),iface='Intel(R) Dual Band Wireless-AC 7265')

prn=lambda alt : packet_consummer(pkt)这个参数指对抓到的每一个包进行packet_consumer()函数处理即协议分析函数处理。

stop_filter = lambda apk :stop_sniff_event.is_set()这里主要是对sniff()函数的结束控制,如果stop_sniff_event这个我们定义的变量被执行了set()方法,那么我们就停止抓包。

filter = filter_entry.get() 这里是对我们抓的包进行bfp过滤),即过滤只留下我们想要的。后面的filter_entry.get()函数是将界面文本框中用户输入的过滤值拿出来,作为我们的搜索对象。

iface=‘网卡名’,指定网卡这里指物理网卡。

源码如下:

 

# coding=utf-8
import datetime
import threading
import tkinter
from tkinter import *
from tkinter import font, filedialog
from tkinter.constants import *
from tkinter.filedialog import askopenfilename
from tkinter.messagebox import askyesno
from tkinter.scrolledtext import ScrolledText
from tkinter.ttk import Treeview

from scapy.layers.inet import *
from scapy.layers.inet6 import IPv6
from scapy.layers.l2 import *


# 状态栏类
from scapy.sendrecv import sniff
#设一个线程事件变量
from scapy.utils import wrpcap

stop_sniff_event= threading.Event()
pause_sniff_event= threading.Event()
# 捕获总数
sniff_count = 0
# 所有捕获到的报文
sniff_array = []

class StatusBar(Frame):

    def __init__(self, master):
        Frame.__init__(self, master)
        self.label = Label(self, bd=1, relief=SUNKEN, anchor=W)
        self.label.pack(fill=X)

    def set(self, fmt, *args):
        self.label.config(text=fmt % args)
        self.label.update_idletasks()

    def clear(self):
        self.label.config(text="")
        self.label.update_idletasks()


# 时间戳转为格式化的时间字符串
def timestamp2time(timestamp):
    time_array = time.localtime(timestamp)
    mytime = time.strftime("%Y-%m-%d %H:%M:%S", time_array)
    return mytime

def on_click_packet_list_tree(event):

    """
    数据包列表单击事件响应函数,在数据包列表单击某数据包时,在协议解析区解析此数据包,并在hexdump区显示此数据包的十六进制内容
    :param event: TreeView单击事件
    :return: None
    """
    global sniff_array
    selected_item = event.widget.selection()  # event.widget获取Treeview对象,调用selection获取选择对象名称
    # 清空packet_dissect_tree上现有的内容
    packet_dissect_tree.delete(*packet_dissect_tree.get_children())
    # 设置协议解析区的宽度
    packet_dissect_tree.column('Dissect', width=packet_list_frame.winfo_width())
    # !!!!!!!!!!!!!!!测试用的数据包!!!!!!!!!!!!!!要求换成你抓到的数据包!!!!!!!!!!!!!!!!!!!
    packet = sniff_array[int(selected_item[0]) - 1]


    # 按照协议层次显示数据包
    lines = (packet.show(dump=True)).split('\n')
    last_tree_entry = None
    for line in lines:
        if line.startswith('#'):
            line = line.strip('# ')
            last_tree_entry = packet_dissect_tree.insert('', 'end', text=line)
        else:
            packet_dissect_tree.insert(last_tree_entry, 'end', t
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python基于Scapy的抓包协议分析器 的相关文章

随机推荐

  • 14-Scala之隐式转换

    1 为什么要隐式转换 我们经常引入第三方库 但当我们想要扩展新功能的时候通常是很不方便的 因为我们不能直接修改其代码 scala提供了隐式转换机制和隐式参数帮我们解决诸如这样的问题 Scala中的隐式转换是一种非常强大的代码查找机制 当函数
  • python 参数值等于None怎么用

    def test query m None m string 看了下 一般都这样写 如果is None时候初始化下 if m is None m return query m if name main 既支持这样 query 辛弃疾 pri
  • 软件测试常见的风险,软件测试中常见的风险分析

    在软件测试或者App测试工作中 主要的风险表现有以下几点 1 需求风险 对软件需求理解不准确 导致测试范围存在误差 遗漏部分需求或者执行了错误的测试方式 另外需求变更导致测试用例变更 同步时存在误差 2 测试用例风险 测试用例设计不完整 忽
  • RuntimeError: a leaf Variable that requires grad has been used in an in-place operation.a += torch.o

    叶子节点不能执行in place 原地 操作 因为在进行前向传播的时候得到的是叶子结点的地址 再进行反向传播的时候这个地址不变才不会报错 地址改变了就会出错 要将 a torch ones 1 改为 a a torch ones 1 另外下
  • 计算机断电无法启动不了系统,电脑突然断电后无法启动怎么回事

    使用电脑的时候 总是会避免不了各种意外的事情 比如常见的电脑突然断电的情况 然后就会关机 可是关机之后就无法开机了 这是怎么回事呢 那么遇到电脑突然断电后无法启动如何解决呢 不用担心 本文给大家讲述一下电脑断电关机后无法开机的详细修复步骤
  • 用c语言实现顺序查找,顺序查找算法及C语言实现

    通过前面对静态查找表的介绍 静态查找表即为只做查找操作的查找表 静态查找表既可以使用 虽然一个是本节以静态查找表的顺序存储结构为例做详细的介绍 顺序查找的实现 静态查找表用顺序存储结构表示时 顺序查找的查找过程为 从表中的最后一个数据元素开
  • Java实现哈希函数/散列算法

    哈希函数 散列算法 根据某个值进行hash值计算 确保唯一性 public class HashUtils private static final String ALGORITHM SHA 256 public static String
  • Java基本类型所占存储空间大小

    基本类型 大小 最小值 最大值 包装器类型 boolean Boolean char 两个字节 Unicode 0 Unicode 2 16 1 Character byte 一个字节 128 127 Byte short 两个字节 2 1
  • daily technology

    Trending repositories on GitHub today GitHub The Hacker News Cybersecurity News and Analysis HackerNews Pxlet Yet anothe
  • 四数之和——python

    18 四数之和 难度中等997 给你一个由 n 个整数组成的数组 nums 和一个目标值 target 请你找出并返回满足下述全部条件且不重复的四元组 nums a nums b nums c nums d 若两个四元组元素一一对应 则认为
  • 学习使用 MATLAB 数学建模一篇文章就够了

    学习中 随着学习的深入会不断补充内容 欢迎大家一起学习数学建模知识 有什么问题 大家可以评论 一起讨论学习 需要LaTeX 数学建模模板和我收集的一些数学建模资料的可以评论留下邮箱 与君共勉 文章目录 一 MATLAB 知识学习 二 数学建
  • 剖析高性能队列Disruptor背后的数据结构和算法

    本文是学习算法的笔记 数据结构与算法之美 极客时间的课程 Disruptor 是一种内存消息队列 它经Java 中另外一个非常常用的内存消息队列 ArrayBlockQueue ABS 的性能 要高出一个数量级 可以算得上是最快的内存消息队
  • 深入浅出UML类图(五)

    实例分析3 售票机控制程序 某运输公司决定为新的售票机开发车票销售的控制软件 图I给出了售票机的面板示意图以及相关的控制部件 图I 售票机面板示意图 售票机相关部件的作用如下所述 1 目的地键盘用来输入行程目的地的代码 例如 200表示总站
  • 1063. 计算谱半径(20)

    在数学中 矩阵的 谱半径 是指其特征值的模集合的上确界 换言之 对于给定的n个复数空间的特征值 a1 b1i an bni 它们的模为实部与虚部的平方和的开方 而 谱半径 就是最大模 现在给定一些复数空间的特征值 请你计算并输出这些特征值的
  • Java学习笔记:Servlet

    JavaWeb三大组件 Servlet Filter 过滤器 Listener 监听器 Servlet生命周期 1 初始化阶段 调用init 方法 2 响应客户请求阶段 调用service 方法 3 终止阶段 调用destroy 方法 生命
  • Eclipse 部署Thrift 实例 & 服务模型实例演示(java)

    一 Eclipse 部署Thrift 实例 注 需要1 工具包thrift 0 9 0 ext 下载地址http download csdn net detail xyw eliot 5414527 2 Java语言Thrift工程需要的j
  • Java循环for, while和do...while&break,continue,return

    为什么80 的码农都做不了架构师 gt gt gt Java有非常灵活的三循环机制 可以使用以下三种循环之一 while 循环 do while 循环 for 循环 从Java5 增强的for循环中进行了介绍 这主要是用于数组 while
  • go中make和new的用法,以及nil用法

    看如下代码 package main import fmt unsafe func main make和new函数 new函数用法 a 10 默认值 int rune byte float bool string这些类型都有默认值 指针 切
  • 多进程和多线程的差别(优缺点)

    多进程 多线程 目录 一 多线程的优点 二 多进程的优点 目录 对于问多进程和多线程之间的差别的问题 其实我们只要表明我们所知道的多进程和多线程各自的优点就可以了 一 多线程的优点 1 线程间通信会更加灵活 包括进程间通信在内还可以使用全变
  • Python基于Scapy的抓包协议分析器

    环境 py3 8 原理 模仿wireshark 利用python的scapy模块下的sniff 函数进行数据的抓取 并进行所谓的 消费者处理 即跟据OSI网络协议模型进行协议分析 将整个程序精简的概括得到最关键的一句代码 sniff prn