计算机网络课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
中南大学
计算机网络原理
课程设计报告
学生姓名奚培
指导教师张士庚
学院信息科学与工程学院
专业班级计算机科学与技术1303班
学号 0902130325 实验日期 2015年11月
目录
第一章概要设计 (2)
第二章详细设计 (3)
第三章调试与操作说明 (4)
第四章总结 (4)
参考文献 (4)
第一章概要设计
一、过程图
1.1 libpcap捕包过程图
本程序设计libpcap捕包程序包含以下五个过程,如下图:
图1.libpcap 捕包过程
1.2 数据包处理过程图
图2.数据包处理过程
二、主要数据结构
2.1 Ether头
10Mb/s ethernet header
struct ether_header
{
u_int8_t ether_dhost[ETH_ALEN]; // destination eth addr u_int8_t ether_shost[ETH_ALEN]; // source ether addr
u_int16_t ether_type; // packet type ID field
} __attribute__ ((__packed__));
2.2 ARP/RARP协议头
/* ARP header */
class sniff_arp
{
unsigned short int ar_hrd; /* Format of hardware address. */
unsigned short int ar_pro; /* Format of protocol address. */
unsigned char ar_hln; /* Length of hardware address. */
unsigned char ar_pln; /* Length of protocol address. */
unsigned short int ar_op; /* ARP opcode (command). */
#if 0
/* Ethernet looks like this : This bit is variable sized
however... */
unsigned char __ar_sha[ETH_ALEN]; /* Sender hardware address. */
unsigned char __ar_sip[4]; /* Sender IP address. */
unsigned char __ar_tha[ETH_ALEN]; /* Target hardware address. */
unsigned char __ar_tip[4]; /* Target IP address. */
#endif
}
2.3 IP头
/* IP header */
class sniff_ip
{
u_char ip_vhl; /* version << 4 | header length >> 2 */ u_char ip_tos; /* type of service */
u_short ip_len; /* total length */
u_short ip_id; /* identification */
u_short ip_off; /* fragment offset field */
#define IP_RF 0x8000 /* reserved fragment flag */
#define IP_DF 0x4000 /* dont fragment flag */
#define IP_MF 0x2000 /* more fragments flag */
#define IP_OFFMASK 0x1fff /* mask for fragmenting bits */ u_char ip_ttl; /* time to live */
u_char ip_p; /* protocol */
u_short ip_sum; /* checksum */
struct in_addr ip_src,ip_dst; /* source and dest address */
int ip_hl(){ return ip_vhl & 0x0f; }
int ip_v(){ return ip_vhl >>4; }
}
2.4 TCP头
/* TCP header */
typedef u_int tcp_seq;
class sniff_tcp
{
u_short th_sport; /* source port */
u_short th_dport; /* destination port */
tcp_seq th_seq; /* sequence number */
tcp_seq th_ack; /* acknowledgement number */
u_char th_offx2; /* data offset, rsvd */
//#define TH_OFF (((th_offx2 & 0xf0) >> 4)
u_char th_flags;
#define TH_FIN 0x01
#define TH_SYN 0x02
#define TH_RST 0x04
#define TH_PUSH 0x08
#define TH_ACK 0x10
#define TH_URG 0x20
#define TH_ECE 0x40
#define TH_CWR 0x80
#define TH_FLAGS (TH_FIN|TH_SYN|TH_RST|TH_ACK|TH_URG|TH_ECE|TH_CWR)
u_short th_win; /* window */
u_short th_sum; /* checksum */
u_short th_urp; /* urgent pointer */
int th_off(){ return ((th_offx2 & 0xf0) >> 4);}
int dis_flag(int m){ return (th_flags & m)>>(m-1); }
}
2.5 UDP头
class sniff_udp
{
u_int16_t uh_sport;
u_int16_t uh_dport;
u_int16_t uh_len;
u_int16_t uh_sum;
}
三、方法和原理