互联网实践及应用报告.docx

上传人:b****7 文档编号:23562652 上传时间:2023-05-18 格式:DOCX 页数:38 大小:422.67KB
下载 相关 举报
互联网实践及应用报告.docx_第1页
第1页 / 共38页
互联网实践及应用报告.docx_第2页
第2页 / 共38页
互联网实践及应用报告.docx_第3页
第3页 / 共38页
互联网实践及应用报告.docx_第4页
第4页 / 共38页
互联网实践及应用报告.docx_第5页
第5页 / 共38页
点击查看更多>>
下载资源
资源描述

互联网实践及应用报告.docx

《互联网实践及应用报告.docx》由会员分享,可在线阅读,更多相关《互联网实践及应用报告.docx(38页珍藏版)》请在冰豆网上搜索。

互联网实践及应用报告.docx

互联网实践及应用报告

互联网技术及应用实践

实验报告

 

报告名称:

路由器配置及应用

路由追踪的实现

EMAIL的客户端程序

开发一个简单的WEB服务器

学生姓名:

学号:

指导教师:

 

实验一路由器配置及应用

1.实验原理

2.实验步骤

第一步:

在路由器Router1上配置快速以太网口的IP地址

Router1#configureterminal

Router1(config)#interfaceFastEthernet0/0!

进入以太网0口配置状态

或Router1(config)#interfaceFastEthernet1/0

Router1(config-if)#ipaddress172.16.1.1255.255.255.0!

为以太网0口配置地址

Router1(config-if)#noshutdown!

打开以太网0口

Router1(config-if)#end

第二步:

在路由器Router1上配置广域网口的IP地址和时钟频率(假设Router1为DCE端)

Router1#con

Router1(config)#interfaceserial2/0!

进入广域网0口配置状态

或Router1(config)#interfaceserial1/2

Router1(config-if)#ipaddress172.16.2.1255.255.255.0!

为广域网0口配置地址

Router1(config-if)#clockrate64000!

DCE端需设置端口时钟频率

Router1(config-if)#noshutdown!

打开广域网0口

Router1(config-if)#end

验证测试:

验证路由器接口配置状态。

Router1#showipinterfacebrief!

显示IP端口状态简况

InterfaceIP-AddressOK?

MethodStatusProtocol

FastEthernet0/0172.16.1.1/24YESmanualupup

FastEthernet0/1noaddressYESunsetadministrativelydowndown

Serial2/0172.16.2.1/24YESmanualupup

Serial3/0noaddressYESunsetadministrativelydowndown

Null0noaddressYESup

第三步:

为Router1添加静态路由

Router1#con

Router1(config)#iproute172.16.3.0255.255.255.0172.16.2.2!

添加静态路由

Router1(config)#end

Router1#showiproute!

显示路由表

Codes:

C-connected,S-static,R-RIP

O-OSPF,IA-OSPFinterarea

E1-OSPFexternaltype1,E2-OSPFexternaltype2

Gatewayoflastresortisnotset

172.16.0.0/24issubnetted,3subnets

C172.16.1.0isdirectlyconnected,FastEthernet0

C172.16.2.0isdirectlyconnected,Serial0

S172.16.3.0[1/0]via172.16.2.2

Router1#wr!

保存所作的修改

第四步:

在路由器Router2(R2624)上配置快速以太网口的IP地址

Router2#con

Router2(config)#interfacefastethernet0/0

或Router2(config)#interfacefastethernet1/0

Router2(config-if)#ipaddress172.16.3.2255.255.255.0

Router2(config-if)#noshutdown

Router2(config-if)#end

第五步:

在路由器Router2(R2624)上配置广域网口的IP地址

Router2#conf

Router2(config)#interfaceserial2/0

或Router2(config)#interfaceserial1/2

Router2(config-if)#ipaddress172.16.2.2255.255.255.0

Router2(config-if)#noshutdown

Router2(config-if)#end

Router2#showipinterfacebrief

InterfaceIP-AddressOK?

MethodStatusProtocol

FastEthernet0/0172.16.3.2YESmanualupup

FastEthernet0/1unassignedYESunsetadministrativelydowndown

Serial2/0172.16.2.2YESmanualupup

Serial3/0unassignedYESunsetadministrativelydowndown

图下图:

图1.1

第六步:

测试两台路由器之间的连通性

Router2#ping172.16.2.1

Typeescapesequencetoabort.

Sending5,100-byteICMPEchoesto172.16.2.1,timeoutis2seconds:

!

!

!

!

!

Successrateis100percent(5/5),round-tripmin/avg/max=1/1/4ms

如下图:

图1.2

第七步:

为Router2(R2624)添加静态路由

Router2#con

Configuringfromterminal,memory,ornetwork[terminal]?

Enterconfigurationcommands,oneperline.EndwithCNTL/Z.

Router2(config)#iproute172.16.1.0255.255.255.0172.16.2.1

Router2(config)#end

Router2#showiproute

Codes:

C-connected,S-static,R-RIP

O-OSPF,IA-OSPFinterarea

E1-OSPFexternaltype1,E2-OSPFexternaltype2

