草庐IT

计算机网络 实验2 IP协议分析

Jellyfishwuan 2023-12-14 原文

实验2 IP协议分析

1. 实验目的

  • 了解IP报文格式,熟悉IP报文各个字段含义、长度

  • 掌握基于tcpdump和wireshark软件进行数据包抓取和分析技术

2. 实验环境

  • 硬件要求:阿里云云主机ECS 一台。

  • 软件要求:Linux/ Windows 操作系统

3. 实验内容

3.1 tcpdump 基本用法

tcpdump是一个用于截取网络分组,并输出分组内容的工具。凭借强大的功能和灵活的截取策略,使其成为类UNIX系统下用于网络分析和问题排查的首选工具

tcpdump 支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息

参考资料:

https://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html

https://www.jianshu.com/p/d9162722f189

3.2 wireshark基本用法

Wireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。

网络管理员使用Wireshark来检测网络问题,网络安全工程师使用Wireshark来检查资讯安全相关问题,开发者使用Wireshark来为新的通讯协定除错,普通使用者使用Wireshark来学习网络协定的相关知识。

参考资料:

https://www.wireshark.org/#download

https://pc.qq.com/search.html#!keyword=wireshark

https://www.cnblogs.com/csnd/p/11807736.html

https://pc.qq.com/search.html#!keyword=xshell

3.3 利用tcpdump抓包,wireshark分析包

在阿里云主机运行命令traceroute www.baidu.com ,并利用tcpdump抓包。下载文件到本地机器利用wireshark软件进行分析。

提示:

  • 必须首先执行抓包命令,然后再执行路径追踪命令。抓包命令 tcpdump -i eth0 -w test.cap
  • 可使用scp命令或者利用xshell和xftp下载数据包到本地机器。

1)利用tcpdump抓包,通过wireshark分析捕获的数据包,分析IP的报文结构,将IP协议树中各个名字字段,字段长度,字段信息填入下表。

字段名字段长度字段值字段表达信息
Version
Header length IP
Differentiated services Filed
Total length
Indentification
flag
Fragment offset
Time to live
protocol
Header checksum
source
destination
2)  利用wireshark分析并解读相关traceroute命令执行结果。

​ 提示:在wireshark 过滤器工具栏设置仅显示ICMP

4. 实验结果与分析

  • 需给出实验中相关命令、脚本或者代码以及运行截图。注意格式规范、截图清晰,大小合适;

  • 对于中间过程和运行结果需给出必要分析说明;

    4.1 利用tcpdump抓包,通过wireshark分析捕获的数据包,分析IP的报文结构,将IP协议树中各个名字字段,字段长度,字段信息填入下表。

    4.1.1在阿里云运行终端安装traceroute。

    yum install traceroute
    

如图所示,成功安装traceroute以便后续实验使用。

4.1.2 利用traceroute测量数据包到达百度网站所经过的路径。

traceroute www.baidu.com

如图所示,利用traceroute测量路由情况,显示数据包到达百度网站的所经过的路径。

4.1.3 利用tcpdump对百度网站进行抓包。

tcpdump -i eth0 -w test.cap

如图所示,利用tcpdump对百度网站进行抓包,成功抓取156个包,并且以test.cap的形式保存下来。

4.1.4在阿里云下载lrzsz,并且检查是否安装成功。

yum install -y lrzsz

安装lrzsz,用于Windows与Linux之间的文件传输,用于之后把利用tcpdump抓取的包传输到本机。

sz --v

如图所示,lrzsz已经成功安装,可以继续进行下一步实验。

4.1.5 下载Xshell,并将其连接阿里云虚拟机,将实验中保存下来的text.cap文件传输到本机。

如图所示,填写连接阿里云虚拟机主机号。

输入用户名密码,进行连接。

如图所示,成功连接Xshell。

sz text.cap

在Xshell中输入代码,将实验中获取的text.cap文件下载至本机中去。

4.1.6 下载Wireshark,并将从Linux中获取的text.cap文件在其中打开。

如图所示,此为从百度网站抓取的数据包。

4.1.7 对text.cap文件中的数据进行分析,查看数据包中的具体信息,完成表格中内容的填写。

对具体数据进行分析,分别获取字段名的字段长度,字段值以及字段表达信息,完成表格中内容的填写。表格如下:

字段名字段长度字段值字段表达信息
Version46版本号,IPv4
Header length IP420 bytesIP报文头长度
Differentiated services Filed80x00(DSCP:CS0,ECN Not-ECT)服务类型
Total length1652数据包总长度
Indentification160x4f42(20290)标识符
flag30x2标识
Fragment offset130分段偏移量
Time to live848生存期
protocol8TCP(6)上层协议名称
Header checksum160xe2c1报文头校验和
source32118.31.243.243源地址
destination32172.16.2.157目的地址

4.2 利用wireshark分析并解读相关traceroute命令执行结果。

提示:在wireshark 过滤器工具栏设置仅显示ICMP

4.2.1 打开Wireshark进行抓包。

4.2.2 打开阿里云虚拟机,使用traceroute命令,使wireshark抓取的包记录下来。

4.2.3 当traceroute命令执行介绍自动退出的时候,停止抓包

4.2.4 在wireshark 过滤器工具栏设置仅显示ICMP,进行过滤。

如图所示,利用wireshark过滤出了icmp。

5. 实验小结

(包括遇到的特定问题和解决办法、心得体会、意见与建议等)

问题与解决办法:

问题一:不知道如何将阿里云虚拟机中抓取的数据包传输到本机中去。

