网络实验报告Word下载.docx

上传人:b****5 文档编号:18699779 上传时间:2022-12-31 格式:DOCX 页数:22 大小:1.63MB
下载 相关 举报
网络实验报告Word下载.docx_第1页
第1页 / 共22页
网络实验报告Word下载.docx_第2页
第2页 / 共22页
网络实验报告Word下载.docx_第3页
第3页 / 共22页
网络实验报告Word下载.docx_第4页
第4页 / 共22页
网络实验报告Word下载.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

网络实验报告Word下载.docx

《网络实验报告Word下载.docx》由会员分享,可在线阅读,更多相关《网络实验报告Word下载.docx(22页珍藏版)》请在冰豆网上搜索。

网络实验报告Word下载.docx

按图搭建实验环境,将两台PC机通过RJ-45连接电缆相连。

PC1(172.16.1.2)PC2(172.16.1.3)

实验步骤:

1. 

下载并安装 

WinPcap, 

推荐的版本是3.0 

2. 

从 

http:

//winpcap.polito.it 

下载 

WinPcap 

Developer’s 

Pack 

并解压缩 

3. 

把 

Winpcap 

中的 

Includes 

目录添加为新的包含文件目录 

 

添加库 

wpcap.lib 

和 

wsock32.lib 

4.接收包实验,健入对应程序

5.使用ping程序,分析接收包

6.键入发送包程序

7.使用ethrea分析实验结果

注意事项

编译的时候又遇到问题——“无法打开pcap.h”。

解决方法:

1.安装Winpcap驱动。

下载地址:

//www.winpcap.org/install/bin/WinPcap_3_1.exe。

2.将Winpcap的Include,Lib目录添加进VC6.0的环境变量中;

针对每一个项目,先用VC打开项目,然后在"

Project->

Settings"

,标签栏出选择"

C/C++"

,在"

Preprocessor 

definitions"

的输入框里添加"

WPCAP"

,再选择"

Link"

Object/library 

modules"

Packet.lib"

实验内容分析:

1)程序中用到的链路层协议中有如下要求:

接口的地址列表 

接口的掩码列表 

(与地址列表一一对应) 

接口的广播地址列表 

4. 

目标地址列表 

2)捕获数据包:

pcap_t*pcap_open(constchar*source,intsnaplen,intflags)

只是在捕获数据包的时候前天的程序用的是pcap_loop(),基于pcap_loop()抓包机制的回调很方便而且在某些情况下是一个不错的选择。

但是,处理回调有些时候不适用——它使得程序更复杂,尤其是在应用程序与多线程或C++类有关的情况下。

3)用于过滤的函数:

Winpcap提供(libpcap也提供)的一个强大特性是过滤引擎(filteringengine)。

它提供了一个非常有效的接收网络流量的方法,并且它通常与Winpcap提供的抓包机制集成在一起。

用于过滤数据包的函数是pcap_complie()和pcap_setfilter()。

4)发送数据包

intpcap_sendpacket(pcap_t*p,u_char*buf,intsize)

发送一个原始数据包(rawpacket)到网络上。

p是用来发送数据包的那个接口,buf包含着要发送的数据包的数据(包括各种各样的协议头),size是buf所指的缓冲区的尺寸,也就是要发送的数据包的大小。

MAC循环冗余码校验不必被包含,因为它很容易被计算出来并被网络接口驱动添加。

如果数据包被成功发送,返回0;

否则,返回-1。

Winpcap是针对Win32平台上的抓包和网络分析的一个架构。

它包括一个核心态的包过滤器,一个底层的动态链接库(packet.dll)和一个高层的不以来于系统的库(wpcap.dll)。

实验的具体代码分析:

实验贴图以及分析结果:

发包程序运行结果,我们的主机ip号是172.16.1.202

目的主机的ip号是172.16.6.2

发送的内容是一个原始数据包(rawpacket)

如图所示,每次都会进行四次请求和响应。

发包程序运行结果,源主机ip号是172.16.14.3

目的主机的ip号是172.16.1.202

如图中蓝色部分所示,源主机一共向目的主机进行了四次请求,同时目的主机向源主机进行了四次响应。

实验二跨网络数据传输实验

1、了解IP地址与硬件地址的区别,掌握IP包结构2、理解ICMP包的回送和回送响应消息功能

1、设计程序,其功能是发送ICMP数据包给指定网段的主机。

2、利用Ethreal截获数据包,分析ICMP包,判断是否成功发送数据包给指定网段主机。

定义数据结构

(1)定义IP头部的数据结构

typedefstruct_iphdr//定义IP首部

{

unsignedcharh_verlen;

//4位首部长度,4位IP版本号

unsignedchartos;

//8位服务类型TOS

unsignedshorttotal_len;

//16位总长度(字节)

unsignedshortident;

//16位标识

unsignedshortfrag_and_flags;

//3位标志位

unsignedcharttl;

//8位生存时间TTL

unsignedcharproto;

//8位协议(TCP,UDP或其他)

unsignedshortchecksum;

//16位IP首部校验和

unsignedintsourceIP;

//32位源IP地址

unsignedintDestIp;

//32位目的IP地址

}IP

