网络数据包抓取以及流量分析

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include

#include

typedef struct macaddress{

u_char mac1;

u_char mac2;

u_char mac3;

u_char mac4;

u_char mac5;

u_char mac6;

};

typedef struct macheader{

macaddress dest;

macaddress src;

u_short type;

};

//IP地址32位,这里用4个字节来表示。typedef struct ipaddress{

u_char by1;

u_char by2;

u_char by3;

u_char by4;

};

//IP报文格式

typedef struct ipbaowen{

u_char ver_ihl;//首部长度和版本号

u_char tos;//服务类型

u_short tlen;// 报文总长度

u_short ident;// 标识

u_short flags_fo;// 标志和片偏移

u_char ttl;// 生存时间

u_char proto;//协议类型

#define IP_ICMP 1

#define IP_IGMP 2

#define IP_TCP 6

#define IP_UDP 17

#define IP_IGRP 88

#define IP_OSPF 89

u_short crc;

ipaddress saddr;

ipaddress daddr;

};

typedef struct tcpheader{

u_short sport;// 源端口

u_short dport;// 目的端口

u_int th_seq;// 序列号

u_int th_ack;// 确认号

u_char th_lenand;// 报文长度

u_char th_flags;//标志

#define TH_FIN 0x01

#define TH_SYN 0x02

#define TH_RST 0x04

#define TH_PSH 0x08

#define TH_ACK 0x10

#define TH_URG 0x20

u_short th_win;//窗口

u_short th_sum;//校验和

u_short th_urp;//紧急

};

// UDP格式

typedef struct udpheader{

u_short sport;// Source port 源端口

u_short dport;// Destination port 目的端口

u_short uh_len;// Datagram length 用户数据包长度u_short uh_sum;// Checksum 校验和

};

typedef struct udpnode{

ipaddress saddr;

ipaddress daddr;

u_short sport;

u_short dport;

u_short length;

u_int upnum;

u_int downnum;

struct udpnode * next;

struct udpnode * pre;

};

typedef struct tcpnode{

ipaddress saddr;

ipaddress daddr;

u_short sport;

u_short dport;

u_short length;

u_int upnum;

u_int downnum;

struct tcpnode * next;

struct tcpnode * pre;

};

#define tcphashtablelength 10

#define udphashtablelength 10

udpnode udphashtable[udphashtablelength];

tcpnode tcphashtable[tcphashtablelength];

void initudp()

{

for(int i =0; i < udphashtablelength; i++)

{

udphashtable[i].pre = udphashtable + i;

udphashtable[i].next = NULL;

udphashtable[i].length =0;

}

}

void inittcp()

{

for(int i =0; i < tcphashtablelength; i++)

{

tcphashtable[i].pre = tcphashtable + i;

tcphashtable[i].next = NULL;

tcphashtable[i].length =0;

}

}

int hash(int a,int b,int c,int d)

{

return(a %2+ b %3+ c %4+ d %5);

}

void packet_handler(u_char *param,const struct pcap_pkthdr *header,const u_char *pkt_data); void dispatcher_handler(u_char *,const struct pcap_pkthdr *,const u_char *);

void showudphashtable();

void showtcphashtable();

////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////

int main()

{

FILE * PP;

pcap_if_t *alldevs;

相关文档
最新文档