ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:590.26KB ,
资源ID:28401519      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/28401519.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(计算机网络实验报告79221351.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

计算机网络实验报告79221351.docx

1、计算机网络实验报告79221351(此文档为word格式,下载后您可任意编辑修改!)计算机网络实验报告实验一 使用winpcap网络层收发包实验一. 实验目的. 1、了解数据链路层通信的基本方法;2、了解pcap编程方法。二. 实验步骤及结果1. 查询本机mac地址,IP地址,路由器物理地址(1) 进入windows命令输入框: 点击开始菜单运行输入cmd,然后回车:(2) 在出现的windows命令输入中输入ipconfigall命令查看主机的网络参数(3) 输入arp a命令查看路由器的参数。2. 运行test.dsw程序,选择合适的网卡填入project setting debug中3.

2、 打开ethereal进行侦听,同时运行fs.dsw ,观察到如下结果,实验成功 三.实验相关算法及函数(1) 定义了一个链表的结点pcap_if( )pcap_if struct pcap_if *next;指针 char *name; 给pcap_open_live ( )函数传递的一个描述设备名称的字符串指针 char *description; 如果不为NULL,则指向描述设备的一个可读字符串 struct pcap_addr *addresses; 一个指向接口地址链表的第一个元素的指针 bpf_u_int32 flags; 接口标志;(2)获取本地设备列表函数pcap_findal

3、ldevs_ex (char *source, struct pcap_rmtauth *auth,pcap_if_t *alldevs, char *errbuf);该函数创建一个能用pcap_open函数打开的网络适配器设备列表。“source”是一个告诉函数在哪儿查找设备的参数, 是一个字符型的缓冲区,根据新的WinPcap语法保存着“源的位置”。参数auth是一个指向pcap_rmtauth结构体的指针。该指针保持着认证RPCAP连接到远程主机所需的信息。该参数对本地主机请求没什么意义,此时可以设为NULL。参数alldevs是一个“pcap_if_t”结构体类型的指针,在该函数中被正

4、确的分配。该函数成功返回时,该指针被设置为指向网络设备链表的第一个元素,该链表的每个元素都是“pcap_if_t”类型。参数errbuf是一个指向用户分配的缓冲区(大小为PCAP_ERRBUF_SIZE)的指针,如果函数操作出现错误,该缓冲区将存储该错误信息。函数成功则返回0,如果有错误则返回-1。“alldevs”变量返回设备列表,当函数正确返回时,“alldevs”不能为NULL。也就是说,当系统没有任何接口时,该函数也返回-1。“errbuf”变量返回错误信息(3) pcap_freealldevs函数由函数pcap_findalldevs_ex或pcap_findalldevs函数返回

5、的网络适配器设备链表,必须调用pcap_freealldevs函数释放。(4) 函数pcap_open(const char *source, int snaplen, int flags, int read_timeout, struct pcap_rmtauth *auth, char *errbuf);参数source是以0结尾的字符串,包含所需打开源的名称。该源名称必需包含格式化的前缀,并要求符合新“源规范语法”的规定,也可以为NULL。参数snaplen是必须保留的数据包长度。对于过滤器所接收的每个数据包,只有开始snaplen字节的内容被存储到缓冲区中,并被传递给用户层的应用程序。

6、参数read_timeout是以毫秒为单位的读取超时时间。读取超时用来处理,捕获一个数据包后,读操作并不必需要立即返回的情况。但这可能等待一些时间以允许捕获更多的数据包,这样用户层的一次读操作就可从操作系统的内核中读取更多的数据包。参数auth是一个指向一个 pcap_rmtauth结构体的指针,该结构体保存远程机器上用户所需的认证信息。万一这不是一个远程捕获,该指针可以被设置为NULL。参数errbuf指向用户所分配的一个缓冲区,将用来存储该函数的错误信息。函数返回一个指向” pcap_t”的指针,将作为后续调用的参数(如pcap_sendpacket()等等),其描述了一个已打开的WinP

7、cap会话。如果出现问题,函数返回NULL,并通过” errbuf”变量保存错误信息。(5)函数pcap_next_ex(pcap_t *, struct pcap_pkthdr *, const u_char *)从一个网络接口或离线捕获方式(例如读文件)读取一个数据包。该函数被用来重新获得下一个可用的数据包,没有使用 libpcap 提供的传统的回调方法。 pcap_next_ex 用指向头和下一个被捕获的数据包的指针为 pkt_ void *memcpy(void *dest, void *src, unsigned int count); 由src所指内存区域复制count个字节到de

8、st所指内存区域(4)函数void pcap_close(pcap_t *p) 关闭p参数相应的文件,并释放资源。实验三 传输层网络数据收发一. 实验目的. 1、了解IP地址与硬件地址的区别;2、理解ICMP包的回送和回送响应消息功能;3、掌握利用Winpcap发送数据包的方法。二.实验步骤及结果.(1)打开sevsr文件夹中的CPP.1,运行(2)打开client文件夹中的程序,编辑想要发送的数据,结果如下三. 实验相关算法及函数(1) SOCKET PASCAL FAR socket(int af, int type, int protocol);该调用要接收三个参数:af、type、pr

9、otocol。参数af指定通信发生的区域,UNIX系统支持的地址族有:AF_UNIX、AF_INET、AF_NS等,而DOS、WINDOWS中仅支持AF_INET,它是网际网区域。因此,地址族与协议族相同。参数type 描述要建立的套接字的类型。参数protocol说明该套接字使用的特定协议,如果调用者不希望特别指定使用的协议,则置为0,使用默认的连接模式。根据这三个参数建立一个套接字,并将相应的资源分配给它,同时返回一个整型套接字号。因此,socket()系统调用实际上指定了相关五元组中的协议这一元。(2) 指定本地地址bind()当一个套接字用socket()创建后,存在一个名字空间(地址

10、族),但它没有被命名。bind()将套接字地址(包括本地主机地址和本地端口地址)与所创建的套接字号联系起来,即将名字赋予套接字,以指定本地半相关。其调用格式如下:int PASCAL FAR bind(SOCKET s, const struct sockaddr FAR * name, int namelen);参数s是由socket()调用返回的并且未作连接的套接字描述符(套接字号)。参数name 是赋给套接字s的本地地址(名字),其长度可变,结构随通信域的不同而不同。namelen表明了name的长度。如果没有错误发生,bind()返回0。否则返回值SOCKET_ERROR。(3)建立套

11、接字连接connect()与accept()这两个系统调用用于完成一个完整相关的建立,其中connect()用于建立连接。无连接的套接字进程也可以调用connect(),但这时在进程之间没有实际的报文交换,调用将从本地操作系统直接返回。这样做的优点是程序员不必为每一数据指定目的地址,而且如果收到的一个数据报,其目的端口未与任何套接字建立连接,便能判断该端口不可操作。而accept()用于使服务器等待来自某客户进程的实际连接。connect()的调用格式如下:int PASCAL FAR connect(SOCKET s, const struct sockaddr FAR * name, in

12、t namelen);参数s是欲建立连接的本地套接字描述符。参数name指出说明对方套接字地址结构的指针。对方套接字地址长度由namelen说明。如果没有错误发生,connect()返回0。否则返回值SOCKET_ERROR。在面向连接的协议中,该调用导致本地系统和外部系统之间连接实际建立。由于地址族总被包含在套接字地址结构的前两个字节中,并通过socket()调用与某个协议族accept()的调用格式如下:SOCKET PASCAL FAR accept(SOCKET s, struct sockaddr FAR* addr, int FAR* addrlen);参数s为本地套接字描述符,在

13、用做accept()调用的参数前应该先调用过listen()。addr 指向客户方套接字地址结构的指针,用来接收连接实体的地址。addr的确切格式由套接字创建时建立的地址族决定。addrlen 为客户方套接字地址的长度(字节数)。如果没有错误发生,accept()返回一个SOCKET类型的值,表示接收到的套接字的描述符。否则返回值INVALID_SOCKET。accept()用于面向连接服务器。参数addr和addrlen存放客户方的地址信息。调用前,参数addr 指向一个初始值为空的地址结构,而addrlen 的初始值为0;调用accept()后,服务器等待从编号为s的套接字上接受客户连接请

14、求,而连接请求是由客户方的connect()调用发出的。当有连接请求到达时,accept()调用将请求连接队列上的第一个客户方套接字地址及长度放入addr 和addrlen,并创建一个与s有相同特性的新套接字号。新的套接字可用于处理服务器并发请求。四个套接字系统调用,socket()、bind()、connect()、accept(),可以完成一个完全五元相关的建立。socket()指定五元组中的协议元,它的用法与是否为客户或服务器、是否面向连接无关。bind()指定五元组中的本地二元,即本地主机地址和端口号,其用法与是否面向连接有关:在服务器方,无论是否面向连接,均要调用bind();在客户

15、方,若采用面向连接,则可以不调用bind(),而通过connect()自动完成。若采用无连接,客户方必须使用bind()以获得一个唯一的地址。以上讨论仅对客户服务器模式而言,实际上套接字的使用是非常灵活的,唯一需遵循的原则是进程通信之前,必须建立完整的相关。(4)监听连接listen()此调用用于面向连接服务器,表明它愿意接收连接。listen()需在accept()之前调用,其调用格式如下:int PASCAL FAR listen(SOCKET s, int backlog);参数s标识一个本地已建立、尚未连接的套接字号,服务器愿意从它上面接收请求。backlog表示请求连接队列的最大长度

16、,用于限制排队请求的个数,目前允许的最大值为5。如果没有错误发生,listen()返回0。否则它返回SOCKET_ERROR。listen()在执行调用过程中可为没有调用过bind()的套接字s完成所必须的连接,并建立长度为backlog的请求连接队列。 调用listen()是服务器接收一个连接请求的四个步骤中的第三步。它在调用socket()分配一个流套接字,且调用bind()给s赋于一个名字之后调用,而且一定要在accept()之前调用程序在使用套接字前,首先必须拥有一个套接字, (5)数据传输send()与recv()当一个连接建立以后,就可以传输数据了。常用的系统调用有send()和r

17、ecv()。send() 调用用于在参数s指定的已连接的数据报或流套接字上发送输出数据,格式如下:int PASCAL FAR send(SOCKET s, const char FAR *buf, int len, int flags);参数s为已连接的本地套接字描述符。buf 指向存有发送数据的缓冲区的指针,其长度由len 指定。flags 指定传输控制方式,如是否发送带外数据等。如果没有错误发生,send()返回总共发送的字节数。否则它返回SOCKET_ERROR。recv()调用用于在参数s指定的已连接的数据报或流套接字上接收输入数据,格式如下:int PASCAL FAR recv(

18、SOCKET s, char FAR *buf, int len, int flags);参数s 为已连接的套接字描述符。buf指向接收输入数据缓冲区的指针,其长度由len 指定。flags 指定传输控制方式,如是否接收带外数据等。如果没有错误发生,recv()返回总共接收的字节数。如果连接被关闭,返回0。否则它返回SOCKET_ERROR。(6)输入输出多路复用select()select()调用用来检测一个或多个套接字的状态。对每一个套接字来说,这个调用可以请求读、写或错误状态方面的信息。请求给定状态的套接字集合由一个fd_set结构指示。在返回时,此结构被更新,以反映那些满足特定条件的套

19、接字的子集,同时, select()调用返回满足条件的套接字的数目,其调用格式如下:int PASCAL FAR select(int nfds, fd_set FAR * readfds, fd_set FAR * writefds, fd_set FAR * exceptfds, const struct timeval FAR * timeout);参数nfds指明被检查的套接字描述符的值域,此变量一般被忽略。参数readfds指向要做读检测的套接字描述符集合的指针,调用者希望从中读取数据。参数writefds 指向要做写检测的套接字描述符集合的指针。exceptfds指向要检测是否出错

20、的套接字描述符集合的指针。timeout指向select()函数等待的最大时间,如果设为NULL则为阻塞操作。select()返回包含在fd_set结构中已准备好的套接字描述符的总数目,或者是发生错误则返回SOCKET_ERROR。(7) 关闭套接字closesocket()closesocket()关闭套接字s,并释放分配给该套接字的资源;如果s涉及一个打开的TCP连接,则该连接被释放。closesocket()的调用格式如下:BOOL PASCAL FAR closesocket(SOCKET s);参数s待关闭的套接字描述符。如果没有错误发生,closesocket()返回0。否则返回值

21、SOCKET_ERROR。实验四 网络协议分析实验一. 实验目的.1、协议分析的方法;2、理解ICMP包的回送和回送响应消息功能;3、掌握ping命令的运行过程。二.实验内容.1、 使用Ping命令测试目标主机是否在线。2、 利用Ethreal截获数据包,分析三次握手机制。实验五 网络命令的使用一. 实验目的.1、 掌握各个网络命令的运行方法;2、 理解网络命令的运行原理;二.实验内容1.输入命令。2.利用Ethreal截获数据包,各个命令的运行结果。三.实验步骤(1) ARP命令(2) Ipconfig命令allrenewrenew(3) Nbtstas命令-a remotename-A IP address-c-n-r-S-sInterval(4) net 命令(5) Netstat命令-a-r-p(6) route命令

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

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