2022年2022年互联网实践及应用报告 .pdf

上传人:Che****ry 文档编号:33908916 上传时间:2022-08-12 格式:PDF 页数:32 大小:992.98KB
返回 下载 相关 举报
2022年2022年互联网实践及应用报告 .pdf_第1页
第1页 / 共32页
2022年2022年互联网实践及应用报告 .pdf_第2页
第2页 / 共32页
点击查看更多>>
资源描述

《2022年2022年互联网实践及应用报告 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年互联网实践及应用报告 .pdf(32页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、互联网技术及应用实践实验报告报告名称:路由器配置及应用路由追踪的实现EMAIL的客户端程序开发一个简单的WEB 服务器学生姓名:学号:指导教师:实验一路由器配置及应用名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 32 页 - - - - - - - - - 1. 实验原理2. 实验步骤第一步:在路由器 Router1 上配置快速以太网口的 IP地址Router1#configure terminal Router1(config)#interface FastEther

2、net 0/0 ! 进入以太网 0口配置状态或Router1(config)#interface FastEthernet 1/0 Router1(config-if)#ip address 172.16.1.1 255.255.255.0 ! 为以太网0口配置地址Router1(config-if)#no shutdown ! 打开以太网 0口Router1(config-if)#end 第二步:在路由器 Router1 上配置广域网口的 IP 地址和时钟频率(假设Router1为DCE 端)Router1#con Router1(config)#interface serial 2/0 !

3、 进入广域网 0口配置状态或Router1(config)#interface serial 1/2 Router1(config-if)#ip address 172.16.2.1 255.255.255.0 ! 为广域网0口配置地址Router1(config-if)#clock rate 64000 ! DCE端需设置端口时钟频率Router1(config-if)#no shutdown ! 打开广域网 0口Router1(config-if)#end 验证测试:验证路由器接口配置状态。Router1#show ip interface brief ! 显示IP端口状态简况Interf

4、ace IP-Address OK? Method Status Protocol FastEthernet0/0 172.16.1.1/24 YES manual up up FastEthernet0/1 no address YES unset administratively down down Serial2/0 172.16.2.1/24 YES manual up up Serial3/0 no address YES unset administratively down down Null 0 no address YES up 第三步:为 Router1添加静态路由Rout

5、er1#con Router1(config)#ip route 172.16.3.0 255.255.255.0 172.16.2.2 ! 添加静态路由Router1(config)#end Router1#show ip route ! 显示路由表Codes: C - connected, S - static, R - RIP O - OSPF, IA - OSPF inter area 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 32 页 - - - - -

6、- - - - E1 - OSPF external type 1, E2 - OSPF external type 2 Gateway of last resort is not set 172.16.0.0/24 is subnetted, 3 subnets C 172.16.1.0 is directly connected, FastEthernet0 C 172.16.2.0 is directly connected, Serial0 S 172.16.3.0 1/0 via 172.16.2.2 Router1#wr !保存所作的修改第四步:在路由器 Router2(R2624

7、 )上配置快速以太网口的 IP地址Router2#con Router2(config)#interface fastethernet 0/0 或Router2(config)#interface fastethernet 1/0 Router2(config-if)#ip address 172.16.3.2 255.255.255.0 Router2(config-if)#no shutdown Router2(config-if)#end 第五步:在路由器 Router2(R2624 )上配置广域网口的 IP地址Router2#conf Router2(config)#interface

8、 serial 2/0 或Router2(config)#interface serial 1/2 Router2(config-if)#ip address 172.16.2.2 255.255.255.0 Router2(config-if)#no shutdown Router2(config-if)#end Router2#show ip interface brief Interface IP-Address OK? Method Status Protocol FastEthernet0/0 172.16.3.2 YES manual up up FastEthernet0/1 u

