首页 > 其他分享 >网络嗅探器的设计与实现

网络嗅探器的设计与实现

时间:2023-11-09 22:55:43浏览次数:36  
标签:函数 scapy 嗅探器 抓取 packet 网络 设计 数据包 AsyncSniffer

网络嗅探器的设计与实现

1. 介绍

    中国科学院大学软件与系统安全作业:网络嗅探器
    项目地址:https://github.com/gao79135/network-sniffer/tree/master
    本人开发的网络嗅探器可以抓取并分析网络数据包,并支持wireshark语法,实现协议的过滤功能。

img
img

2. 项目的技术栈

    本项目前端使用qt(qt-designer)来进行布局。
    后端使用python通过scapy框架来进行数据包的处理。
    scapy版本:Version 2.5.0
    python版本:Version 3.9.1
    qt版本:Pyside6

3. 项目的技术要点

3.1 如何获取网络数据包?

    我们可以使用scapy自带的AsyncSniffer函数来实现异步抓包。
    所使用的该函数的参数如下:
        1.  iface为需要监听的网络接口
        2.  prn为回调函数(每当AsyncSniffer函数抓取到包时,就会调用此回调函数)
        3.  filter指定需要过滤的条件(默认支持wireshark语法)。
    之后,我们调用该对象的start方法就可以实现异步的抓取了。
    在前端中,单击按钮后发出信号触发槽函数,通过槽函数来执行数据包的抓取。

3.2 如何解析网络数据包?

    我们可以在上述的回调函数中实现协议的解析。
    AsyncSniffer函数抓取到包时,会向指定的回调函数中传入参数。
    我们可以使用该对象(这里假设为packet)来解析网络数据包的相关信息。
    例如:
        1.  我们可以使用如下方式来获得包的各种层信息。
            packet['IP']    # 获取IP层信息
            packet['TCP']   # 获取TCP层信息
            ...
        2.  获取到包的各层对象后,我们可以使用如下方式来获得各层的详细信息。
            packet['IP'].fields.items() # 获取IP层的所有详细信息。
        3.  我们可以使用该对象的summary方法来获得包的摘要信息。
            packet.summary()
        ...

3.3 如何实现协议的过滤?

    关于协议的过滤,我们可以在开始嗅探之前在AsyncSniffer函数的filter参数指定一个字符串。
    这个字符串内容的获取我们可以在前端的输入组件中进行输入,当输入之后(输入框的内容发生了变化),该组件就会发出一个信号触发槽函数,我们可以在槽函数中将输入框的内容赋值给该变量。
    AsyncSniffer函数默认支持wireshark语法来实现协议的过滤。

3.4 如何将获取的网络数据包的相关数据回显在页面上?

    这里介绍一个通用思路:
        1.  通过上述的各层对象来获取详细信息。
        2.  将详细信息存储在列表或字典中。
        3.  添加之后,我们可以发出Qt的自定义信号来触发与之对应的槽函数,将数据回显在页面上。
    这里需要注意的是:当我们需要实时的将抓取的包回显在页面上时,需要考虑两个线程(抓取数据包的线程与主线程)之间的并发问题。
    有时候可能会出现抓取数据包的线程抓取包的频率很高,而主线程来不及回显,进而造成数据不一致的问题。
    解决此类问题,我们可以采用锁机制,只有当回显完数据之后,才可以抓取下一个数据包。
    capture_thread:
        lock.acquire()
        process to generate data
        send signal to main_thread
    main_thread:
        receive signal to process data
        ...
        show the screen
        lock.release()

3.5 如何获取包的二进制信息?

    我们可以使用packet对象的hexdump函数来获取包的二进制信息。
    hexdump函数接收两个参数,第一个参数为packet对象,第二个参数为布尔值。如果为True,那么就会将内容输出到变量当中。如果为False,那么就会输出到屏幕中。

3.6 如何实现重新嗅探的功能?

    AsyncSniffer函数所返回的对象有一个stop方法可以停止嗅探。
    停止嗅探后,清空前端中所有组件的内容,之后再调用start方法重新开始嗅探。
    在前端中,单击按钮后发出信号触发槽函数,通过槽函数来执行数据包的重新嗅探。

3.7 如何实现关于和退出功能?

    当我们点击菜单栏的关于按钮时,就会发出信号,从而进一步触发槽函数。
    在槽函数中,我们可以使用Qt中的Dialog组件来持续显示我们的信息。
    当我们点击菜单栏的退出按钮时,就会发出信号,从而进一步触发槽函数。
    在槽函数中,我们可以使用QApplication对象(也就是你要开发的软件)的quit方法来实现程序的退出。

4. 更多信息

    关于scapy的其余方法,这里不再赘述,可以查看scapy的官方文档(老实说,我也说不出啥,看文档写的)。
    https://scapy.readthedocs.io/en/latest/
    关于Pyside6的其余方法,这里不再赘述,可以查看Pyside6的官方文档。
    https://www.pythonguis.com/topics/pyside6/

标签:函数,scapy,嗅探器,抓取,packet,网络,设计,数据包,AsyncSniffer
From: https://www.cnblogs.com/gao79135/p/17823086.html

相关文章

  • Linux 网络设置
    网络设置ifconfig查看网络接口信息centos6:eth0centos:ens33格式ifconfig+网卡名up启动网卡ifconfig+网卡名down关闭网卡ifconfig+网卡名IP地址/子网掩码临时设置IP地址ifconfig+网卡名:0IP地址/子网掩码设置虚拟网卡(临时测试使用,不是永久)  #将ens36dow......
  • springboot社区团购管理系统的设计与实现-计算机毕业设计源码+LW文档
    abo开发说明开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:Maven3.3.9浏览器:谷歌浏览器部分数据库:----Tablestructurefortableaddress--DROPTABLEIFEXISTSaddr......
  • 基于Spark的共享单车数据存储系统的设计与实现-计算机毕业设计源码+LW文档
    摘 要近些年来,随着科技的飞速发展,互联网的普及逐渐延伸到各行各业中,给人们生活带来了十分的便利,共享单车数据存储系统利用计算机网络实现信息化管理,使整个共享单车数据存储管理的发展和服务水平有显著提升。本文拟采用java技术和Springboot搭建系统框架,后台使用MySQL数据库进......
  • springboot科研管理系统-计算机毕业设计源码+LW文档
    摘 要随着计算机技术发展,计算机系统的应用已延伸到社会的各个领域,大量基于网络的广泛应用给生活带来了十分的便利。所以把科研管理与现在网络相结合,利用计算机搭建科研管理系统,实现科研的信息化。则对于进一步提高科研管理发展,丰富科研管理经验能起到不少的促进作用。系统阐述......
  • 2023-2024-1 20231329 《计算机程序与设计》第七周学习总结
    这个作业属于哪个课程https://edu.cnblogs.com/campus/besti这个作业要求在哪里https://www.cnblogs.com/rocedu/p/9577842.html#JXJC这个作业的目标计算机科学概论第8章并完成云班课测试《C语言程序设计》第6章并完成云班课测试作业正文https://www.cnblogs.c......
  • 2023-2024-1 20231414 《计算机基础与程序设计》第七周学习总结
    学期(2023-2024-1)学号(20231414)《计算机基础与程序设计》第七周学习总结作业信息这个作业属于哪个课程<班级的链接>(如2023-2024-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(2023-2024-1计算机基础与程序设计第七周作业)这个作业的目标<写上具体方......
  • 2023-2024-1 20231419 《计算机基础与程序设计》第七周学习总结
    2023-2024-120231419《计算机基础与程序设计》第七周学习总结作业信息这个作业属于哪个课程https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP这个作业要求在哪里https://www.cnblogs.com/rocedu/p/9577842.html#WEEK07这个作业的目标自学《计算机科学概......
  • 《信息安全系统设计与实现》第十周学习笔记
    第六章信号和信号处理信号和中断“中断”是从I/O设备或协处理器发送到CPU的外部请求,它将CPU从正常执行转移到中断处理。与发送给CPU的中断请求一样,“信号”是发送给进程的请求,将进程从正常执行转移到中断处理。进程:一个“进程”就是一系列活动广义的“进程”包括:从事日常......
  • 数据库设计心得
    我们的项目是基于隐私包含的众包系统。在设计之前,我们先把需求搞清楚。业务需求雇主能发布需求,工人能接单,完成任务。哈哈,听上去还挺简单的,但涉及到雇主取消需求,雇主取消任务,工人根据标签查询需求,工人提交工作文件,工人取消订单这些功能。初步设计确定了工人,雇主,管理员,需求,订单,......
  • 信息安全系统设计与实现 学习笔记9
    信号和信号处理信号和中断的统一处理“中断”是从I/O设备或协处理器发送CPU的外部请求,它将CPU从正常执行转移到中断处理(1)一个“进程”就是一些列活动(2)“中断”信号进程中断信号的来源硬件信号异常信号其他进程信号信号在Unix/Linux中的常见用法Unix/Linux中的信号处......