当前位置: 首页 > news >正文

《Wireshark网络分析就这么简单》—从一道面试题开始说起

本节书摘来自异步社区《Wireshark网络分析就这么简单》一书中的从一道面试题开始说起,作者林沛满,更多章节内容可以访问云栖社区“异步社区”公众号查看。

从一道面试题开始说起
Wireshark网络分析就这么简单
从一道面试题开始说起
我每次当面试官,都要伪装成无所不知的大牛。

这当然是无奈的选择——现在每封简历都那么耀眼,不装一下简直镇不住场面。比如尚未毕业的本科生,早就拿下CCIE认证;留欧两年的海归,已然精通英、法、德三门外语;最厉害的一位应聘者,研究生阶段就在国际上首次提出了计算机和生物学的跨界理论……可怜我这个老实人在一开场还能装装,到了技术环节就忍不住提问基础知识,一下子把气氛从学术殿堂拉到建筑工地。不过就是这些最基础的问题,却常常把简历精英们难住。本文要介绍的便是其中的一道。

问题:两台服务器A和B的网络配置如下(见图1),B的子网掩码本应该是255.255.255.0,被不小心配成了255.255.255.224。它们还能正常通信吗?


de1aa24fab9bebb0903ee2fb11aa1969bc1363f3

很多应聘者都会沉思良久(他们一定在心里把我骂了很多遍了),然后给出下面这些形形色色的答案。

答案1:“A和B不能通信,因为……如果这样都行的话,子网掩码还有什么用?”(这位的反证法听上去很有道理!)

答案2:“A和B能通信,因为它们可以通过ARP广播获得对方的MAC地址。”(那子网掩码还有什么用?楼上的反证法用来反驳这位正好。)

答案3:“A和B能通信,但所有包都要通过默认网关192.168.26.2转发。”(请问这么复杂的结果你是怎么想到的?)

答案4:“A和B不能通信,因为ARP不能跨子网。”(这个答案听上去真像是经过认真思考的。)

以上哪个答案是正确的?还是都不正确?如果这是你第一次听到这道题,不妨停下来思考一下。

真相只有一个,应聘者的答案却是五花八门。可见对网络概念的理解不容含糊,否则差之毫厘,谬以千里。要知道,这还只是基本的路由交换知识,假如涉及复杂概念,结果就更不用说了。

问题是即便我们对着教材咬文嚼字,也不一定能悟出正确答案。这个时候,就可以借助Wireshark的抓包与分析功能了。我手头就有两台Windows服务器,已经按照面试题配好网络。如果你以前没有用过Wireshark,就开始第一次亲密接触吧。

1.从http://www.wireshark.org/download.html免费下载安装包,并在服务器B上装好(把所有可选项都装上)。

2.启动Wireshark软件,单击菜单栏上的Capture,再单击Interfaces按钮(见图2)。


6ded7f1e4741a3764104aa4019a5e2ec774b4f13

3.服务器B上的所有网卡都会显示在弹出的新窗口上(见图3),在要抓包的网卡上单击Start按钮。

ed5b8ba6fccab2fdfb963de9ca4f32efeda0c826

4.在服务器B上ping A的IP地址,结果是通的(见图4)。该操作产生的网络包已经被Wireshark捕获。

afd80246f8d0659f11a28865c18c4b5b4d999908

5.在Wireshark的菜单栏上,再次单击Capture,然后单击Stop。

6.在Wireshark的菜单栏上,单击File,再单击Save,把网络包保存到硬盘上(这一步并非必需,但存档是个好习惯)。

7.收集每台设备的MAC地址以备分析。

服务器A: 00:0c:29:0c:22:10
服务器B: 00:0c:29:51:f1:7b
默认网关: 00:50:56:e7:2f:88
现在可以分析网络包了。如图5所示,Wireshark的界面非常直观。最上面是Packet List窗口,它列出了所有网络包。在Packet List中选定的网络包会详细地显示在中间的Packet Details窗口中。由于我在Packet List中选定的是3号包,所以图5中看到的就是Frame 3的详情。最底下是Packet Bytes Details窗口,我们一般不会用到它。


f474def82734aeb251d007b742fd713ad109e8ee

接下来看看每个包都做了些什么。

1号包(见图6):


cb9eda68c54c15ce997c763ced7da3dcb013a49c

服务器B通过ARP广播查询默认网关192.168.26.2的MAC地址。为什么我ping的是服务器A的IP,B却去查询默认网关的MAC地址呢?这是因为B根据自己的子网掩码,计算出A属于不同子网,跨子网通信需要默认网关的转发。而要和默认网关通信,就需要获得其MAC地址。

2号包(见图7):


560d8983fc7e9940dc988d044bc366fcf97b8bce

默认网关192.168.26.2向B回复了自己的MAC地址。为什么这些MAC地址的开头明明是“00:50:56”或者“00:0c:29”,Wireshark上显示出来却都是“Vmware”?这是因为MAC地址的前3个字节表示厂商。而00:50:56和00:0c:29都被分配给Vmware公司。这是全球统一的标准,所以Wireshark干脆显示出厂商名了。

3号包(见图8):


c32086969a21a15be72b73c160e833339110761a

B发出ping包,指定Destination IP为A,即192.168.26.129。但Destination MAC却是默认网关的00:50:56:e7:2f:88(Destination MAC可以在图8中的Packet Details中看到)。这表明B希望默认网关把包转发给A。至于默认网关有没有转发,我们目前无从得知,除非在网关上也抓个包。

4号包(见图9):


706176e1229f2896ff9f0d146570ec30f2da80fc

B收到了A发出的ARP广播,这个广播查询的是B的MAC地址。这是因为在A看来,B属于相同子网,同子网通信无需默认网关的参与,只要通过ARP获得对方MAC地址就行了。这个包也表明默认网关成功地把B发出的ping请求转发给A了,否则A不会无缘无故尝试和B通信。

5号包(见图10):


f195b43ba687ad9c69f25dd1f96e6b7b64735773

B回复了A的ARP请求,把自己的MAC地址告诉A。这说明B在执行ARP回复时并不考虑子网。虽然ARP请求来自其他子网的IP,但也照样回复。

6号包(见图11):


000fdca4b20035b3584517eadcff64ad1773b53c

B终于收到了A的ping回复。从MAC地址00:0c:29:0c:22:10可以看出,这个包是从A直接过来的,而不是通过默认网关的转发。

7、8、9、10号包(见图12):


b5244812f59cdff3e0f389d620a92a1b70228283

都是重复的ping请求和ping回复。因为A和B都已经知道对方的联系方式,所以就没必要再发ARP了。

分析完这几个包,答案出来了。原来通信过程是这样的:B先把ping请求交给默认网关,默认网关再转发给A。而A收到请求后直接把ping回复给B,形成图13所示的三角形环路。不知道你答对了吗?

通过这道题,不知道你是否已经感受到了Wireshark的神奇?如果有兴趣进一步练习,不妨也搭个环境,把这道题里A和B的掩码互换一下。看看这次还能ping通吗?如果不能,原因又在哪里?


0126471a1fc0053cfca576125b04f985cb2e1b2c

其实做题对Wireshark只是大材小用,它还可以用于学习复杂的协议,或者解决隐蔽的难题。在下文中,我们将体验Wireshark在实际工作中的应用。

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

相关文章:

  • jobs 命令示例
  • 《Haskell并行与并发编程》——第2章,第2.4节Deepseq
  • 《C++ AMP:用Visual C++加速大规模并行计算》——3.5 array_view T,N
  • 《用友ERP-U8(V8.72)模拟实战----财务、供应链和生产制造》一1.4 系统管理注册和导入演示账套...
  • 《Unreal Engine 4蓝图可视化编程》一导读
  • 《Splunk智能运维实战》——3.8 使用散点图根据大小和响应时间标识离散的请求...
  • 模块与包
  • 生成模型和判别模型
  • 树莓派+pythonista实时监控系统
  • mysql开发之---使用游标双层嵌套对总表进行拆分为帖子表和回复表
  • window 下安装 wget 命令
  • V8 Ignition:JS 引擎与字节码的不解之缘
  • centos安装vsftp
  • 【zabbix系列】安装与加入host
  • 【Sets】使用Google Guava工程中Sets工具包,实现集合的并集/交集/补集/差集
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • C++类的相互关联
  • es6
  • GraphQL学习过程应该是这样的
  • JAVA_NIO系列——Channel和Buffer详解
  • Koa2 之文件上传下载
  • MySQL用户中的%到底包不包括localhost?
  • SpiderData 2019年2月25日 DApp数据排行榜
  • uva 10370 Above Average
  • 分布式熔断降级平台aegis
  • 跨域
  • 微服务入门【系列视频课程】
  • 7行Python代码的人脸识别
  • 带你开发类似Pokemon Go的AR游戏
  • ​ssh免密码登录设置及问题总结
  • ​ubuntu下安装kvm虚拟机
  • #考研#计算机文化知识1(局域网及网络互联)
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (Java)【深基9.例1】选举学生会
  • (JS基础)String 类型
  • (超详细)语音信号处理之特征提取
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (转) Android中ViewStub组件使用
  • (转)原始图像数据和PDF中的图像数据
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • ::
  • :“Failed to access IIS metabase”解决方法
  • @JsonFormat与@DateTimeFormat注解的使用
  • [120_移动开发Android]008_android开发之Pull操作xml文件
  • [2]十道算法题【Java实现】
  • [20150321]索引空块的问题.txt
  • [20190113]四校联考
  • [23] GaussianAvatars: Photorealistic Head Avatars with Rigged 3D Gaussians
  • [C# WPF] 如何给控件添加边框(Border)?
  • [C/C++随笔] char与unsigned char区别