TCP-IP协议分析与编程实验报告.doc_第1页
TCP-IP协议分析与编程实验报告.doc_第2页
TCP-IP协议分析与编程实验报告.doc_第3页
TCP-IP协议分析与编程实验报告.doc_第4页
TCP-IP协议分析与编程实验报告.doc_第5页
免费预览已结束,剩余23页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

至诚学院实验报告课程名称: TCP/IP协议编程实践 姓 名: XXX 学 号: 211xxxxxx 系 别: 计算机工程系 专 业: 软件工程 年 级: 2012级 年 月 日 实验一 系统时间同步程序【设计目的】设计简单的客户/服务器程序实现客户系统时间和服务器系统时间同步【设计要求】TCP :客户:(1)客户创建流套接字,向服务器发起TCP连接。 (2)连接创建成功后,接收服务器返回的时间,更新客户系统时间。 (3)断开与服务器的连接。服务器:(1)服务器创建监听套接字,监听客户TCP连接请求。 (2)当收到一个客户TCP连接请求,创建连接套接字同意与其创建连接。 (3)获取系统时间,通过连接套接字返回给客户。UDP :客户:(1)客户创建数据报套接字,通过该套接字向服务器发出”time”命令获取服务器系统时间。 (2)接收服务器返回的时间,更新客户系统时间。 (3)断开与服务器的连接。服务器:(1)服务器创建数据报套接字,等待接收客户数据。 (2)接收客户发来的“time”命令,获取系统时间,通过套接字返回给客户。【开发环境】 1、操作系统: Windows 7 操作系统 2、Winpcap开放代码函数库 3、语言:C+ 4、整个程序的核心就是利用Windows Socket 进行网络设计实现,使用C/S结构【背景知识】 时间协议(TIME protocol)是一个在RFC 868内定义的网络协议。它用作提供机器可读的日期时间资讯。时间协议可以在TCP或UDP上使用。在TCP上,主机会连接支援时间协议的服务器的TCP埠 37。服务器会传送32位二进制数字然后断开连接,数字表示由格林威治时间1900年1月1日午夜0时0分0秒至当时的总秒数。主机在接收到时间后断开连接。 在UDP上,客户端会每送一个(通常为空的)数据包到UDP埠 37。服务器会把包含时间的数据包传回。在过程中没有进行连线。TCP协议为终端设备提供了面向连接的、可靠的网络服务,UDP协议为终端设备提供了无连接的、不可靠的数据报服务。从下图我们可以看出,TCP协议为了保证数据传输的可靠性,相对于UDP报文,TCP报文头部有更多的字段选项。【设计思路】系统客户端与服务端建立连接,发送同步请求到同步系统时间的流程图如下,在整个时间同步的过程中服务器必须处于工作状态,时刻监听客户端的请求信息,监听到客户端的时间同步请求时,根据客户端的需要,来进行服务响应,客户端在接收到服务器的响应报文后,根据算服务器发过来的时间来同步系统时间。创建socket服务器绑定端口并设定IP监听同步请求等待建立连接接收同步请求获取服务器当前时间响应客户端同步请求并获取当前时间关闭socket客户端请求连接获取服务器时间获取客户端当前时间创建socket同步请求获取客户端当前时间与服务器进行时间同步关闭socketNYYYYYYYNNNNNN连接请求服务请求服务响应【核心代码】TCP server:/获取系统时间printf(服务器端系统时间为:);time_t timep; /间值time_t 整型long int,保存19701月1000秒现刻秒数struct tm *p; time(&timep); /获取1970到现在的秒数p=localtime(&timep); /将秒数转换线现在的时间/年份从1900 年算起至今的年数/月份从一月算起,范围从0-11printf(%.2d/%.2d/%.2d %.2d:%.2d:%.2dn,(p-tm_year+1900),( 1+p-tm_mon), p-tm_mday,p-tm_hour, p-tm_min, p-tm_sec);/ctime()将参数timep所指的time_t结构中的信息转换成真实世界所使用的时间 日期表示方法,然后将结果以字符串形态返回。/printf ( 当前时间: %s, asctime (p) );send_buf0=p-tm_year; send_buf1=p-tm_mon; send_buf2=p-tm_mday;send_buf3=p-tm_hour;send_buf4=p-tm_min;send_buf5=p-tm_sec;TCP client:/打印当前客户端时间time_t timep;struct tm *p;time(&timep);p=localtime(&timep); /取得当地时间printf(客户端当前时间:);printf(%.2d/%.2d/%.2d %.2d:%.2d:%.2dn,(p-tm_year+1900),( 1+p-tm_mon), p-tm_mday,p-tm_hour, p-tm_min, p-tm_sec);printf(n);/unsigned _cdecl _getsystime(struct tm *); 获取系统时间/unsigned _cdecl _setsystime(struct tm *, unsigned); 修改系统时间p-tm_year=recv_buf0;p-tm_mon=recv_buf1; p-tm_mday=recv_buf2;p-tm_hour=recv_buf3-3;p-tm_min=recv_buf4;p-tm_sec=recv_buf5;setsystime(p,0); /修改系统时间p是结构体 0是无符号 日期没有符号printf(更新客户系统时间:);printf(%.2d/%.2d/%.2d %.2d:%.2d:%.2dn, p-tm_year+1900, p-tm_mon+1, p-tm_mday,p-tm_hour, p-tm_min, p-tm_sec);printf(修改成功!n);UDP与TCP代码类似【界面及运行结果】TCP server:TCP client:UDP server:UDP client:实验二 聊天程序设计【设计目的】设计简单的客户/服务器程序实现客户和服务器相互收发数据直到一端输入“end”结束。【设计要求】客户:(1)客户创建流套接字,向服务器发起TCP连接。(或是客户创建数据报套接字) (2)连接创建成功后,通过套接字向服务器持续发送或是接收数据。 (3)输入或是收到命令”end”,结束收发数据,并断开与服务器的连接。服务器:(1)服务器创建监听套接字,监听客户TCP连接请求。(或是创建数据报套接字) (2)当收到一个客户TCP连接请求,创建连接套接字同意与其创建连接。 (3)通过套接字与客户持续发送或是接收数据。 (4)输入或是收到”end“命令,结束与该客户的收发数据,断开连接。【开发环境】 1、操作系统: Windows 7 操作系统 2、Winpcap开放代码函数库 3、语言:C+ 4、整个程序的核心就是利用Windows Socket 进行网络设计实现,使用C/S结构【背景知识】一个简单的聊天程序,对程序员的观点来看就是在多个1/0断电之间实现多对多的通信。基于socket的局域网通信是一种灵活的、易于实现的、低成本的方法。它可以运行在各种使用TCP/IP协议作为通讯协议的网络上。而在socket API的帮助下,开发基于socket的局域网通信软件也是易于实现的。TCP (Transmission Control Protocol)属于传输层协议。其中TCP提供IP环境下的数据可靠传输,它提供的服务包括数据流传送、可靠性、有效流控、全双工操作和多路复用。通过面向连接、端到端和可靠的数据包发送。通俗说,TCP支持的应用协议主要有:Telnet、FTP、SMTP等TCP是面向对象的连接,是安全可靠的,是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂。每个TCP报文头部都包含源端口号(sourceport)和目的端口号(destinationport),用于标识和区分源端设备和目的端设备的应用进程。在TCP/IP协议栈中,源端口号和目的端口号分别与源IP地址和目的IP地址组成套接字(socket),唯一的确定一条TCP连接。【设计思路】根据实验要求及功能设置可以得到如下流程图,启动服务器,服务器等待客户端发送信息,然后客户端就可以与服务端进行聊天,当客户端或服务器接受或者发送end命令时,就断开连接。NYYN连接请求发送和接受消息客户端请求连接通过套接字发送消息创建socket断开连接YYNNEnd命令NY关闭socketY创建socket服务器绑定端口并设定IP监听同步请求等待建立连接通过连接套接字接收和发送消息关闭socketEnd命令断开连接N【核心代码】TCP server:/获取系统时间printf(服务器端系统时间为:);time_t timep; /间值time_t 整型long int,保存19701月1000秒现刻秒数struct tm *p; time(&timep); /获取1970到现在的秒数p=localtime(&timep); /将秒数转换线现在的时间/年份从1900 年算起至今的年数/月份从一月算起,范围从0-11printf(%.2d/%.2d/%.2d %.2d:%.2d:%.2dn,(p-tm_year+1900),( 1+p-tm_mon), p-tm_mday,p-tm_hour, p-tm_min, p-tm_sec);/ctime()将参数timep所指的time_t结构中的信息转换成真实世界所使用的时间 日期表示方法,然后将结果以字符串形态返回。/printf ( 当前时间: %s, asctime (p) );send_buf0=p-tm_year; send_buf1=p-tm_mon; send_buf2=p-tm_mday;send_buf3=p-tm_hour;send_buf4=p-tm_min;send_buf5=p-tm_sec;TCP client:/打印当前客户端时间time_t timep;struct tm *p;time(&timep);p=localtime(&timep); /取得当地时间printf(客户端当前时间:);printf(%.2d/%.2d/%.2d %.2d:%.2d:%.2dn,(p-tm_year+1900),( 1+p-tm_mon), p-tm_mday,p-tm_hour, p-tm_min, p-tm_sec);printf(n);/unsigned _cdecl _getsystime(struct tm *); 获取系统时间/unsigned _cdecl _setsystime(struct tm *, unsigned); 修改系统时间p-tm_year=recv_buf0;p-tm_mon=recv_buf1; p-tm_mday=recv_buf2;p-tm_hour=recv_buf3-3;p-tm_min=recv_buf4;p-tm_sec=recv_buf5;setsystime(p,0); /修改系统时间p是结构体 0是无符号 日期没有符号printf(更新客户系统时间:);printf(%.2d/%.2d/%.2d %.2d:%.2d:%.2dn, p-tm_year+1900, p-tm_mon+1, p-tm_mday,p-tm_hour, p-tm_min, p-tm_sec);printf(修改成功!n);UDP与TCP代码类似【界面及运行结果】TCP server:TCP client:UDP server:UDP client:实验三 TCP和UDP套接字综合应用【设计目的】设计简单的客户/服务器,服务器实现并发同时响应客户的UDP通信要求,也能响应客户端发过来的TCP通信要求。【设计要求】(1)TCP、UDP(2)C/S(3)多线程编程TCP客户:(1) 客户创建流套接字,向服务器发起TCP连接。(2) 连接创建成功后,通过套接字向服务器持续发送或是接收数据。 (3)输入或是收到命令”end”,结束收发数据,并断开与服务器的连接。UDP客户:(1)客户创建数据报套接字,通过该套接字向服务器发出”time”命令获取服务器系统时间。(2)接收服务器返回的时间,更新客户系统时间。(3)断开与服务器的连接。服务器:针对TCP客户,提供的服务如下:(1)服务器创建监听套接字,监听客户TCP连接请求。(2)当收到一个客户TCP连接请求,创建连接套接字同意与其创建连接。(3)通过套接字与客户持续发送或是接收数据。(4)输入或是收到”end“命令,结束与该客户的收发数据,断开连接。针对UDP客户,提供的服务如下:(1)服务器创建数据报套接字,等待接收客户数据。(2)接收客户发来的“time”命令,获取系统时间,通过套接字返回给客户。【开发环境】 1、操作系统: Windows 7 操作系统 2、Winpcap开放代码函数库 3、语言:C+ 4、整个程序的核心就是利用Windows Socket 进行网络设计实现,使用C/S结构【背景知识】一个简单的聊天程序,对程序员的观点来看就是在多个1/0断电之间实现多对多的通信。基于socket的局域网通信是一种灵活的、易于实现的、低成本的方法。它可以运行在各种使用TCP/IP协议作为通讯协议的网络上。而在socket API的帮助下,开发基于socket的局域网通信软件也是易于实现的 时间协议(TIME protocol)是一个在RFC 868内定义的网络协议。它用作提供机器可读的日期时间资讯。时间协议可以在TCP或UDP上使用。在TCP上,主机会连接支援时间协议的服务器的TCP埠 37。服务器会传送32位二进制数字然后断开连接,数字表示由格林威治时间1900年1月1日午夜0时0分0秒至当时的总秒数。主机在接收到时间后断开连接。 在UDP上,客户端会每送一个(通常为空的)数据包到UDP埠 37。服务器会把包含时间的数据包传回。在过程中没有进行连线。TCP协议为终端设备提供了面向连接的、可靠的网络服务,UDP协议为终端设备提供了无连接的、不可靠的数据报服务。从下图我们可以看出,TCP协议为了保证数据传输的可靠性,相对于UDP报文,TCP报文头部有更多的字段选项。 【设计思路】在服务器上创建两个线程,分别用来接收TCP客户端的请求和UDP客户端的请求系统客户端与服务端建立连接,在整个时间同步的过程中服务器必须处于工作状态,时刻监听客户端的请求信息,监听到客户端的时间同步请求时,根据客户端的需要,来进行服务响应,客户端在接收到服务器的响应报文后,根据算服务器发过来的时间来同步系统时间。启动服务器,服务器等待客户端发送信息,然后客户端就可以与服务端进行聊天,当客户端或服务器接受或者发送end命令时,就断开连接。NY创建socketUDP线程绑定端口并设定IP等待建立连接获取服务器当前时间响应客户端同步请求并获取当前时间关闭socketYY获取服务器时间TCP客户端请求连接获取客户端当前时间创建socket获取客户端当前时间与服务器进行时间同步关闭socketYYYNNNNN连接请求服务请求服务响应创建socketTCP线程绑定端口并设定IP监听同步请求等待建立连接通过连接套接字接收和发送消息关闭socketEnd命令断开连接YNNTCP客户端请求连接通过套接字发送消息创建socket断开连接YYEnd命令关闭socketN发送time命令接收time命令YN连接请求发送和接受消息服务器【核心代码】 Server:/创建线程struct TcpThreadParamSOCKET socket; /通信套接字sockaddr_in addr; /;DWORD WINAPI TcpSerThread(LPVOID lpParam);/TCP接收数据线程函数DWORD WINAPI UdpSerThread(LPVOID lpParam);/UDP接收数据线程函数DWORD WINAPI TcpSerRecvThread(LPVOID lpParam);/TCP接收数据线程函数DWORD WINAPI TcpSerSendThread(LPVOID lpParam);/TCP发送数据线程函数/UDP接收数据线程函数DWORD WINAPI UdpSerThread(LPVOID lpParam) WSADATA wsaData;int iport=DEFAULT_PORT; /服务器进程端口号SOCKET sSocket; /服务器套接字SOCKET sServe;struct sockaddr_in ser,cli; /服务器地址,客户端地址int iLen;char send_bufBUF_LENGTH; /发送缓存char recv_bufBUF_LENGTH; /接收缓存int iSend,iRecv; /接收数据和发送数据长度time_t rawtime;/time_t是long型struct tm *timeinfo;/时间的结构体/TCP接收数据线程函数DWORD WINAPI TcpSerRecvThread(LPVOID lpParam)char recv_bufBUF_LENGTH;/接收缓存int iRecv; /获取线程参数SOCKET sAccept = (TcpThreadParam*)lpParam)-socket;SOCKADDR_IN SerAddr = (TcpThreadParam*)lpParam)-addr;while(1)iRecv=recv(sAccept,recv_buf,sizeof(recv_buf),0);if (iRecv =SOCKET_ERROR) /接收错误printf(recv() Failed:%dn,WSAGetLastError();break;else if (!strcmp(recv_buf,end)break;elseprintf(client say:n);printf(%sn,recv_buf);Client_end:与实验二的end客户端一致Client_time:与实验一的time客户端一致【界面及运行结果】Server:Client_end:Client_time:实验四 Web服务器【设计目的】设计一个简单的web服务器,它仅能处理一个请求。【设计要求】Web服务器:(1) 当一个客户(浏览器,输入URL:/index.html)连接时创建一个连接套接字;(2) 从连接套接字接收http请求报文。(3) 解释该请求以确定所请求的文件(解析文件名);(4) 从服务器的文件系统获得请求的文件。(5) 创建一个由请求的文件组成的http响应报文。(报文包含状态行+实体体)。(6) 经TCP连接想请求的浏览器发送响应。如果浏览器请求的文件不在服务器,服务器返回“404 Not Found”差错报文。【开发环境】 1、操作系统: Windows 7 操作系统 2、Winpcap开放代码函数库 3、语言:C+ 4、整个程序的核心就是利用Windows Socket 进行网络设计实现,使用C/S结构【背景知识】HTTP协议是应用层的协议,定义了服务器端和客户端之间文件传输的沟通方式。HTTP协议用于从WWW服务器传输超文本到本地浏览器的传送协议。由于HTTP协议支持的服务不限于WWW,还可以是其它服务,它允许用户在统一的界面下,采用不同的协议访问不同的服务。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示等。C/S网络架构客户端/服务器架构,通常情况下,数据存储在服务器端,客户端和服务器端都有一个独立的应用程序,可以进行独立的操作,通过网络进行数据传输。常用的传输协议包括:TCP/IP:基于连接的协议优点:由于是有连接的传输,对于数据的准确性是有保证的。缺点:系统资源占用较多。UDP/IP:无连接的协议(数据报)优点:系统资源占用少。缺点:无法保证传输的准确性。【设计思路】(1)创建ServerSocket类对象,监听端口5050。这是为了区别于HTTP的标准TCP/IP端口80而取的;(2)等待、接受客户机连接到端口5050,得到与客户机连接的socket;(3)创建与socket字相关联的输入流instream和输出流outstream;(4)从与socket关联的输入流instream中读取一行客户机提交的请求信息,请求信息的格式为:GET路径/文件名HTTP/1.1(5)从请求信息中获取请求类型。如果请求类型是GET,则从请求信息中获取所访问的HTML文件名。没有HTML文件名时,则以index.html作为文件名;(6)如果HTML文件存在,则打开HTML文件,把HTTP头信息和HTML文件内容通过socket传回给Web浏览器,然后关闭文件。否则发送错误404 Not Found;(7)关闭与相应Web浏览器连接的socket字。可以总结出Web服务器的设计流程并作出其设计流程图,如图【核心代码】/接收成功,打印接收数据,打印出http请求报文的内容 printf(recv data from client:%sn,recv_buf); char *p;p=strtok(recv_buf, );strcpy(command,p);printf(command=%sn,command);p=strtok(NULL, );strcpy(filename,p+1);printf(filename=%sn,filename);while(p!=NULL) printf(%sn,p); p=strtok(NULL,);if(strlen(filename)=0) strcpy(filename,index.html);/获取请求的文件名,打开文件int i=0,len;fp=fopen(filename,r); /打开文件if(fp) /打开成功 fseek(fp,0L,SEEK_END); /求文件长度,先定位指针到文件尾 len=ftell(fp); /计算文件长度 fseek(fp,0L,SEEK_SET); /重置指针至文件头 memset(read_file_buf,0,sizeof(recv_buf); fread(read_file_buf,sizeof(char),len,fp); /读取文件内容 printf(%sn,read_file_buf);/处理接收数据,构造http响应报文/发送数据给客户 memset(send_buf,0,sizeof(send_buf); strcpy(send_buf,HTTP/1.1 200 OKrnrn); /状态行 iSend=send(sAccept,send_buf,sizeof(send_buf),0); if (iSend=SOCKET_ERROR) /发送失败 printf(send() Failed:%dn,WSAGetLastError(); break; else printf(send success!n); /发送成功 strcpy(send_buf,read_file_buf); iSend=send(sAccept,send_buf,sizeof(send_buf),0); if(iSend=SOCKET_ERROR) /发送失败 printf(send()Failed:%dn,WSAGetLastError(); break; else printf(send success!n); else /打开文件失败,返回无响应报文 memset(send_buf,0,sizeof(send_buf); strcpy(send_buf,HTTP/1.1 404 Not Foundrnrn); iSend=send(sAccept,send_buf,sizeof(send_buf),0);if(iSend=SOCKET_ERROR) printf(send()Failed:%dn,WSAGetLastError(); break;else printf(%sn,send_buf); printf(send success!n); 【界面及运行结果】Web界面:实验五 监控IP包流量【设计目的】设计一个winpcap程序用于捕获主机上IP数据报,并对该这些数据报中的关键信息进行解析。【设计要求】(1)IP数据报格式,协议栈数据的封装和解封。 (2)winpcap设计程序简单实现监控本地网络中的IP流量,捕获一段时间内以本地为源地址或是目的地址的IP数据报(不包括广播形式的发出的数据报),并对捕获的IP数据报进行分析和统计,列出本机与其他主机之间不同协议类型IP数据报的数量。【开发环境】 1、操作系统: Windows 7 操作系统 2、Winpcap开放代码函数库 3、语言:C+ 4、整个程序的核心就是利用Windows Socket 进行网络设计实现,使用C/S结构【背景知识】 WinPcap用于捕获和分析网络数据包。用户可以根据需要,选择捕获指定的IP地址、端口号和协议类型的数据包(默认捕获局域网内的所有数据包)。捕获后系统在用户界面以十六进制的形式实时地显示这些数据包的完整信息,并解析其帧长、源MAC地址、目的MAC地址、以太网类型、源IP地址、目的IP地址、IP协议、源端口号、目的端口号等内容并显示在界面上。对于数据包的捕获,如果在一个繁忙的网络上进行,而不设置任何过滤,则得到的数据包是非常多的。如果应用程序不进行必要的性能优化,那么将会丢失大量的数据包。因此对捕包性能的优化必不可少,本系统采用多线程来解决此问题:一个线程负责捕获数据包,一个线程负者数据处理,一个线程负责用户界面显示。表是常用的IP协议和相应的字段值协议名ICMPIGMPTCPEGPIGPUDPIPv6OSPF协议字段P数据报的第4至7位是IP首部长度,该字段可以用来准确定位上层协议的起始位置(例如:TCP的首部)。第10字节是协议字段,指出该IP数据报携带的数据使用何种协议,常用的协议字段如图所示。第13至16字节是源IP地址,第17至20字节是目的IP地址。因此可以据此解析出该数据包的源IP地址和目的IP地址。TCP报文段的第1至2字节是源端口号,第3至4字节是目的端口号。第13字节的前4位是数据偏移,该字段实际上指出了TCP报文段的首部长度。如果TCP承载的是HTTP协议,则可以据此定位HTTP协议的起始位置。 【设计思路】(1) 开启指定网卡;(2) 设置过滤规则;(3) 循环捕获网络数据包,以及分析处理网络数据包;程序流程图如下开始捕获IP数据包显示捕获的IP源地址、目的地址、协议类型、数据报数量目的地址协议类型数据报数量源地址目的地址协议类型数据报数量选择要使用的网卡编译设置过滤器开始结束满足用户设定的过滤条件不显示YN【核心代码】/ 定时器时间,单位毫秒#define CLOCK 10000#define BUF_IP_LENGTH 64typedef struct fint tcpnum;int udpnum;inticmpnum;char src_addrBUF_IP_LENGTH;char dst_addrBUF_IP_LENGTH;struct f *next;f;/直接方式捕获数据包while (res=pcap_next_ex(adhandle,&header,&pkt_data)=0)end=clock();if(end-beginCLOCK)break;ih = (ip_header *) (pkt_data +14); /length of ethernet headersprintf(ip_src_buf, %d.%d.%d.%d,ih-saddr.byte1,ih-saddr.byte2,ih-saddr.byte3,ih-saddr.byte4);sprintf(ip_dst_buf, %d.%d.%d.%d,ih-daddr.byte1,ih-daddr.byte2,ih-daddr.byte3,ih-daddr.byte4);/ 查找flag=0;for(p_list=p_head; p_list=p_list-next)if(strcmp(ip_src_buf, p_list-src_addr) = 0) & (strcmp(ip_dst_buf, p_list-dst_addr) = 0)flag=1;if(6 = (int)ih-proto)p_list-tcpnum+;else if(17 = (int)ih-proto)p_list-udpnum+;else if(1 = (int)ih-proto)p_list-icmpnum+;if(p_list-next = NULL)break;if(flag = 0)/ 说明链表原先没有该节点p_list-next = (struct f *)malloc(sizeof(f);p_list-next-udpnum=0;p_list-next-tcpnum=0;p_list-next-icmpnum=0;sprintf(p_list-next-src_addr, ip_src_buf);sprintf(p_list-next-dst_addr, ip_dst_buf);p_list-next-next=NULL; printf( 源地址 | 目的地址 | 协议类型 | 数据报数量 n);for(p_list=p_head-next;p_list != NULL; p_list=p_list-next)if(p_list-tcpnum != 0)printf(%s %s %s,%9dn, p_list-src_addr, p_list-dst_addr, tcp, p_list-tcpnum);if(p_list-udpnum != 0)printf(%s %s %s,%9dn, p_list-src_addr, p_list-dst_addr, udp, p_list-udpnum);if(p_list-icmpnum != 0)printf(%s %s %s,%9dn, p_list-src_addr, p_list-dst_addr, icmp, p_list-icmpnum);while(1)p_list=p_head;p_head=p_list-next;if(p_head = NULL)break;free(p_list);p_list=p_head;p_list = NULL;return 0;【界面及运行结果】实验六 IP地址的合法性及归属子网判断【设计目的】设计一个简单程序判断输入的IP地址和CID

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论