(2)定义ICMP头部的数据结构

(3)定义链路层数据包包头的数据结构

typedefstructethdr//以太头结构

unsignedchareh_dst[6];

unsignedchareh_src[6];

unsignedshorteh_type;

}ETHDR,*PETHDR;

_HEADER;

填充数据包首部

(1)填充IP首部

icmp.iphdr.h_verlen=(4<

<

4|sizeof(icmp.iphdr)/sizeof(unsignedlong));

//高四位IP版本号,低四位首部长度

icmp.iphdr.tos=0;

icmp.iphdr.total_len=htons(60);

//htons(sizeof(IP_HEADER)+sizeof(ICMP_HEADER));

icmp.iphdr.ident=htons(0x7b3e);

icmp.iphdr.frag_and_flags=0;

icmp.iphdr.ttl=126;

icmp.iphdr.proto=IPPROTO_ICMP;

icmp.iphdr.checksum=0;

icmp.iphdr.sourceIP=inet_addr(SourceIp);

icmp.iphdr.DestIp=inet_addr(DestIp);

(2)填充ICMP首部

icmp.ihdr.i_type=8;

icmp.ihdr.i_code=0;

icmp.ihdr.i_cksum=0;

icmp.ihdr.i_id=htons(0x0200);

icmp.ihdr.i_seq=htons(0x1600);

(3)填充链路包首部

eth.eh_dst[0]=0x00;

//本地路由MAC地址

eth.eh_dst[1]=0x0f;

eth.eh_dst[2]=0xe2;

eth.eh_dst[3]=0x5d;

eth.eh_dst[4]=0x26;

eth.eh_dst[5]=0x74;

eth.eh_src[0]=0x00;

//本地主机MAC地址

eth.eh_src[1]=0x1b;

eth.eh_src[2]=0xb9;

eth.eh_src[3]=0x74;

eth.eh_src[4]=0x11;

eth.eh_src[5]=0x50;

eth.eh_type=htons(0x0800);

(4)填充发送缓冲区

(5)获得网卡实例对象

(6)发送数据包

while

(1){

if(pcap_sendpacket(adhandle,(unsignedchar*)SendBuf1,datasize+14)!

=0){

printf("

发送失败.\n"

);

}

Sleep(200);

}

2、编译并运行程序。

3、用Ethereal抓包并分析数据包注意事项

实验注意事项:

实验是用主机单向向目的主机发送ICMP报文,目的主机只需要发送回复即可。

可以看到发送方式主机172.16.1.202目的主机是172.16.6.2。

通过两个主机的路由可以看出,这是一个跨网发送IP数据报的实验,因此发送是会涉及到路由的转发问题,在源主机发送时,应该填充的MAC地址是路由的MAC地址。

但目的IP地址是目的主机的IP地址。

路由器的MAC地址需要用DOS命令行arp–a这条语句来解析路由地址,获得路由器的IP和MAC地址,这里只用MAC地址。

试验中由于IP包的报头填充不正确,导致数据包不断丢失然后重传。

这在图中是可以看出来的。

实验三传输层网络数据收发

1、了解IP地址与硬件地址的区别;

2、理解ICMP包的回送和回送响应消息功能;

3、掌握利用Winpcap发送数据包的方法。

设计程序,其功能是发送ICMP数据包给指定网段的主机。

(1)服务器的实现

如前所述,TCP/IP协议的应用一般采用客户/服务器模式,因此在实际应用中,必须有客户和服务器两个进程,并且首先启动服务器。

面向连接的协议(如TCP)的套接字系统调用如图所示:

服务器必须首先启动,直到它执行完accept()调用,进入等待状态后,方能接收客户请求。

假如客户在此前启动,则connect()将返回出错代码,连接不成功。

在这个程序中,将两个工程添加到一个工作区。

同时还要链接一个ws2_32.lib的库文件。

服务器端代码如下:

#include"

windows.h"

stdio.h"

#defineTRUE1

/*这个程序建立一个套接字,然后开始无限循环;

每当它通过循环接收到一个连接,则打印出一个信息。

当连接断开,或接收到终止信息,则此连接结束,程序再接收一个新的连接。

命令行的格式是:

streams*/

main()

intsock,length;

structsockaddr_inserver;

structsockaddrtcpaddr;

intmsgsock;

charbuf[1024];

intrval,len;

/*建立套接字*/

WSADATAWSADAtA;

if(WSAStartup(MAKEWORD(2,2),&

WSADAtA))

