zoukankan      html  css  js  c++  java
  • PCP架构设计

    1引言

    现如今已经进入互联网时代,无论是工作还好娱乐都已经离不开互联网,与此同时,网络相关的问题也时不时的侵扰着我们,这需要我们具有一定网络相关知识来解决相关问题,而这时,一款工作便利,免费的网络分析工具必不可少。目前抓包软件也有很多,但能够自动分析数据包的却不多,为此我们计划开发一这个能自动分析的抓包软件。

    2总体设计

    2.1、设计简述

    本软件是一个能自动分析本机所在网络中虚假数据包的功能。本软件分为抓包模块(cp模块),分析虚假虚假数据包模块(ping模块),数据显示逻辑模块和界面模块。

    2.2、运行环境

    2.2.1、硬件平台

    X64架构的pc机

    2.2.2、软件平台

    64位的linux操作系统。

    3、总体结构

    本软件由四部分组成,如下图:

     

    1.界面模块:该模块主要负责数据信息的显示,以及设置抓取数据包的条件。

    2.数据显示逻辑模块:该模块主要负责从抓包模块(cp模块)获得数据包,然后把该数据包放入虚假数据包分析模块(ping模块)进行分析。最后把数据包送给界面模块显示。

    3.cp模块:该模块主要负责从本机所在网络中抓取数据包,同时提供提取数据包信息的接口。

    4.ping模块:接收来自数据显示逻辑模块的数据包的源ip地址,然后ping该ip如果能通则该数据包不是虚假数据包,反之则是虚假数据包。

    4、功能模块设计

    4.1、界面和数据显示逻辑模块

    本软件的界面主要使用qt,所以界面和数据显示逻辑可以算作一个模块。因为界面可以不同直接写代码,直接用工具生成代码。数据显示逻辑模块实际就是从cp模块取数据包和调用cp模块取数据包具体信息的函数来取得需要显示的信息,然后调用ping模块的接口判断数据包是否为虚假数据包,最后调用相应的控件的对象的方法显示到界面上。具体如下图:

     

     

    4.2、cp模块

    4.2.1功能需求

    本模块主要提供数据包抓取的功能,具体需要实现的功能如下:

    1、从网络中抓出数据包保存到struct Packet结构体中(后面会提供该结构体的定义)

    2、提供获得抓取到数据包的各种信息的接口(后面会提供定义)。

    3、提供发送数据包的功能。

    4.2.2模块关键数据结构

    1.Filter结构体:该结构体是指明本软件抓取那些数据包,也就是过滤数据包。

    typedef struct Filter

    {

    int src_port; /*port=-1:Capture all packet ;

    *port>0 :Ports used in this program

    *fun:Source port

    */

     

    int dst_port; /*port=-1:Capture all packet ;

    *port>0 :Ports used in this program

    *fun:Destination port

    */

    char src_ip[16]; /*Capture source ip address is *src_ip*/

    char dst_ip[16]; /*Capture destination ip address is *dst_ip*/

    BOOL is_tcp; /*Capture TCP packets*/

    BOOL is_udp; /*Capture UDP packets*/

    BOOL nic_mode; /*NIC mode*/

    BOOL is_recv_only; /*Do you only capture the received packets?*/

    BOOL is_send_only; /*Do you only capture packets sent?*/

    }Filter;

     

    2.Packet结构体:抓取到数据包需要保存的结构体

    typedef struct Packet

    {

    struct ethhdr eth; /*data link layer:Frame head*/

    union{ /*network layer*/

    struct iphdr iph; /*IP head*/

    }neth;

    union tran_layer /*transport layer*/

    {

    struct tcphdr tcph;/*TCP head*/

    struct udphdr udph;/*UDP head*/

    }tranh;

    char data[1500]; /*Data*/

    int data_len; /*Data length*/

    }Packet;

     

    3.发送数据包时所需的结构体

    typedef struct IpPkt

    {

    char dst_ip[16];//目的IP

    char src_ip[16];//源IP

    short dst_port;//目的端口

    short src_port;//源端口

    int data_len;//数据长度

    char data[1500]; //数据

    }IpPkt;

    4.2.3模块接口函数设计

    1、初始化接口函数

    BOOL PCP_init(Filter *filter);

    作用:初始化本模块。

    参数:参数为Filter 结构体指针,指明需要抓那些数据包,即过滤数据包。

    返回值:返回TRUE(0)为成功,FALSE(-1)为失败。

    2、获得数据包的接口

    BOOL PCP_get_pkt(Packet* pkt);

    作用:获取一个数据包。

    参数:参数为Packet结构体指针,抓取到的数据包会填充到该指针指向的内存中。

    返回值:返回TRUE(0)为成功,FALSE(-1)为失败。

    3.提取数据包信息的控制函数

    BOOL PCP_control(Packet *pkt,int type,void *output);

    作用:提取数据包的信息。

    参数:pkt为抓取到的数据包;type为提取数据包信息的类型;output为提取到信息的输出。

    描述

    type

    output

    获得源MAC地址

    1

    Char*(字符串)

    获得目的MAC地址

    2

    Char*(字符串)

    获得源IP

    3

    Char*(字符串)

    获得目的IP

    4

    Char*(字符串)

    获得数据包的类型

    5

    Char*(字符串)

    获得源端口(如果是tcp或udp)

    6

    Short int

    获得目的端口(如果是tcp或udp)

    7

    Short int

         

    返回值:返回TRUE(0)为成功,FALSE(-1)为失败。

    4、发送数据包接口

    BOOL PCP_ip_pkt_send(char src_ip_type,IpPkt *ip_pkt);

    作用:发送数据包。

    参数:src_ip_type表示源ip是你指定还是随机生成。p_pkt为你所发送数据包的信息,其中当src_ip_type为1时p_pkt里的源ip项为为随机生成的,即使填了也是无效的。

    描述

    src_ip_type

    指定源ip

    2

    随机生成ip

    1

    返回值:返回TRUE(0)为成功,FALSE(-1)为失败。

    5.模块关闭

    BOOL PCP_close(void);

    作用:释放资源。

    返回值:返回TRUE(0)为成功,FALSE(-1)为失败。

    4.3、ping模块

    4.3.1功能需求

    该模块主要是判断数据是否为虚假数据包。本模块根据传过来的ip看能否ping通,如果能则不是虚假数据包,反之只是虚假数据包。

    4.3.2模块接口函数设计

    1、判断数据包的真假性接口

    int ping(char *ip_addr);

    作用:ping指定的ip地址是否能通。

    参数:ip_addr为需要ping的ip地址

    返回值:0为真数据包,-1为假数据包。

    github地址:https://github.com/524wolf/PCP

  • 相关阅读:
    go语言Notepad++简易开发环境搭建(windows)
    openssl AES加密以及padding
    为什么数据库要读写分离
    关于查询服务器文件是否过期的分析
    linux 禁止指定账号ssh登陆
    libmemcached upcoming ISO C++ standard, C++0x
    keepalived安装配置(nginx)
    php连接mysql报错No such file or directory
    linux命令行下使用R语言绘图
    纯真IP数据库导入mysql
  • 原文地址:https://www.cnblogs.com/yeershao/p/8038756.html
Copyright © 2011-2022 走看看