9、nassigned YES unset administratively down down Serial2/0 172.16.2.2 YES manual up up Serial3/0 unassigned YES unset administratively down down 图下图:图1.1 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 32 页 - - - - - - - - - 第六步:测试两台路由器之间的连通性Router2#ping 172.16.2.

10、1 Type escape sequence to abort. Sending 5, 100-byte ICMP Echoes to 172.16.2.1, timeout is 2 seconds: ! Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/4 ms 如下图:图1.2 第七步:为 Router2(R2624 )添加静态路由Router2#con Configuring from terminal, memory, or network terminal? Enter configuration com

11、mands, one per line. End with CNTL/Z. Router2(config)#ip route 172.16.1.0 255.255.255.0 172.16.2.1 Router2(config)#end Router2#show ip route Codes: C - connected, S - static, R - RIP O - OSPF, IA - OSPF inter area E1 - OSPF external type 1, E2 - OSPF external type 2 Gateway of last resort is not set

12、 172.16.0.0/24 is subnetted, 3 subnets S 172.16.1.0 1/0 via 172.16.2.1 C 172.16.2.0 is directly connected, Serial0 C 172.16.3.0 is directly connected, FastEthernet0 Router2#wr 如下图:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 32 页 - - - - - - - - - 图1.3 第八步:用

13、ping 命令对PC1 ,PC2 进行连通性检测如下图:图1.4 注意事项:(1)如果两台路由器经过串口直接相连,则必须在时钟一端设置时钟频率(DCE )。(2)PC 机必须配置默认网关。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 32 页 - - - - - - - - - 实验二 路由追踪1. 实验目的:熟悉掌握路由器实现路由追踪,熟悉ICMP协议2. 实验环境:Microsoft Visual C+6.0 3. 实验原理:路由追踪是从源主机向目的主机发送一连串的

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

15、(要检测路由器个数的最大值)。这样,源主机达到了自己的目的,因为这些路由器和最后的目的主机发送的ICMP报文正好给源主机想知道的路由信息到达目的主机所经过的路由器的IP 地址,以及到达其中每一个路由器的往返时间。4. 源代码如下:#define WIN32_LEAN_AND_MEAN #include /使用原始套接字需要 WinSock2的支持#include /进行 IPPROTO_IP级别设置时用到#include #include #define ICMP_ECHO 8 /发送 Ping 请求时的ICMP报文类型#define ICMP_ECHOREPLY 0 /接收 Ping 回复时

16、的ICMP报文类型#define ICMP_TIMEOUT 11 /ICMP超时报文类型#define ICMP_MIN 8 /Minimum 8-byte ICMP packet (header) #define MAX_PACKET 1024 /Max ICMP packet size #define DEICMP_PACKSIZE 44 /Defaut ICMP PACKET SIZE char lpdest16; /用来存放目的IP 地址DWORD cStartTickCount; /用来存放发送包的起始时间名师资料总结 - - -精品资料欢迎下载 - - - - - - - - -

17、- - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 32 页 - - - - - - - - - #pragma comment( lib, ws2_32.lib ) typedef struct _icmphdr /ICMP头部定义,被封装在 IP 包中 BYTE i_type; /报文类型 BYTE i_code; /代码 USHORT i_cksum; /校验和 USHORT i_id; /标识符 USHORT i_seq; /序号IcmpHeader; / 初始化 ICMP头部void FillICMPData(char *icmp_data,

