计算机网络课程设计_报告

  • 格式:doc
  • 大小:308.00 KB
  • 文档页数:19

1

实 验 报 告

实验名称: 计算机网络课程设计

学生姓名: xxxxxxxxxxxxxxx

专 业: xxxxxxxxxxxxxxx

班 级: xxxxxxxxxxxxxxx

学 号: xxxxxxxxxxxxxxx

指导教师: xxxxxxxxxxxxxxx

实验成绩:

实验地点:

实验时间: 2016 年 5

月 6 日

2 一、实验目的与实验要求

1、实验目的

将书本上抽象的概念与具体实现技术结合,通过网络软件编程的实践,深入理解理论课上学习到的ARP、IP、TCP等重要网络协议的原理,通过自己动手编程封装与发送这些数据包,加深对网络协议的理解,掌握协议帧的结构和工作原理及其对协议栈的贡献。

2、实验要求

网络课程设计包含两个部分的内容:

题目一是数据包的封装发送和解析(ARP/IP/TCP),要求使用Winpcap技术和Socket技术,根据ARP/IP/TCP帧的结构,封装数据包发送到局域网中。另外要捕获网络中的TCP/IP/ARP数据包,解析数据包的内容,并将结果显示,并同时写入日志文件。

题目二是从可选题目中选择一个,可选题目均是网络应用小程序,要求小组使用网络编程技术设计并实现一个网络应用程序,加深对网络协议协的理解,并锻炼网络编程能力。

二、实验设备(环境)及要求

1、实验硬件设备:

计算机型号:联想ThinkPad T430u

处理器型号:Intel i5 主频:

网卡型号:(1)Realtek PCIe GBE (2)Broadcom

3 2、实验软件要求:

操作系统:Windows10

应用软件:Visual Studio 2015 Pro

3、小组成员及分工:

三、实验内容与步骤

1、实验1:数据包的封装发送和解析(ARP/IP/TCP)

(1)实验内容

1) 程序目标:

根据IP帧的结构,封装IP数据包发送到局域网中。并捕获网络中的IP数据包,解析数据包的内容,并将结果显示,并同时写入日志文件。

2) 程序功能:

以命令行形式运行

在标准输出中显示捕获的IP报文的首部字段的内容。

使用winpcap访问网卡,手动封装

定义IP首部的数据结构

填充数据包,发送数据包,捕获数据包

使用winpcap,捕获IP数据包

(2)主要步骤

1) 总体设计:

a. 获取设备列表并打印,打开所选择的适配器; v1.0

可编辑可修改

4 b. 准备工作:定义ip相关的结构体、打开要存放结果的文件,设置过滤器,手写ip数据报(内容有无效的MAC源和目的地址,和均为本机地址的ip源地址和目的地址,即发给自己一个ip报文),设置抓到数据报的解析和输出到文件的操作函数(解析ip报,打印并写入文件:报文的版本、协议、源和目的地址等)。

c. 发包、抓包。

d. 分析获取的数据。

2) 具体实现:

#define HAVE_REMOTE

#include ""

#include ""

#include ""

#include ""

/*4字节的IP地址*/

typedef struct ip_address{

u_char byte1;

5 u_char byte2;

u_char byte3;

u_char byte4;

}ip_address;

/*IPv4首部*/

typedef struct ip_header{

u_char ver_ihl; %s", ++i, d->name);

if (d->description)

printf(" (%s)\n", d->description);

else

printf(" (No description available)\n");

}

if(i==0)

{

printf("\nNo interfaces found! Make sure WinPcap is installed.\n");

return -1;

}

printf("Enter the interface number (1-%d):",i);

scanf("%d", &inum);

if(inum < 1 || inum > i)

{

printf("\nInterface number out of range.\n");

/* 释放设备列表 */

pcap_freealldevs(alldevs);

6 return -1;

}

/* 跳转到选中的适配器 */

for(d=alldevs, i=0; i< inum-1 ;d=d->next, i++);

/* 打开设备 */

