计算机网络:利用ethereal分别对TCP套接字的实现及UDP套接字的实现捕包分析 ;利用ethereal分析协议HTTP、FTP和DNS

本文主要是介绍计算机网络:利用ethereal分别对TCP套接字的实现及UDP套接字的实现捕包分析 ;利用ethereal分析协议HTTP、FTP和DNS,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 实验内容
  • 实验目的
  • 实验预备知识
  • 实验过程描述
    • 实验一:HTTP GET/response交互
    • 实验二:Ethereal分组俘获
    • 实验三:获取长文件
    • 实验四:嵌有对象的HTML文档
    • 实验五:HTTP认证
    • 实验六:跟踪DNS
    • 实验七
    • 实验八
    • 实验九
  • 实验结果
    • 实验一结果
    • 实验二结果
    • 实验三实验结果
    • 实验五结果
    • 实验六跟踪DNS结果
    • 实验七实验结果
    • 实验八实验结果
    • 实验九实验结果
  • 实验当中问题及解决方法

实验内容

  1. 利用ethereal分别对TCP套接字的实现及UDP套接字的实现捕包分析
  2. 利用ethereal分析协议HTTP、FTP和DNS

实验目的

1、 分析HTTP协议
2、 分析DNS协议
3、 分析TCP套接字的实现及UDP套接字的实现

实验预备知识

  1. HTTP协议
  2. DNS协议
  3. TCP报文
  4. UDP报文

实验过程描述

实验一:HTTP GET/response交互

(1) 启动Web browser。
(2) 启动Ethereal分组嗅探器。在窗口的显示过滤说明处输入“http”
(3) 开始Ethereal分组俘获。
(4) 在打开的Web browser窗口中输入一下地址(浏览器中将显示一个只有一行文字的非常简单的HTML文件):
http://gaia.cs.umass.edu/ethereal-labs/HTTP-ethereal-file1.html
(5) 停止分组俘获。
抓到两个包如下:
在这里插入图片描述
在这里插入图片描述

实验二:Ethereal分组俘获

(1) 启动浏览器,清空浏览器的缓存
(2) 启动Ethereal分组俘获器。开始Ethereal分组俘获。
(3) 在浏览器的地址栏中输入以下URL: http://gaia.cs.umass.edu/ethereal-labs/HTTP-ethereal-file2.html
(4) 在浏览器中重新输入相同的URL
(5) 停止Ethereal分组俘获,在显示过滤筛选说明处输入“http”
实验结果如下:
在这里插入图片描述

实验三:获取长文件

1.启动浏览器,将浏览器的缓存清空。
2.启动Ethereal分组俘获器。开始Ethereal分组俘获。
3.在浏览器里输入
http://gaia.cs.umass.edu/ethereal-labs/HTTP-ethereal-file3.html
浏览器将显示一个相当大的美国权力法案。
4.停止Ethereal分组俘获,在显示过滤筛选说明处输入http
实验结果如下:
在这里插入图片描述

实验四:嵌有对象的HTML文档

1.启动浏览器,将浏览器的缓存清空。
2.启动Ethereal分组俘获器。开始Ethereal分组俘获。
3.在浏览器的地址栏中输入以下URL: http://gaia.cs.umass.edu/ethereal-labs/HTTP-ethereal-file4.html,浏览器将显示一个具有两个图片的短HTTP文件
4.停止Ethereal分组俘获,在显示过滤筛选说明处输入“http”,分组列表子窗口中将只显示所俘获到的HTTP报文。
实验结果:
在这里插入图片描述

实验五:HTTP认证

1.启动浏览器,将浏览器的缓存清空。
2.启动Ethereal分组俘获器。开始Ethereal分组俘获。
3.在浏览器的地址栏中输入以下URL: http://gaia.cs.umass.edu/ethereal-labs/protected_pages/HTTP-ethereal-file5.html,浏览器将显示一个HTTP文件,输入所需要的用户名和密码(用户名:eth-students,密码:networks)。
4.停止Ethereal分组俘获,在显示过滤筛选说明处输入“http”
实验结果:
在这里插入图片描述

