|
|
|
贾伟 |
陕西理工学院数学与计算机科学学院 |
2015—06 全国能源工作会议 |
|
网络协议分析实验说明
适用网络工程专业2012级.
实验总学时:10学时;实验项目:6个,其中3个验证,3个综合,必须完成1、2、4这三个实验。通过使用wireshark捕获数据包进行分析和使用C语言编程实现对数据包的构造和分析进行实验,每个实验完成后需要将实验捕获的数据、程序代码等实验数据保存下来并上交。 实验完成后,除上交纸质的实验报告外,还要上交实验有关的电子文件,要求文件命名为:“实验X_学号_姓名_其它说明”,X取值为中文汉字“一”、“二”、…… ,连接符为英文输入的下划线“_”,学号为完整长度,各项中间均不得添加空格.
实验项目表 |
序号 | 实验项目名称 | 内容 | 课时 | 性质 |
0 | 网络协议分析基础 (预备实验) | 数据包捕获软件的使用;C语言编程。 | 2 | 验证/可选 |
1 | 网络层协议分析 | 捕获ARP、IP、ICMP网络数据包并分析;编程构造IP数据包. | 4 | 综合/必做 |
2 | 传输层协议分析 | 捕获TCP、UDP网络数据包并分析;编程构造UDP数据包。 | 4 | 综合/必做 |
3 | HTTP协议分析 | 捕获HTTP网络数据包并分析. | 2 | 验证/可选 |
4 | 协议分析器程序设计 | 编程捕获数据包并统计数据包信息。 | 4 | 综合/可选 |
5 | Winpcap编程基础 | 通过Winpcap 捕获发送数据包 | 2 | 验证/可选 |
| | | | |
| | | | |
龚育之
1.官场礼仪
网络协议分析基础(预备实验)
0.A 数据包捕获软件的使用
数据包捕获分析软件建议选择Wireshark,因为它目前是全世界最广泛的网络数据包分析软件之一.
参考文献:(ISBN:978—7—115-30236—6)
Chris Sanders;诸葛建伟等(译)。Wireshark数据包分析实战(第2版)。人民邮电出版社。2013,3.
0。A.1尝试软件的下载和安装
0.A.2设置软件捕获过滤器
0。A.3选取网卡,开启捕获
0。A。4停止捕获,保存捕获数据,打开捕获的数据文件
0.A.5打开捕获的数据文件,查看数据包内容
0。A.6设置显示过滤器
0。A.8 Wireshark高级数据包分析
查看网络端点和网络会话;跟踪TCP流,图形展示IO流和数据流。
0。B C语言编程与网络数据包操作分析
熟悉内存数据块的数据保存形式和对其使用不同指针的读取形式所获得的不同数据内容。
0。B.1 C的有关知识回顾
1) 了解ANSI C and ISO C的Keywords
C89 has 32 keywords (reserved words with special meaning): auto break case char const continue default do | yjhdouble else enum extern float for goto if | int long register return short signed sizeof 视频压缩技术static | struct switch typedef union unsigned void volatile while | | | | |
|
|
2) 掌握C的有关基本数据类型及其长度
类型 | 长度(bit) | 说明 |
char: | 8 | typical 8—bits |
short: | 16 | typical 16—bits |
int: | 16/32 | typical 16-bits or 32—bits,bits—number of int must be more than short. |
long: | 32 | typical 32-bits,also larger than int |
| | |
| | |
3)字符数组和结构体定义
(1)定义字符数组的语法
(2)定义结构体的语法
(3)数据类型的强制类型转换语法
4)指针操作
(1)定义指针变量的语法
(2)指向字符数组的指针
(3)指向结构体的指针
5)比特位操作(与、或和移位)
0.B.2 C语言编程练习
1) 输出内存地址的16进制形式
2) 讨论IPv4地址的定义和操作
定义形式
i)定义为32bit长度的无符号整数
unsigned int ip;
ii)定义为4个8bit长度的无符号字符串
unsigned char ip[4];
实现
1)点分十进制形式的输入输出;
2)判断是否是合法的IP地址;
3)判断属于的IP地址类别(A、B、C、D类);
4)给IP地址和掩码,给出网络前缀;
5)给2个IP地址和掩码,判断两个IP是否属于同一个网络.
3)字节序(BYTE ORDER)讨论
了解字节序(大端序和小端序)的含义.
参考网上资料:http://zh。wikipedia。org/wiki/字节序.
1)如何判断本机的字节序。
int main(int argc, char **argv)
{
//怎样判断机器的**字节顺序**是高字节在前还是低字节在前?
//1。A。有个使用指针的方法:2.另外一个可能是用联合。
int x = 0x87654321;
unsigned char * p;
p = (unsigned char *)&x;
printf("%X\n", x);//87654321
for (int i = 0; i < 4; i++){
gaoa
printf(”%2X”, p[i]);
}//21436587
if (*(char *)&x == 0x21)
printf("\nlittle-endian\n");
else
printf(”\nbig—endian\n");
system(”PAUSE");
return 0;
}
2)定义字节序的转换函数(宏)
/*网络字节序(NETWORK BYTE ORDER)转换函数*/
/* NETWORK BYTE ORDER CONVERSION NOT NEEDED ON A BIG-ENDIAN COMPUTER */
/* X86计算机为 Little-endian*/
#define htons(x) ( ( 0xff & ((x)>〉8) ) | ( (0xff & (x)) <〈 8 ) )
#define htonl(x) ( (((x)>>24) & 0x000000ff) | (((x)>> 8) & 0x0000ff00) | \