if ( (adhandle= pcap_open(d->name, %s is not supported by WinPcap\n",

d->name);

/* 释放设备列表 */

pcap_freealldevs(alldevs);

return -1;

}

/* 打开堆文件*/

dumpfile = pcap_dump_open(adhandle, "D:\\");

if(dumpfile==NULL)

{

fprintf(stderr,"\nError opening output file\n");

return -1;

}

/* 检查数据链路层,只考虑以太网 */

if(pcap_datalink(adhandle)!=DLT_EN10MB)

{

fprintf(stderr, "nThis program works only on Ethernet ");

/* 释放设备列表 */

7 pcap_freealldevs(alldevs);

return -1;

}

if(d->addresses != NULL)

Check the ");

.\n", d->description);

d len:%d\n", timestr, header->, header->len);

u.%u.%u]", ih->,ih->,ih->,ih->;

printf("源地址:[%u.%u.%u.%u]\n", ih->,ih->,ih->,ih->;

FILE *fp;

fp=fopen("D:\\", "a+");

fprintf(fp,"解析结果:");

fprintf(fp,"版本+首部长度:[%u]",ih->ver_ihl);

fprintf(fp,"协议:[%u]",ih->proto);

fprintf(fp,"首部校验和:[%u]",ih->crc);

fprintf(fp,"目的地址:[%u.%u.%u.%u]", ih->,ih->,ih->,ih->;

fprintf(fp,"源地址:[%u.%u.%u.%u]\n", ih->,ih->,ih->,ih->;

fclose(fp);

}

v1.0 可编辑可修改

8 2、实验2:子网内文件传送

(1)实验内容

(明确的实验内容)

设计并实现一个局域网内部的文件传送工具,使用TCP协议进行可靠文件传输。以图形界面运行,不同结点上文件自动同步 (2)主要步骤

(详细的实验步骤(系统/方法/算法等),图文结合)

1) 问题定义:

实现一个局域网内的文件传送与聊天的软件

2) 需求分析:

局域网内的文件传送应当具备以下功能:

在线用户的及时发现和更新

选择一对一或者一对多对话模式

与选择用户进行聊天和文件传输

用户下线通知与更新用户列表

3) 系统设计:

参考飞鸽传书的实现原理,总结设计方案如下:

架构设计:本系统采用本地应用程序设计,仅适用于在同一局域网的主机通信;

互相发现:本系统运行时启动局域网广播线程,发出包含主机名称、主机IP以及新加入标识符的广播表明自己新加入;

用户列表:监听到其他用户的广播信息后更新列表,显示当前在线的用户名和用户IP;

更新列表:在系统退出时会广播本机信息,标识表明自己离开,其余在v1.0 可编辑可修改

9 线用户接收到信息后更新提示该用户下线;

选择用户:可以单独选择或者多项选择用户列表中的用户;

发送消息:选择用户后,在输入框中输入聊天信息,点击“发送”按钮系统会发送UDP数据包给对应用户的ip地址,端口是8011;

接受消息:系统实时监听8011端口以接受不同用户发来的消息并展示在聊天窗口中;

发送文件:选择指定用户,点击“发送文件”按钮,选择本机相应文件后,与目标用户建立TCP连接,发送字节流。端口为8011;

接受文件:监听到有TCP连接请求时建立实时连接,系统提示用户是否接收文件,选择接收后选择相应路径与文件名后进行接收,接收成功后再聊天窗口显示提示信息。

4) 详细设计:

① 局域网用户列表的建立:软件启动后定时的使用UDP协议向这个广播地址发送广播包,端口设置为8001。广播包内容包含主机名、IP、标识符等信息,已启动软件的用户通过8001端口收到此广播包后,就会在自己的用户列表中添加这个用户的用户名、IP地址等信息,从而局域网内的本系统用户都能建立起用户列表;

② 传送与接收信息:传送聊天信息时同样使用UDP协议,用户填写消息后点击按钮调用发送消息的函数,然后通过8011端口发送UDP包。系统在启动时通过开辟新线程来监听8011端口,时刻监听发送到本机的信息。

③ 发送文件:用户发送文件时建立一个带参数的线程来发送文件,调用相应的TCP发送函数来发送文件,使用的是8001端口,由于协议不同因此与之前的广播并不冲突;

④ 接收文件:软件启动时开启一个线程用来接收文件,此线程在正常工作条件下处于阻塞监听状态,直到收到建立TCP连接的请求,之后提示用户收到文件选择是否接受,之后选择保存路径,进行接收。

⑤ 用户离开:用户离线时发送一个离线广播包到的8001端口,包中含有