实验六:跟踪DNS

  1. 以管理员身份进入Dos环境,用ipconfig /flushdns清空主机上DNS缓存
  2. 启动浏览器,将浏览器的缓存清空
  3. 启动Ethereal分组俘获器,在显示过滤筛选说明处输入“ip.addr==10.236.134.77”
  4. 开始Ethereal分组俘获
  5. 在浏览器的地址栏中输入:http://www.ietf.org
  6. 停止分组俘获

实验结果:
在这里插入图片描述

实验七

1.开始Ethereal分组俘获。
2.在DOS上执行命令:nslookup www.mit.edu。
3.停止分组俘获。
实验结果:
在这里插入图片描述

实验八

重复上面的实验,只是将命令替换为:nslookup –type=NS mit.edu
在这里插入图片描述

实验九

重复上面的实验,只是将命令替换为:nslookup www.aiit.or.kr bitsy.mit.edu
结果如下:
在这里插入图片描述

实验结果

实验一结果

在这里插入图片描述
在这里插入图片描述
1.你的浏览器运行的是HTTP1.0,还是HTTP1.1?你所访问的服务器所运行的HTTP版本号是多少?
我的浏览器和服务器所运行的HTTP的版本都是HTTP1.1
在报文里找到如下字段:
在这里插入图片描述
2.你的浏览器向服务器指出它能接收何种语言版本的对象?
zh-CN
在报文里找到如下字段:

在这里插入图片描述
3. 你的计算机的IP地址是多少?服务器gaia.cs.umass.edu的IP地址是多少?
我的IP是10.236.134.77 服务器的IP是128.119.245.12

4.从服务器向你的浏览器返回的状态代码是多少?
200

5.你从服务器上所获取的HTML文件的最后修改时间是多少?
在这里插入图片描述
6.返回到你的浏览器的内容一共多少字节?
在这里插入图片描述
126字节

实验二结果

在这里插入图片描述
7.分析你的浏览器向服务器发出的第一个HTTP GET请求的内容,在该请求报文中,是否有一行是:IF-MODIFIED-SINCE?
没有

8.分析服务器响应报文的内容,服务器是否明确返回了文件的内容?如何获知?
明确返回了
在这里插入图片描述
371字节,内容如下
在这里插入图片描述
9.分析你的浏览器向服务器发出的第二个“HTTP GET”请求,在该请求报文中是否有一行是:IF-MODIFIED-SINCE?如果有,在该首部行后面跟着的信息是什么?
在这里插入图片描述
浏览器再次请求服务器的时候,包含if-Modified-Since:,后面跟着的信息是在缓存中获得的最后修改时间。

10.服务器对第二个HTTP GET请求的响应中的HTTP状态代码是多少?服务器是否明确返回了文件的内容?请解释。
在这里插入图片描述
状态码是:304
没有返回,因为服务器把收到的if-Modified-Since和Last-Modified做对比,一致,说明没有被修改,就返回304浏览器只需要从缓存中获取信息即可。

实验三实验结果

在这里插入图片描述
11.你的浏览器一共发出了多少个HTTP GET请求?
一个 GET请求

  1. 承载这一个HTTP响应报文一共需要多少个data-containing TCP报文段?
    四个 如下:
    在这里插入图片描述
    13.与这个HTTP GET请求相对应的响应报文的状态代码和状态短语是什么? 200 OK

实验四实验结果:
在这里插入图片描述
14.你的浏览器一共发出了多少个HTTP GET请求?这些请求被发送到的目的地的IP地址是多少?
发出了三个HTTP GET请求,目的地址的IP:128.119.245.12
;128.119.245.12;159.182.31.51

15.浏览器在下载这两个图片时,是串行下载还是并行下载?请解释。
串行下载,看下图所示抓到的包,都是一个HTTP GET一个响应报文再下一个HTTP GET…按先后排序的,所以是串行。
在这里插入图片描述

实验五结果

在这里插入图片描述
16.对于浏览器发出的最初的HTTP GET请求,服务器的响应是什么(状态代码和状态短语)?
状态码:401 状态短语:Unauthorized

  1. 当浏览器发出第二个HTTP GET请求时,在HTTP GET报文中包含了哪些新的字段?
    Authorization和Credentials
    在这里插入图片描述