{

printf("

WSAStArtupfAiled:

%d\n"

GetLastError());

return-1;

server.sin_family=AF_INET;

server.sin_addr.S_un.S_addr=INADDR_ANY;

//=htonl(inaddr_any);

server.sin_port=htons(5656);

sock=socket(AF_INET,SOCK_STREAM,0);

if(sock<

0){

perror("

openingstreamsocket"

exit

(1);

/*使用任意端口命名套接字*/

if(bind(sock,(structsockaddr*)&

server,sizeof(server))<

bindingstreamsocket"

/*找出指定的端口号并打印出来*/

length=sizeof(server);

if(getsockname(sock,(structsockaddr*)&

server,&

length)<

gettingsocketname"

socketport#%d\n"

ntohs(server.sin_port));

/*开始接收连接*/

listen(sock,5);

len=sizeof(structsockaddr);

do{

msgsock=accept(sock,(structsockaddr*)&

tcpaddr,(int*)&

len);

if(msgsock==-1)

perror("

accept"

elsedo{

memset(buf,0,sizeof(buf));

if((rval=recv(msgsock,buf,1024,0))<

0)

{

readingstreammessage"

intk=GetLastError();

}

if(rval==0)

printf("

endingconnection\n"

else

-->

%s\n"

buf);

}while(rval!

=0);

closesocket(msgsock);

}while(TRUE);

/*因为这个程序已经有了一个无限循环,所以套接字"

sock"

从来不显式关闭。

然而,当进程被杀死或正常终止时,所有套接字都将自动地被关闭。

*/

exit(0);

(2)客户端实现

#defineDATA"

halfaleague,halfaleague..."

/*这个程序建立套接字,然后与命令行给出的套接字连接;

连接结束时,在连接上发送

一个消息,然后关闭套接字。

streamc主机名端口号

端口号要与服务器程序的端口号相同*/

main(intargc,char*argv[])

intsock;

structhostent*hp;

WSADATAWSADAtA;

/*使用命令行中指定的名字连接套接字*/

hp=gethostbyname(argv[1]);

if(hp==0){

fprintf(stderr,"

%s:

unknownhost\n"

argv[1]);

exit

(2);

memcpy((char*)&

server.sin_addr,(char*)hp->

h_addr,hp->

h_length);

if(connect(sock,(structsockaddr*)&

connectingstreamsocket"

exit(3);

while

(1)

if(send(sock,DATA,sizeof(DATA),0)<

sendingonstreamsocket"

);

Sleep(200);

(3)运行服务器和客户机,这两个程序是一组自收自发形式的TCP收发程序

这组C/S程序是自发自收程序,利用的是设置好的5656端口,运行的结果如上所示,这组程序验证了TCP协议的运作机制,运用套接字socket的编程打开一个端口对应的接受客户机所要求的响应。

实验四网络协议分析实验

1、使用Ping命令测试目标主机是否在线。

2、利用Ethreal截获数据包,分析三次握手机制

(1)Ping命令:

ping

(2)使用Ethreal查看结果:

显示4次reply

(3)实验截图

(4)结果分析

从结果中可以看出,浏览器版本是ipv4,头部长度为20byte,总长度是60byte

操作系统是windows(生存时间128秒)。

协议是因特网控制报文协议ICMP,校验和的校验结果是正确的。

报文来自172.16.2.202(源主机IP),目的IP218.22.21.21。

实验五网络命令的使用

1、掌握各个网络命令的运行方法;

2、理解网络命令的运行原理;

1、输入命令。

2、利用Ethreal截获数据包,各个命令的运行结果。

输入以下命令,观察运行结果:

1.1ARP命令:

arp命令显示和修改地址解析协议使用的“因特网至适配器”地址解析转化表。

arp命令显示HostName变量指定的主机的当前ARP条目。

主机可以由名称或编号指定,它使用因特网点十进制符号。

1.2Ipconfig命令:

该诊断命令显示所有当前的TCP/IP网络配置值。

该命令在运行DHCP系统上的特殊用途,允许用户决定DHCP配置的TCP/IP配置值。

  更新DHCP配置参数。

该选项只在运行DHCP客户端服务的系统上可用。

要指定适配器名称,请键入使用不带参数的ipconfig命令显示的适配器名称。

  /release[adapter]

  发布当前的DHCP配置。

该选项禁用本地系统上的TCP/IP,并只在DHCP客户端上可用。

  如果没有参数,那么ipconfig实用程序将向用户提供所有当前的TCP/IP配置值,包括IP地址和子网掩码。

该使用程序在运行DHCP的系统上特别有用,允许用户决定由DHCP配置的值。

1.3Nbtstas命令:

该诊断命令使用NBT(TCP/IP上的NetBIOS)显示协议统计和当前TCP/IP连接。

该命令只有在安装了TCP/IP协议之后才可用。

  nbtstat[-aremotename][-AIPaddress][-c][-n][-R][-r][-S][-s][interval]

  参数

  -aremotename

  使用远程计算机的名称列出其名称表。

  -AIPaddress

  使用远程计算机的IP地址并列出名称表。

  

  -c

  给定每个名称的IP地址并列出NetBIOS名称缓存的内容。

  -n

  列出本地NetBIOS名称。

“已注册”表

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1