计算机网络课程设计_报告-(23795)

  • 格式:doc
  • 大小:531.22 KB
  • 文档页数:37

下载文档原格式

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

实验报告

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

学生姓名: xxxxxxxxxxxxxxx

专业: xxxxxxxxxxxxxxx

班级: xxxxxxxxxxxxxxx

学号: xxxxxxxxxxxxxxx

指导教师:xxxxxxxxxxxxxxx

实验成绩:

实验地点:

实验时间:2016 年 5月 6 日

一、实验目的与实验要求

1、实验目的

将书本上抽象的概念与具体实现技术结合,通过网络软件编程的实践,深入

理解理论课上学习到的ARP、IP、TCP 等重要网络协议的原理,通过自己动手

编程封装与发送这些数据包,加深对网络协议的理解,掌握协议帧的结构和工作原理及其对协议栈的贡献。

2、实验要求

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

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

题目二是从可选题目中选择一个,可选题目均是网络应用小程序,要求小组

使用网络编程技术设计并实现一个网络应用程序,加深对网络协议协的理解,并锻炼网络编程能力。

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

1、实验硬件设备:

计算机型号:联想ThinkPad T430u

处理器型号: Intel i5 主频: 1.8Hz

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

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.获取设备列表并打印,打开所选择的适配器;

b.准备工作:定义 ip 相关的结构体、打开要存放结果的文件,设置过滤器,手写

ip 数据报(内容有无效的 MAC 源和目的地址,和均为本机地址的 ip 源地址和目的地址,即发给自己一个 ip 报文),设置抓到数据报的解析和输出到文件的操作函数(解析 ip 报,打印并写入文件:报文的版本、协议、源和目

的地址等)。

c.发包、抓包。

d.分析获取的数据。

获取设备列表

打开选择适配器

过滤数据包

解析数据包2)具体实现:

#define HAVE_REMOTE

#include "pcap.h"

#include "remote-ext.h"

#include "stdio.h"

#include "stdlib.h"

/*4 字节的 IP 地址 */

typedef struct ip_address{

u_char byte1;

u_char byte2;

u_char byte3;

u_char byte4;

}ip_address;

/*IPv4 首部 */

typedef struct ip_header{

u_char ver_ihl;//版本(4bits) +首部长度(4bits)

u_char tos;//服务类型

u_short tlen;// 总长类型

u_short identification;// 标识

u_short flags_fo;//标志位+段偏移量

u_char ttl;// 存活时间

u_char proto;//协议

u_short crc;//首部校验和

ip_address daddr;//目的地址

ip_address saddr;//源地址

u_int op_pad;// 选项与填充

}ip_header;

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

/* packet handler函数原型*/

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

int main()

{

pcap_if_t *alldevs;

pcap_if_t *d;

int inum;

int i=0;

pcap_t *adhandle;

char errbuf[PCAP_ERRBUF_SIZE];

u_int netmask;

char packet_filter[] = "ip";// 抓包类型