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地址,然后pingip如果能通則該數據包不是虛假數據包,反之則是虛假數據包。

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 layerFrame 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 結構體指針,指明需要抓那些數據包,即過濾數據包。

返回值:返回TRUE0)為成功,FALSE-1)為失敗。

2、獲得數據包的接口

BOOL PCP_get_pkt(Packet* pkt);

作用:獲取一個數據包。

參數:參數為Packet結構體指針,抓取到的數據包會填充到該指針指向的內存中。

返回值:返回TRUE0)為成功,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*(字符串)

獲得源端口(如果是tcpudp

6

Short int

獲得目的端口(如果是tcpudp

7

Short int

 

 

 

返回值:返回TRUE0)為成功,FALSE-1)為失敗。

4、發送數據包接口

BOOL PCP_ip_pkt_send(char src_ip_type,IpPkt *ip_pkt);

作用:發送數據包。

參數:src_ip_type表示源ip是你指定還是隨機生成。p_pkt為你所發送數據包的信息,其中當src_ip_type為1p_pkt里的源ip項為為隨機生成的,即使填了也是無效的。

描述

src_ip_type

指定源ip

2

隨機生成ip

1

返回值:返回TRUE0)為成功,FALSE-1)為失敗。

5.模塊關閉

BOOL PCP_close(void);

作用:釋放資源。

返回值:返回TRUE0)為成功,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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM