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

时间: 2024-10-02 17:37:31

PCP构架设计的相关文章

系统构架设计应考虑的因素

系统构架设计应考虑的因素 摘要:本文从程序的运行时结构和源代码的组织结构两个方面探讨了系统构架设计应考虑的各种因素,列举了系统构架设计文档应考虑的一些问题. 关键字:系统构架.设计.考虑.因素 正文:约公元前25年,古罗马建筑师维特鲁威说:“理想的建筑师应该既是文学家又是数字家,他还应通晓历史,热衷于哲学研究,精通音乐,懂得医药知识,具有法学造诣,深谙天文学及天文计算.”(好难哪,软件构架设计师的要求呢?大家好好想想吧.) 本文目录一.与构架有关的几个基本概念: 二.构架设计应考虑的因素概揽:

SDN -- CR19000 是面向 SDN 构架设计

软件定义网络(Software Defined Network,SDN)是由美国斯坦福大学CLean State课题研究组提出的一种新型网络创新架构,是网络虚拟化的一种实现方式.其核心技术OpenFlow通过将网络设备的控制面与数据面分离开来,从而实现了网络流量的灵活控制,使网络作为管道变得更加智能,为核心网络及应用的创新提供了良好的平台. CR19000 面向 SDN 的构架设计,全面支持 SDN 技术,提供多种对外协议接口与外部系统相连,使设备可以与 SDN 控制器进行全方位的交互,便于客户

谈五层逻辑构架设计

术语表 逻辑:Logical 物理:Physical 构架:Architecture 框架:Framework 表现层:Presentation 用户界面:User Interface 业务逻辑:Business Logic 数据访问:Data Access 数据和存储管理:Data and Storage Management 图形用户接口:Graphical User Interface 胖客户端:Richer Client-side 智能客户端:Smart Client 应用程序:Appl

构架设计篇,规划超大型高可用网络架构第一章ip地址规划

前言:请珍惜别人的劳动成果,永远不要小看一个案例,包含的知识点多得你想都想不到,而且做案例的时候都是学完了最后课程以后,把知识点串联起来的.一个好的架构师一定知识面是博大的,全局观是很多人无法想象的,可能具体技术细节未必给你讲清楚,但是提供一种思想一种理念,所以在北京那边一个架构师一般年薪都是在30万以上,我看完了课程,但是里面的具体代码实现细节我不能消化,但我能理解那意思,我还需要至少半年,不断的重复去做实验敲命令代码,制作技术文档,才能有所成就,当然要做到一个顶级的额,是需要不断在工作中工作

rpc框架之HA/负载均衡构架设计

thrift.avro.grpc之类的rpc框架默认都没有提供负载均衡的实现,生产环境中如果server只有一台,显然不靠谱,于是有了下面的设计,这其实是前一阵跟北京一个朋友在qq群里交流的结果,分享一下: 主要思路: 1.rpc server端以多实例方式运行(多端口或多机部署均可),启动时每个实例向zk集群以临时节点方式注册(这样,遍历zk上/server下有多少个临时节点就知道有哪些server实例在线) 2.客户端自己实现一个连接池,连接池初始化时,从zk将在线的server实例信息同步

消息中心构架设计说明书

紫薇真人李万鸿 目录 1       1. 文档介绍.... 4 1.1       文档目的... 4 1.2       文档范围... 4 1.3       读者对象... 4 1.4       参考文献... 4 1.5       术语与缩写解释... 4 2       系统概述.... 5 3       设计约束.... 6 4       设计策略.... 7 5       系统总体结构.... 8 6       子系统N的结构与功能.... 9 7       开发环

构架设计:负载均衡层设计方案(1)——负载场景和解决方式

目录(?)[-] 不同的负载场景 1负载场景一 2负载场景二 3负载场景三 4负载场景四 5沉思片刻 负载方案构想 1解决方案一独立的NginxHaproxy方案 2解决方案二NginxHaproxy Keepalived方案 3解决方案三LVSDR Keepalived Nginx方案 4解决方案四DNS轮询 LVSDR Keepalived Nginx方案 为什么没有独立的LVS方案 说明 1术语说明 2后文介绍 在上一篇<标准Web系统的架构分层>文章中,我们概述了WEB系统架构中的分层

数据库构架设计中的Shared Everthting、Shared Nothing、和Shared Disk

Shared Everthting:一般是针对单个主机,完全透明共享CPU/MEMORY/IO,并行处理能力是最差的,典型的代表SQLServer Shared Disk:各个处理单元使用自己的私有 CPU和Memory,共享磁盘系统.典型的代表Oracle Rac, 它是数据共享,可通过增加节点来提高并行处理的能力,扩展能力较好.其类似于SMP(对称多处理)模式,但是当存储器接口达到饱和的时候,增加节点并不能获得更高的性能 . Shared Nothing:各个处理单元都有自己私有的CPU/内

服务器安装Apache+Tomcat+Memcached共享Session的构架设计

网站集群部署解决计划 一.       计划目标 实现互动留言系统.后台发布系统的高可用性,有效解决高并发量对单台应用服务器的打击,确保应用服务器单点故障不影响系统正常运行. 二.       部署架构 采取Tomcat集群的部署方法,Apache通过proxy_module代理方法对用户的请求进行负载均衡,转发至tomcat集群中的某一实例进行处置,tomcat集群之间通过Memcached高性能缓存集群共享速决Session.详细结构如下图: 三.       完整解决计划 1.