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
PCP架构设计的更多相关文章
- 浅谈 jQuery 核心架构设计
jQuery对于大家而言并不陌生,因此关于它是什么以及它的作用,在这里我就不多言了,而本篇文章的目的是想通过对源码简单的分析来讨论 jQuery 的核心架构设计,以及jQuery 是如何利用javas ...
- 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)
一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...
- 解构C#游戏框架uFrame兼谈游戏架构设计
1.概览 uFrame是提供给Unity3D开发者使用的一个框架插件,它本身模仿了MVVM这种架构模式(事实上并不包含Model部分,且多出了Controller部分).因为用于Unity3D,所以它 ...
- VICA 架构设计(1)
本文记录最近完成的一个通用实时通信客户端的架构. 背景 我们公司是做税务相关的软件,有针对大客户 MIS 系统,也有针对中小客户的 SaaS 平台.这些系统虽然都是 B/S 的,但是也需要使用 A ...
- 一种简单的CQRS架构设计及其实现
一.为什么要实践领域驱动? 近一年时间我一直在思考一个问题:"如何设计一个松耦合.高伸缩性.易于维护的架构?".之所以有这样的想法是因为我接触的不少项目都是以数据库脚本来实现业务逻 ...
- 基于token的多平台身份认证架构设计
基于token的多平台身份认证架构设计 1 概述 在存在账号体系的信息系统中,对身份的鉴定是非常重要的事情. 随着移动互联网时代到来,客户端的类型越来越多, 逐渐出现了 一个服务器,N个客户端的格 ...
- 架构设计:一种远程调用服务的设计构思(zookeeper的一种应用实践)
在深入学习zookeeper我想先给大家介绍一个和zookeeper相关的应用实例,我把这个实例命名为远程调用服务.通过对这种应用实例的描述,我们会对zookeeper应用场景会有深入的了解. 远程调 ...
- ABP架构设计交流群-上海线下交流会的内容分享(有高清录像视频的链接)
点这里进入ABP系列文章总目录 ABP架构设计交流群-7月18日上海线下交流会内容分享 因为最近工作特别忙,很久没有更新博客了,真对不起关注我博客和ABP系列文章的朋友! 原计划在7月11日举行的AB ...
- 架构设计:负载均衡层设计方案(3)——Nginx进阶
版权声明:欢迎转载,但是看在我辛勤劳动的份上,请注明来源:http://blog.csdn.net/yinwenjie(未经允许严禁用于商业用途!) 目录(?)[-] Nginx继续进阶 1gzip ...
随机推荐
- python3-----多进程、多线程、多协程
目前计算机程序一般会遇到两类I/O:硬盘I/O和网络I/O.我就针对网络I/O的场景分析下python3下进程.线程.协程效率的对比.进程采用multiprocessing.Pool进程池,线程是自己 ...
- ASP.NET发送电子邮件(转)
原始地址:http://www.cnblogs.com/ForEvErNoME/archive/2012/06/05/2529259.html(有代码下载,博主真是有操守) 1.补充知识 (1)POP ...
- Luffy之Xadmin以及首页搭建(轮播图,导航)
1. 首页 1.1 轮播图 admin站点配置支持图片上传 pip install Pillow 默认情况下,Django会将上传的图片保存在本地服务器上,需要配置保存的路径.我们可以将上传的文件保存 ...
- python-django rest framework框架之dispatch方法源码分析
1.Django的 CBV 中在请求到来之后,都要执行dispatch方法,dispatch方法根据请求方式不同触发 get/post/put等方法 class APIView(View): def ...
- ubuntu Sublime Text 2编辑器安装
官网下载http://www.sublimetext.com/2 选择合适的包下载回来的格式是.tar.bz2格式,需要进行解压. 1,解压:tar -xvf Sublime\ Text\ 2.0.2 ...
- MSMQ 事务性消息处理
二.事务性消息处理 事务我想大家对这个词应该都不会陌生,在操作数据库的时候经常都会用到事务,确保操作成功,要么全部完成(成功) ,要么全部不完成(失败).在MSMQ中利用事务性处理,可以确保事务中的消 ...
- C# 4.0 可选参数 和 命名参数
可选参数 可选参数是 C# 4.0 提出来的,当我们调用方法,不给这个参数(可选参数)赋值时,它会使用我们定义的默认值. 需要注意的是: (1)可选参数必须位于所有必选参数的后面: (2)可选参数必须 ...
- Hadoop介绍-1.基本原理
了解大数据 首先,搞清楚hadoop在处理大数据的定位在哪里 什么是大数据?为什么要处理大数据? 数据量大(Volume) 数据类别复杂(Variety) 数据处理速度快(Velocity) 数据真实 ...
- 深入Spring Boot: 怎样排查 java.lang.ArrayStoreException
java.lang.ArrayStoreException 分析 这个demo来说明怎样排查一个spring boot 1应用升级到spring boot 2时可能出现的java.lang.Array ...
- Python----list&元祖常用方法总结
一.创建列表,把使用逗号分隔的数据用中括号[ ]括起来即为一个列表,列表也叫数组.list.array:列表里面也可以再套列表,一个列表里面套一个列表,叫二维数组:一个里面套一个列表,里面的列表再套 ...