Gatewayoflastresortisnotset

172.16.0.0/24issubnetted,3subnets

S172.16.1.0[1/0]via172.16.2.1

C172.16.2.0isdirectlyconnected,Serial0

C172.16.3.0isdirectlyconnected,FastEthernet0

Router2#wr

如下图:

图1.3

第八步:

用ping命令对PC1,PC2进行连通性检测

如下图:

图1.4

注意事项:

(1)如果两台路由器经过串口直接相连,则必须在时钟一端设置时钟频率(DCE)。

(2)PC机必须配置默认网关。

实验二路由追踪

1.实验目的:

熟悉掌握路由器实现路由追踪,熟悉ICMP协议

2.实验环境:

MicrosoftVisualC++6.0

3.实验原理:

路由追踪是从源主机向目的主机发送一连串的IP数据报,数据包中封装的是无法交付的UDP数据报。

源主机先向目的主机发送一个回应请求报文(类型8),TTL设置为1,第一个路由器收到后将TTL设为1第一个路由器收到后将TTL减1,这样TTL变为0,分组被废除,同时路由器向源主机发送一个TTL超时报文(类型为11),报文的IP报头中的源IP地址就是第一个路由器的地址,源主机可以通过对该报文进行分析,得到第一个路由器的地址,接着发送TTL等于2的报文得到第二个路由器的地址,再发送TTL等于3的报文,如此下去直到收到目的主机的回应应答报文(类型为0)或不可到达报文(类型为3),或者到了最大跳数(要检测路由器个数的最大值)。

这样,源主机达到了自己的目的,因为这些路由器和最后的目的主机发送的ICMP报文正好给源主机想知道的路由信息——到达目的主机所经过的路由器的IP地址,以及到达其中每一个路由器的往返时间。

4.源代码如下:

#defineWIN32_LEAN_AND_MEAN

#include//使用原始套接字需要WinSock2的支持

#include//进行IPPROTO_IP级别设置时用到

#include

#include

#defineICMP_ECHO8//发送Ping请求时的ICMP报文类型

#defineICMP_ECHOREPLY0//接收Ping回复时的ICMP报文类型

#defineICMP_TIMEOUT11//ICMP超时报文类型

#defineICMP_MIN8//Minimum8-byteICMPpacket(header)

#defineMAX_PACKET1024//MaxICMPpacketsize

#defineDEICMP_PACKSIZE44//DefautICMPPACKETSIZE

charlpdest[16];//用来存放目的IP地址

DWORDcStartTickCount;//用来存放发送包的起始时间

#pragmacomment(lib,"ws2_32.lib")

typedefstruct_icmphdr//ICMP头部定义,被封装在IP包中

{

BYTEi_type;//报文类型

BYTEi_code;//代码

USHORTi_cksum;//校验和

USHORTi_id;//标识符

USHORTi_seq;//序号

}IcmpHeader;

//初始化ICMP头部

voidFillICMPData(char*icmp_data,intdatasize)

{

IcmpHeader*icmp_hdr=NULL;

char*datapart=NULL;

icmp_hdr=(IcmpHeader*)icmp_data;

icmp_hdr->i_type=ICMP_ECHO;//requestanICMPecho

icmp_hdr->i_code=0;

icmp_hdr->i_id=(USHORT)GetCurrentProcessId();

icmp_hdr->i_cksum=0;

icmp_hdr->i_seq=0;

datapart=icmp_data+sizeof(IcmpHeader);

memset(datapart,'E',datasize-sizeof(IcmpHeader));

}

//校验和函数

USHORTchecksum(USHORT*buffer,intsize)

{

unsignedlongcksum=0;

while(size>1)

{

cksum+=*buffer++;

size-=sizeof(USHORT);

}

if(size)

cksum+=*(UCHAR*)buffer;

cksum=(cksum>>16)+(cksum&0xffff);

cksum+=(cksum>>16);

return(USHORT)(~cksum);;

}

intDecodeIPHeader(char*buf,intbytes,structsockaddr_in*from)