18、int datasize) IcmpHeader *icmp_hdr=NULL; char *datapart=NULL; icmp_hdr=(IcmpHeader *)icmp_data; icmp_hdr-i_type=ICMP_ECHO; /request an ICMP echo 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(datapar

19、t,E,datasize-sizeof(IcmpHeader); / 校验和函数USHORT checksum(USHORT *buffer,int size) unsigned long cksum=0; while(size1) cksum+=*buffer+; size-=sizeof(USHORT); if(size) cksum+=*(UCHAR *)buffer; cksum=(cksum16)+(cksum & 0 xffff); cksum+=(cksum16); return (USHORT)(cksum); int DecodeIPHeader(char *buf,int

20、bytes,struct sockaddr_in *from) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 32 页 - - - - - - - - - IcmpHeader *icmphdr=NULL; DWORD tick; static int icmpcount=1; unsigned short iphdrlen; /判断接收操作是否超时 if(!buf) printf(%2d: *.*.*.* Request timed out.n,icmpcount+)

21、; return 1; tick=GetTickCount(); iphdrlen=(buf0 & 0 x0f)*4; icmphdr=(IcmpHeader *)(buf+iphdrlen); if(bytessin_addr); return 0; /判断接收的 ICMP报文是否为超时报文 if(icmphdr-i_type=ICMP_TIMEOUT&icmphdr-i_code=0) printf(%2d: %-15s %4dmsn,icmpcount+,inet_ntoa(from-sin_addr),tick-cStartTickCount); return 0; /判断接收的 IC

22、MP报文是否为回复报文 else if(icmphdr-i_type=ICMP_ECHOREPLY&icmphdr-i_id=GetCurrentProcessId() printf(%2d: %-15s %4dmsn,icmpcount+,inet_ntoa(from-sin_addr),tick-cStartTickCount); printf(Trace complete!n); return 1; /其他类型 , 表示不可达 else printf(%2d: Destination host is unreachable!n,icmpcount+); return 1; 名师资料总结

23、- - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 32 页 - - - - - - - - - int main() WSADATA wsaData; SOCKET sockRaw=INVALID_SOCKET; struct sockaddr_in dest, from; int i,bread,fromlen=sizeof(from),timeout=1000,ret; struct hostent *hp=NULL; char *icmp_data=NULL,*recvbuf=NU

24、LL; USHORT seq_no=0; printf(Destination Address(IP/Host name):); scanf(%s,lpdest); if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0) printf(WSAStartup() failed:%dn,GetLastError(); return -1; /创建套接字sockRaw=WSASocket(AF_INET,SOCK_RAW,IPPROTO_ICMP,NULL,0,WSA_FLAG_OVERLAPPED); if(sockRaw=INVALID_SOCKET) printf(

25、WSASocket() failed:%dn,WSAGetLastError(); return -1; /对锁定套接字设置超时 bread=setsockopt(sockRaw,SOL_SOCKET,SO_RCVTIMEO,(char *)&timeout,sizeof(timeout); if(bread=SOCKET_ERROR) printf(setsockopt(SO_RCVTIMEO) failed:%dn,WSAGetLastError(); return -1; timeout=1000; bread=setsockopt(sockRaw,SOL_SOCKET,SO_SNDTI

26、MEO,(char *)&timeout,sizeof(timeout); if(bread=SOCKET_ERROR) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 32 页 - - - - - - - - - printf(setsockopt(SO_SNDTIMEO) failed:%dn,WSAGetLastError(); return -1; /解析目标地址,将主机名转化为IP 地址 memset(&dest,0,sizeof(dest); dest.sin

27、_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_list0,hp-h_length); dest.sin_family=hp-h_addrtype; printf(dest.sin_addr=%sn,inet_ntoa(dest.sin_addr); else printf(gethostbyname() failed:%dn,W

28、SAGetLastError(); return -1; /Create the ICMP pakcet 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: %dn,GetLastError(); return -1; memset(icmp_data,0,MAX_PA

29、CKET); FillICMPData(icmp_data,DEICMP_PACKSIZE); printf(Hop IP Address Time elapsedn); /开始发送 / 接收 ICMP报文 for(i=1;ii_cksum =0; (IcmpHeader *)icmp_data)-i_seq=seq_no+; /Sequence number of ICMP packets (IcmpHeader *)icmp_data)-i_cksum=checksum(USHORT *)icmp_data,DEICMP_PACKSIZE); /发送 ICMP包请求查询 cStartTic

30、kCount=GetTickCount(); bwrote=sendto(sockRaw,icmp_data,DEICMP_PACKSIZE,0,(struct sockaddr *)&dest,sizeof(dest); if(bwrote=SOCKET_ERROR) if(WSAGetLastError()=WSAETIMEDOUT) printf(timed outn); continue; printf(sendto() failed:%dn,WSAGetLastError(); return -1; if(bwroteDEICMP_PACKSIZE) printf(Wrote %d

31、bytesn,bwrote); /接收 ICMP回复包 bread=recvfrom(sockRaw,recvbuf,MAX_PACKET,0,(struct sockaddr *)&from,&fromlen); if(bread=SOCKET_ERROR) if(WSAGetLastError()=WSAETIMEDOUT) DecodeIPHeader(NULL,0,NULL); continue; printf(recvfrom() failed:%dn,WSAGetLastError(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - -

32、- - - - - 名师精心整理 - - - - - - - 第 11 页,共 32 页 - - - - - - - - - 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(); return 0;

33、5. 实验结果如图:实验三 EMAIL 的客户端程序1. 代码如下:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 32 页 - - - - - - - - - using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Wind

34、ows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.Net.Mail; using System.Net.Sockets; using System.IO; namespace mail / / MainWindow.xaml 的交互

35、逻辑 / public partial class MainWindow : Window TcpClient server;/接服务器 string sendstring;/用于存储 POP3 服务命令参数 byte bufferstring;/用于存储 POP3 服务命令参数字节数 NetworkStream networkstream;/接服务器与服务器进行数据交互 StreamReader streamreader;/读取信息数据 public MainWindow() InitializeComponent(); private void sendMail_Click(object

36、sender, RoutedEventArgs e) /SmtpClient client = new SmtpClient(); SmtpClient client = new SmtpClient(); client.Port = 25; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 32 页 - - - - - - - - - MailMessage mail = new MailMessage(); mail.From = new MailAddress(,

37、我是1234);/加上自定义的发件人显示名称 mail.To.Add(new MailAddress(); mail.Subject = Test SmtpClient; mail.Body = This message is for testing.; client.DeliveryMethod = SmtpDeliveryMethod.Network; client.UseDefaultCredentials = true; /启用身份认证 mail.Priority = MailPriority.Normal; /邮件优先级我的文档 消息.txt); /附件 /mail.Body = n

38、ew 我的文档 ttt.txt, Encoding.Default).ReadToEnd(); 从文本文件中读取邮件内容 mail.BodyEncoding = System.Text.Encoding.UTF8; client.Credentials = new System.Net.NetworkCredential(, 19891217421X);/如果是匿名发送则不需要这一句( 这里将账号和密码用x 和*代替了 ) / client.Send(mail); client.SendCompleted += new SendCompletedEventHandler(SendComplet

39、edCallback);/回调函数 string userState = 测试; client.SendAsync(mail, userState); private static void SendCompletedCallback(object sender, System.ComponentModel.AsyncCompletedEventArgs e) if (e.Cancelled) /邮件发送被取消 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 32 页

40、- - - - - - - - - if (e.Error != null) /邮件发送失败 else /发送成功 private void Showinfo() richTextBox1.Document.Blocks.Clear(); try string strResult = ; sendstring = RETR + this.textBox4.Text + rn;/存储从服务器获得一条信息的命令 bufferstring = Encoding.ASCII.GetBytes(sendstring.ToCharArray(); networkstream.Write(bufferstr

41、ing, 0, bufferstring.Length); strResult = streamreader.ReadLine(); if (strResult0 != -) /不断地读取邮件内容,只到结束标志:英文句号 while (strResult != .) this.richTextBox1.AppendText(strResult + rn); strResult = streamreader.ReadLine(); else this.richTextBox1.AppendText(rn + 邮件错误 + rn); catch (Exception ey) 名师资料总结 - -

42、-精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 32 页 - - - - - - - - - MessageBox.Show(ey.Message); private void getMail_Click(object sender, RoutedEventArgs e) Showinfo(); private void login_Click(object sender, RoutedEventArgs e) server = new TcpClient(this.textBox1.Tex

43、t, 110);/实例 TcpClient 类对象联接服务器 networkstream = server.GetStream();/实例NetworkStream 类对象接收返回发送的数据 streamreader = new StreamReader(networkstream);/实例 StreamReader类对象读取数据 try sendstring = USER + this.textBox2.Text + rn;/存储用户名 bufferstring = Encoding.GetEncoding(gb2312).GetBytes(sendstring.ToCharArray();

44、 networkstream.Write(bufferstring, 0, bufferstring.Length);/将用户名发送到服务器richTextBox1.AppendText(streamreader.ReadLine() + rn);/将 用用户显示在 richTextBox控件中 sendstring = PASS + this.textBox3.Text + rn;/存储用户密码 bufferstring = Encoding.GetEncoding(gb2312).GetBytes(sendstring.ToCharArray(); networkstream.Write(

45、bufferstring, 0, bufferstring.Length);/将用户密码发送到服务器richTextBox1.AppendText(streamreader.ReadLine() + rn); sendstring = STAT + rn;/储存从服务器获得所有信息序号和字节数命令 bufferstring = 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 32 页 - - - - - - - - - Encoding.GetEncoding(gb23

46、12).GetBytes(sendstring.ToCharArray(); networkstream.Write(bufferstring, 0, bufferstring.Length);/从服务器获得所有信息序号和字节数 string strResult = streamreader.ReadLine();/读取从服务器返回的数据 if (strResult.IndexOf(-) = -1) richTextBox1.AppendText(strResult + rn); sendstring = LIST + rn;/存储从服务器中获得信息列表和大小的命令 bufferstring

47、= Encoding.GetEncoding(gb2312).GetBytes(sendstring.ToCharArray(); networkstream.Write(bufferstring, 0, bufferstring.Length); string strInfo = streamreader.ReadLine(); string str = strInfo.Split( ); richTextBox1.AppendText(邮 件 数 量 : + str1 + rn); richTextBox1.AppendText(str1 + :封邮件总容量为 + str2 + rn);

48、MessageBox.Show(this.textBox2.Text + 用户您好! ); else MessageBox.Show(读取信息有误,请重新登录); catch (Exception ey) MessageBox.Show(ey.Message); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 32 页 - - - - - - - - - 2. 实验结果:实验四 简单的 WEB 服务器开发1. 实验目的名师资料总结 - - -精品资料欢迎下载 - - -

49、 - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 32 页 - - - - - - - - - 了解 web服务器的实现原理,并编程实现一个简单的web服务器。2. 开发环境Windows xp 操作系统Java 语言编程3. 实验原理WWW是以 Internet作为传输媒介的一个应用系统,WWW网上最基本的传输单位是 Web网页。 WWW的工作基于客户机 / 服务器计算模型,由Web 浏览器 (客户机) 和 Web服务器 ( 服务器 )构成,两者之间采用超文本传送协议(HTTP )进行通信。 HTTP协议是基于 TCP/

50、IP 协议之上的协议,是Web浏览器和 Web服务器之间的应用层协议,是通用的、无状态的、面向对象的协议。HTTP协议的作用原理包括四个步骤:连接,请求,应答,关闭应答。根据上述 HTTP协议的作用原理,实现GET请求的 Web服务器程序的方法如下:(1) 创建 ServerSocket 类对象,监听端口 8080。这是为了区别于HTTP 的标准 TCP/IP 端口 80 而取的 ; (2) 等待、接受客户机连接到端口8080,得到与客户机连接的socket; (3) 创建与 socket 字相关联的输入流instream 和输出流 outstream; (4) 从与 socket 关联的输入

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