解决方法:查阅资料获得解决方法。首先,在虚拟中安装lrzsz,进行Linux与Windows系统间的文件传输;其次下载Xshell,并连接阿里云虚拟机,运行代码,将文件成功从虚拟机传输到本机中去。

问题二:无法成功将Xshell连接。

解决方法:在查阅资料后得知,连接Xshell需要输入阿里云虚拟机的主机端口,并输入阿里云虚拟机的登录名和密码,最终得以成功连接。

问题三:在运用Wireshark分析抓取数据包中的信息时,不能理解其具体数据所表达的含义,无法成功填写表格。

解决方法:通过查阅资料以及与同学之间的交流讨论,最后成功解决问题,成功填写表格。

心得体会:

1.成功的了解IP报文格式,熟悉IP报文各个字段含义、长度,但是还是过于生疏,需要在今后的学习生活中继续学习,多加巩固。

2.学习了解并初步掌握了tcpdump的基本用法,可以运用该语句完成实验的内容。

3.学习掌握了lrzsz的基本作用是进行Linux与Windows之间的传输,学习掌握了xshell的基本用法。

4.学习掌握了Wireshark的基本用法,运用其对抓取的数据包进行ip协议的分析。

有关计算机网络 实验2 IP协议分析的更多相关文章

  1. ruby-on-rails - 使用一系列等级计算字母等级 - 2

    这里是Ruby新手。完成一些练习后碰壁了。练习:计算一系列成绩的字母等级创建一个方法get_grade来接受测试分数数组。数组中的每个分数应介于0和100之间,其中100是最大分数。计算平均分并将字母等级作为字符串返回,即“A”、“B”、“C”、“D”、“E”或“F”。我一直返回错误:avg.rb:1:syntaxerror,unexpectedtLBRACK,expecting')'defget_grade([100,90,80])^avg.rb:1:syntaxerror,unexpected')',expecting$end这是我目前所拥有的。我想坚持使用下面的方法或.join,

  2. ruby - 从 Ruby 中的主机名获取 IP 地址 - 2

    我有一个存储主机名的Ruby数组server_names。如果我打印出来,它看起来像这样:["hostname.abc.com","hostname2.abc.com","hostname3.abc.com"]相当标准。我想要做的是获取这些服务器的IP(可能将它们存储在另一个变量中)。看起来IPSocket类可以做到这一点,但我不确定如何使用IPSocket类遍历它。如果它只是尝试像这样打印出IP:server_names.eachdo|name|IPSocket::getaddress(name)pnameend它提示我没有提供服务器名称。这是语法问题还是我没有正确使用类?输出:ge

  3. ruby - 用 Ruby 编写一个简单的网络服务器 - 2

    我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b

  4. 网络编程套接字 - 2

    网络编程套接字网络编程基础知识理解源`IP`地址和目的`IP`地址理解源MAC地址和目的MAC地址认识端口号理解端口号和进程ID理解源端口号和目的端口号认识`TCP`协议认识`UDP`协议网络字节序socket编程接口`sockaddr``UDP`网络程序服务器端代码逻辑:需要用到的接口服务器端代码`udp`客户端代码逻辑`udp`客户端代码`TCP`网络程序服务器代码逻辑多个版本服务器单进程版本多进程版本多线程版本线程池版本服务器端代码客户端代码逻辑客户端代码TCP协议通讯流程TCP协议的客户端/服务器程序流程三次握手(建立连接)数据传输四次挥手(断开连接)TCP和UDP对比网络编程基础知识

  5. CAN协议的学习与理解 - 2

    最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总

  6. 计算机毕业设计ssm+vue基本微信小程序的小学生兴趣延时班预约小程序 - 2

    项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU

  7. ruby - 如何计算 Liquid 中的变量 +1 - 2

    我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我

  8. ruby - 使用 Ruby,计算 n x m 数组的每一列中有多少个 true 的简单方法是什么? - 2

    给定一个nxmbool数组:[[true,true,false],[false,true,true],[false,true,true]]有什么简单的方法可以返回“该列中有多少个true?”结果应该是[1,3,2] 最佳答案 使用转置得到一个数组,其中每个子数组代表一列,然后将每一列映射到其中的true数:arr.transpose.map{|subarr|subarr.count(true)}这是一个带有inject的版本,应该在1.8.6上运行,没有任何依赖:arr.transpose.map{|subarr|subarr.in

  9. arrays - 计算数组中的匹配元素 - 2

    给定两个大小相等的数组,如何找到不考虑位置的匹配元素的数量?例如:[0,0,5]和[0,5,5]将返回2的匹配项,因为有一个0和一个5共同;[1,0,0,3]和[0,0,1,4]将返回3的匹配项,因为0有两场,1有一场;[1,2,2,3]和[1,2,3,4]将返回3的匹配项。我尝试了很多想法,但它们都变得相当粗糙和令人费解。我猜想有一些不错的Ruby习惯用法,或者可能是一个正则表达式,可以很好地回答这个解决方案。 最佳答案 您可以使用count完成它:a.count{|e|index=b.index(e)andb.delete_at

  10. ruby - 检查网络文件是否存在,而不下载它? - 2

    是否可以在不实际下载文件的情况下检查文件是否存在?我有这么大的(~40mb)文件,例如:http://mirrors.sohu.com/mysql/MySQL-6.0/MySQL-6.0.11-0.glibc23.src.rpm这与ruby​​不严格相关,但如果发件人可以设置内容长度就好了。RestClient.get"http://mirrors.sohu.com/mysql/MySQL-6.0/MySQL-6.0.11-0.glibc23.src.rpm",headers:{"Content-Length"=>100} 最佳答案

随机推荐