Code Monkey home page Code Monkey logo

pcpp_sniffer's Introduction

设计

前后段分离

前端使用 flutter 做 webui ,后端使用 C++ 和 pcapplusplus 来实现抓包,通过 socket 通信。

抓包设计

流程

  1. 获取网卡信息。
  2. 开启一个子线程,主线程接受进一步消息,选择对应的网卡开始抓包。
  3. 主线程根据进一步的消息决定下一步操作。

支持协议

数据链路层

  • Ethernet

网络层

  • IPv4
  • IPv6
  • Arp
  • ICMP

传输层

  • TCP
  • UDP

应用层

  • HTTP/HTTPS
  • SSH
  • FTP/SFTP
  • SCP
  • DHCP
  • TELNET

支持过滤语句

  • ip
  • port
  • protocol
  • 仅支持 and 语法,比如 ip=123 and port=22

抉择

  1. 过滤过程是在抓包时过滤还是抓所有的包到最后过滤呢? 最后再过滤,抓全部的包,最后根据需求展示,如果数据量遭不住再换方法。

附加要求

基于 IP 和 Port 的 TCP 流追踪

这个好做,每一个 TCP 数据包都对 IP 和 Port 进行一次判断,并且注意一下 FIN 等标志位。

具体的处理可能需要开一个额外的线程,主线程、抓包线程都不适合大量操作,防止影响处理效率。

通信设计

前端设计

分为两个界面,一个为选择界面,另一个为抓包展示界面

选择界面

  • IP 和 Port 输入框和一个链接按钮。
  • 网卡选择列表和一个确认按钮 (网卡选择列表是上一步链接之后后端返回的)

抓包展示界面

  • 类似 Wireshark 那样,一个主列表框图,第一行是输入框,用来输入过滤条件。 下面是一个可拖动的列表,里面展示数据包的信息。

实现

抓包

前端

进度

  • 20231015:
    • 做好了基础结构,通信 socket 和 DataPack 也封装了一下
    • 明天开始着手写 onPacketArrives 这个函数,这个才是重点,需要确定 数据报协议栈 和传输格式问题。
  • 20231016:
    • sniffer 用各层的 LayerInfo 拼接成一个 json 数组发送给前端, onPacketArrives 和 formatLayerInfos 已经完成了。
    • flutter 前端结构基本确定了,和 sniffer 通过 socket 通信。
  • 20231017:
    • 用 LayerInfo 传递包数据不达可靠,前端没得展示,现在换成一个 Packet 提取一系列关键信息,其他的都放到 details 里让前端解决,用 formatPacketInfos 替换了 formatLayerInfos 。
    • dart4web 不支持 dart:io 用不了 socket, 只能用 websocket 来写
    • 用 vcpkg 装 uwebsockets 全是依赖问题,微软出品确实不可靠。
  • 20231018:
    • 换成 conan 十分钟解决了依赖问题,sniffer 成功换成了 websocket 通信。
    • flutter 三个界面也基本设置完了,但是性能很差,一开始抓包界面根本动不了。
    • 用 ListView.build 替换了 TableView 提高了性能,但是不好看了。
  • 20231019:
    • 完成了 sniffer 和前端之间的通信,通信数据格式什么的基本都确定了,数据传输也正常,前端性能也看的过去。
    • 现在还需要完成:筛选功能、包原始数据的 hex 和文本对照(可选)、TCP 流(可选)。

pcpp_sniffer's People

Contributors

yatogaii avatar

Stargazers

 avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.