实验六跟踪DNS结果

在这里插入图片描述
(18)定位到DNS查询报文和查询响应报文,这两种报文的发送是基于UDP还是基于TCP的?
都是基于UDP的
在这里插入图片描述
在这里插入图片描述
(19)DNS查询报文的目的端口号是多少?DNS查询响应报文的源端口号是多少?des-port:53 src-port:51036
在这里插入图片描述
(20)DNS查询报文发送的目的地的IP地址是多少?利用ipconfig命令(ipconfig/all)决定你主机的本地DNS服务器的IP地址。这两个地指相同吗?
DNS报文发送的目的地的IP:211.137.191.26

在这里插入图片描述
发现相同
(21)检查DNS查询报文,它是哪一类型的DNS查询?该查询报文中包含“answers”吗?
两个查询报文,一个是A类查询(IPv4),一个是AAAA类查询(IPv6),查询报文不包含“answers”

在这里插入图片描述
在这里插入图片描述
(21)检查DNS查询响应报文,其中提供了多少个“answers”?每个answers包含哪些内容?提供了4个,具体包含如下:
在这里插入图片描述
(22)考虑一下你的主机发送的subsequent(并发)TCP SYN分组, SYN分组的目的IP地址是否与在DNS查询响应报文中提供的某个IP地址相对应?
看这个AAAA类的DNS查询响应报文中的地址,可以和SYN分组的目的地址对应

如下:
在这里插入图片描述
(24)打开的WEB页中包含图片,在获取每一个图片之前,你的主机发出新的DNS查询了吗?
没有

实验七实验结果

在这里插入图片描述
(25)DNS查询报文的目的端口号是多少?DNS查询响应报文的源端口号是多少?
DNS查询报文的目的端口号和DNS查询响应报文的源端口号都是 53

(26)DNS查询报文发送的目的地的IP地址是多少?这个地址是你的默认本地DNS服务器的地址吗?
目的IP在这里插入图片描述
是默认的本地DNS服务器的地址,因为抓包前没有清DNS缓存,上个实验访问过一次了

(27)检查DNS查询报文,它是哪一类型的DNS查询?该查询报文中包含“answers”吗?
查询报文有A类的也有AAAA类的,查询报文不包含answers
(28)检查DNS查询响应报文,其中提供了多少个“answers”?每个answers包含哪些内容?提供了三个answers,内容如下:

在这里插入图片描述

实验八实验结果

在这里插入图片描述
(29)DNS查询报文发送的目的地的IP地址是多少?这个地址是你的默认本地DNS服务器的地址吗?
目的IP是211.137.191.26是本地DNS服务器地址
(30)检查DNS查询报文,它是哪一类型的DNS查询?该查询报文中包含“answers”吗?NS类的,不包含
(31)检查DNS查询响应报文,其中响应报文提供了哪些MIT名称服务器?响应报文提供这些MIT名称服务器的IP地址了吗?如下图,没有提供IP
在这里插入图片描述

实验九实验结果

在这里插入图片描述
(32)DNS查询报文发送的目的地的IP地址是多少?这个地址是你的默认本地DNS服务器的地址吗?如果不是,这个IP地址相当于什么?DNS查询报文发送的目的地的IP见上图
本地DNS服务器:
在这里插入图片描述
从抓到的包来看DNS查询报文是先向三个本地DNS服务器发,但是由于抓包前清空了本地DNS缓存,所以返回的响应报文里面没有answers,然后,发现DNS查询报文又向IP为18.72.0.3服务器发包。

(33)检查DNS查询报文,它是哪一类型的DNS查询?该查询报文中包含“answers”吗?
向本地DNS服务器发送的DNS查询报文有A类的也有AAAA类的,不包含answers。向18.72.0.3发送的DNS查询报文为PTR类的还有A类和AAAA类的,不包含answers。

(34)检查DNS查询响应报文,其中提供了多少个“answers”?每个answers包含哪些内容?
有一个answers 内容如下:
在这里插入图片描述

实验当中问题及解决方法