{

IcmpHeader*icmphdr=NULL;

DWORDtick;

staticinticmpcount=1;

unsignedshortiphdrlen;

//判断接收操作是否超时

if(!

buf)

{

printf("%2d:

***.***.***.***Requesttimedout.\n",icmpcount++);

return1;

}

tick=GetTickCount();

iphdrlen=(buf[0]&0x0f)*4;

icmphdr=(IcmpHeader*)(buf+iphdrlen);

if(bytes

{

printf("Toofewbytesfrom%s\n",inet_ntoa(from->sin_addr));

return0;

}

//判断接收的ICMP报文是否为超时报文

if(icmphdr->i_type==ICMP_TIMEOUT&&icmphdr->i_code==0)

{

printf("%2d:

%-15s%4dms\n",icmpcount++,inet_ntoa(from->sin_addr),tick-cStartTickCount);

return0;

}

//判断接收的ICMP报文是否为回复报文

elseif(icmphdr->i_type==ICMP_ECHOREPLY&&icmphdr->i_id==GetCurrentProcessId())

{

printf("%2d:

%-15s%4dms\n",icmpcount++,inet_ntoa(from->sin_addr),tick-cStartTickCount);

printf("Tracecomplete!

\n");

return1;

}

//其他类型,表示不可达

else

{

printf("%2d:

Destinationhostisunreachable!

\n",icmpcount++);

return1;

}

}

intmain()

{

WSADATAwsaData;

SOCKETsockRaw=INVALID_SOCKET;

structsockaddr_indest,

from;

inti,bread,fromlen=sizeof(from),timeout=1000,ret;

structhostent*hp=NULL;

char*icmp_data=NULL,*recvbuf=NULL;

USHORTseq_no=0;

printf("DestinationAddress(IP/Hostname):

");

scanf("%s",lpdest);

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

=0)

{

printf("WSAStartup()failed:

%d\n",GetLastError());

return-1;

}

//创建套接字

sockRaw=WSASocket(AF_INET,SOCK_RAW,IPPROTO_ICMP,NULL,0,WSA_FLAG_OVERLAPPED);

if(sockRaw==INVALID_SOCKET)

{

printf("WSASocket()failed:

%d\n",WSAGetLastError());

return-1;

}

//对锁定套接字设置超时

bread=setsockopt(sockRaw,SOL_SOCKET,SO_RCVTIMEO,(char*)&timeout,sizeof(timeout));

if(bread==SOCKET_ERROR)

{

printf("setsockopt(SO_RCVTIMEO)failed:

%d\n",WSAGetLastError());

return-1;

}

timeout=1000;

bread=setsockopt(sockRaw,SOL_SOCKET,SO_SNDTIMEO,(char*)&timeout,sizeof(timeout));

if(bread==SOCKET_ERROR)

{

printf("setsockopt(SO_SNDTIMEO)failed:

%d\n",WSAGetLastError());

return-1;

}

//解析目标地址,将主机名转化为IP地址

memset(&dest,0,sizeof(dest));

dest.sin_family=AF_INET;

if((dest.sin_addr.S_un.S_addr=inet_addr(lpdest))==INADDR_NONE)

{

if((hp=gethostbyname(lpdest))!

=NULL)

{

memcpy(&(dest.sin_addr.S_un.S_addr),hp->h_addr_list[0],hp->h_length);

dest.sin_family=hp->h_addrtype;

printf("dest.sin_addr=%s\n",inet_ntoa(dest.sin_addr));

}

else

{

printf("gethostbyname()failed:

%d\n",WSAGetLastError());

return-1;

}

}

//CreatetheICMPpakcet

icmp_data=(char*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,MAX_PACKET);

recvbuf=(char*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,MAX_PACKET);

if(!

icmp_data)

{

printf("HeapAlloc()failed:

%d\n",GetLastError());

return-1;

}

memset(icmp_data,0,MAX_PACKET);

FillICMPData(icmp_data,DEICMP_PACKSIZE);

printf("HopIPAddressTimeelapsed\n");

//开始发送/接收ICMP报文

for(i=1;i<=255;i++)

{

intbwrote;

//设置IP包的生存期

ret=setsockopt(sockRaw,IPPROTO_IP,IP_TTL,(char*)&i,sizeof(int));

if(ret==SOCKET_ERROR)

{

printf("setsockopt(IP_TTL)failed:

%d\n",WSAGetLastError());

}

((IcmpHeader*)icmp_data)->i_cksum=0;

((IcmpHeader*)icmp_data)->i_seq=seq_no++;//SequencenumberofICMPpackets

((IcmpHeader*)icmp_data)->i_cksum=checksum((USHORT*)icmp_data,DEICMP_PACKSIZE);

//发送ICMP包请求查询

cStartTickCount=GetTickCount();

bwrote=sendto(sockRaw,icmp_data,DEICMP_PACKSIZE,0,(structsockaddr*)&dest,sizeof(dest));

if(bwrote==SOCKET_ERROR)

{

if(WSAGetLastError()==WSAETIMEDOUT)

{

printf("timedout\n");

continue;

}

printf("sendto()failed:

%d\n",WSAGetLastError());

return-1;

}

if(bwrote

{

printf("Wrote%dbytes\n",bwrote);

}

//接收ICMP回复包

bread=recvfrom(sockRaw,recvbuf,MAX_PACKET,0,(structsockaddr*)&from,&fromlen);

if(bread==SOCKET_ERROR)

{

if(WSAGetLastError()==WSAETIMEDOUT)

{

DecodeIPHeader(NULL,0,NULL);

continue;

}

printf("recvfrom()failed:

%d\n",WSAGetLastError());

return-1;

}

if(DecodeIPHeader(recvbuf,bread,&from))

break;

Sleep(1000);

}

system("pause");

if(sockRaw!

=INVALID_SOCKET)

closesocket(sockRaw);

HeapFree(GetProcessHeap(),0,recvbuf);

HeapFree(GetProcessHeap(),0,icmp_data);

WSACleanup();

return0;

}

5.实验结果如图:

 

实验三EMAIL的客户端程序

1.代码如下:

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

当前位置:首页 > 初中教育 > 科学

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

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