网络数据包抓取以及流量分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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();