互联网实践及应用报告.docx
- 文档编号:23562652
- 上传时间:2023-05-18
- 格式:DOCX
- 页数:38
- 大小:422.67KB
互联网实践及应用报告.docx
《互联网实践及应用报告.docx》由会员分享,可在线阅读,更多相关《互联网实践及应用报告.docx(38页珍藏版)》请在冰豆网上搜索。
互联网实践及应用报告
互联网技术及应用实践
实验报告
报告名称:
路由器配置及应用
路由追踪的实现
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
#include
#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.代码如下:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 互联网 实践 应用 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)