1、不明白什么是DNS的查询类型
解决:百度
DNS的查询类型有20种,比较常用的查询类型有有A,NS,CNAME,PTR,MX等五种类型。
1)A:由DNS域名到IP地址的查询,即正向查询,编程中由函数gethostbyname实现。
2)PTR:由IP到域名的查询,即逆向查询,编程中由函数gethostbyaddr。
3)NS:查询解析的名字服务器(Name server)。
4)CNAME:查询DNS的别名。
5)MX:邮箱服务器查询。

2. 在做实验八实验九的时候,总是出现DNS请求超时解析不不来的问题。如下:
在这里插入图片描述
解决方法:更换DNS服务器
Ipconfig /all 查到DNS服务器有四个——2001:da8:7007:107::66
;2001:da8:7007:107::77;211.137.191.26;202.102.154.3
每个试一遍发现有一个好用的。
在这里插入图片描述
4. 安装java虚拟机,运行TCPClient和TCPServer和UDP Client和UDP Server进行相应的捕包,出现了下面的报错;
在这里插入图片描述
原因是看TCP Server代码,服务器端口是一直开着的,客户端收到大写转小写就把端口关了,如果重复运行TCPServer.java的话会报错,因为端口被重复多次使用,解决方法就是换一个端口号。
5. 运行TCPClient和TCPServer和UDP Client和UDP Server进行相应的捕包,发现用校园网不行,得用自己手机的热点才能捕到包
6. 如果运行TCPClient和TCPServer在同一个主机上是捕不到包的,应该是进程间相互通信,不通过网络。

这篇关于计算机网络:利用ethereal分别对TCP套接字的实现及UDP套接字的实现捕包分析 ;利用ethereal分析协议HTTP、FTP和DNS的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/552759

相关文章

C++中unordered_set哈希集合的实现

《C++中unordered_set哈希集合的实现》std::unordered_set是C++标准库中的无序关联容器,基于哈希表实现,具有元素唯一性和无序性特点,本文就来详细的介绍一下unorder... 目录一、概述二、头文件与命名空间三、常用方法与示例1. 构造与析构2. 迭代器与遍历3. 容量相关4

C++中悬垂引用(Dangling Reference) 的实现

《C++中悬垂引用(DanglingReference)的实现》C++中的悬垂引用指引用绑定的对象被销毁后引用仍存在的情况,会导致访问无效内存,下面就来详细的介绍一下产生的原因以及如何避免,感兴趣... 目录悬垂引用的产生原因1. 引用绑定到局部变量,变量超出作用域后销毁2. 引用绑定到动态分配的对象,对象

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

Nginx分布式部署流程分析

《Nginx分布式部署流程分析》文章介绍Nginx在分布式部署中的反向代理和负载均衡作用,用于分发请求、减轻服务器压力及解决session共享问题,涵盖配置方法、策略及Java项目应用,并提及分布式事... 目录分布式部署NginxJava中的代理代理分为正向代理和反向代理正向代理反向代理Nginx应用场景

Python实现字典转字符串的五种方法

《Python实现字典转字符串的五种方法》本文介绍了在Python中如何将字典数据结构转换为字符串格式的多种方法,首先可以通过内置的str()函数进行简单转换;其次利用ison.dumps()函数能够... 目录1、使用json模块的dumps方法:2、使用str方法:3、使用循环和字符串拼接:4、使用字符

Linux云服务器手动配置DNS的方法步骤

《Linux云服务器手动配置DNS的方法步骤》在Linux云服务器上手动配置DNS(域名系统)是确保服务器能够正常解析域名的重要步骤,以下是详细的配置方法,包括系统文件的修改和常见问题的解决方案,需要... 目录1. 为什么需要手动配置 DNS?2. 手动配置 DNS 的方法方法 1:修改 /etc/res

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

Redis中的有序集合zset从使用到原理分析

《Redis中的有序集合zset从使用到原理分析》Redis有序集合(zset)是字符串与分值的有序映射,通过跳跃表和哈希表结合实现高效有序性管理,适用于排行榜、延迟队列等场景,其时间复杂度低,内存占... 目录开篇:排行榜背后的秘密一、zset的基本使用1.1 常用命令1.2 Java客户端示例二、zse