《Wireshark网络分析就这么简单》—小试牛刀:一个简单的应用实例

小试牛刀:一个简单的应用实例
Wireshark网络分析就这么简单
我的老板气宇轩昂,目光笃定,在人群中颇有大将风范(当然是老板娘不在场的时候)。有一年我们在芝加哥流落街头,也没见他皱过眉头。不过前几天,这位气场型领导竟然板着脸跑过来,说赶紧帮忙,有位同事被客户骂惨了。我当然不能拒绝帮(yao)助(qiu)同(jia)事(xin)的机会,立即加入电话会议。

原来事情是这样的:客户不小心重启了服务器A,然后它就再也无法和服务器B通信了。由于这两台服务器之间传输的是关键数据,现场工程师又一时查不出原因,所以客户异常恼火。

问题听起来并不复杂,考虑到起因是服务器A的重启,所以我收集了它的网络配置(见图1)。

服务器B的网络配置则简单很多,只有一个IP地址192.168.182.131,子网掩码也是255.255.255.0。
当我们在A上ping B时,网络包应该怎么走?阅读以下内容之前,读者不妨先停下来思考一下。

一般情况下,像A这类多IP的服务器是这样配路由的:假如自身有一个IP和对方在同一子网,就从这个IP直接发包给对方。假如没有一个IP和对方同子网,就走默认网关。在这个环境中,A的3个IP显然都与B属于不同子网,那就应该走默认网关了。会不会是A和默认网关的通信出问题了呢?我从A上ping了一下网关,结果却是通的。难道是因为网关没有把包转发出去?或者是ping请求已经被转发到B了,但ping回复在路上丢失?我感觉自己已经走进死胡同。每当到了这个时候,我就会想到最值得信赖的队友——Wireshark。

我分别在eth0、eth1、和eth2上抓了包。最先查看的是连接默认网关的eth0,出乎意料的是,上面竟然一个相关网络包都没有。而在eth1上抓的包却是图2的表现: A正通过ARP广播查找B(192.168.182.131)的MAC地址,试图绕过默认网关直接与B通信。这说明了什么问题呢?

这说明A上存在一项符合192.168.182.131的路由,促使A通过eth1直接与B通信。我赶紧逐项检查路由表,果然发现有这么一项(见图3):

因为192.168.182.131属于192.168.182.0/255.255.255.0,所以就会走这条路由。由于不同子网所配的VLAN也不同,所以这些ARP请求根本到达不了B。ping包就更不用说了,它从来就没发出来过。客户赶紧删除了这条路由,两台服务器的通信也随即恢复。

为什么A重启之后会多了这条莫名其妙的路由呢?根据客户回忆,他们以前的确是配过该路由的,后来删掉了,不知道为什么配置文件里还留着。今天的重启加载了一遍配置文件,所以这条路由又出现了。你也许会问,为什么不从一开始就仔细检查路由表呢?这样就不至于走错胡同,连抓包和Wireshark都省了。我当时也是这样反省的,但现实中要做到并不容易。且不说一开始并没有怀疑到路由表,就算怀疑了也不一定能看出问题来。在这个案例中,系统管理员和现场工程师都检查过路由表,但无一例外地忽略了出问题的一项。这是因为真实环境中的路由表有很多项,在紧张的电话会议上难以注意到多出了异常的一项。而且子网掩码也不是255.255.255.0那么直观。假如本文所用的IP保持不变,但子网掩码变成255.255.248.0,路由表就成了图4所示的样子。

在这个输出中,难以一眼注意到192.168.176.0就适用于目标地址192.168.182.131,至少对我来说是这样的。
我们能从这个案例中学习到什么呢?最直接的启示便是翻出简历,投奔甲方去。这样就可以在搞砸系统的时候,义正词严地要求乙方解决了。假如你固执地想继续当乙方,那就开始学习Wireshark吧。再有经验的工程师也有犯迷糊的时候,而Wireshark从来不会,它随时随地都能告诉你真相,不偏不倚。

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

时间: 2024-10-01 04:51:26

《Wireshark网络分析就这么简单》—小试牛刀:一个简单的应用实例的相关文章

一个简单的线程管理方式。

文章来源: www.17173.com 周末,总是有点那么的无聊.闲来没事,想想每次自己要进行多线程编程时的痛苦,也并借机考虑设计了一个简单的线程管理方式.      没什么好说的,首先想想线程的创建,每次都要CreateThread,传递一堆的参数,还得没事查查MSDN,唉,效率低啊.反正,对于我来说,线程基本都是缺省优先级.缺省安全的.不如把这些一起封装了.     不多说,C++不用对象机制用什么?顺便借鉴一下java.来个实际线程就是run,启动采用start. class thread

写一个简单的实时互动小游戏

在写之前,我们先回顾上一篇文章,从需求.架构.设计.开发上讲述并演示了搭建一个实时通信客户端的过程,并附了图片与视频. 写这篇文章的之前,第一个互动的游戏DEMO已经写好了,先附上截图 很奇怪的一张图,别问我画的是啥,这个DEMO就是将2边的动画同步. 研究下代码 核心代码其实很简单 代码结构 代码结构很简单,和前一篇改动的唯一就是CanvasScene(场景类). 深入看一看 红框里的动画是xcode推荐的动画,就是创建无限循环的精灵. 这个精灵我称之为"创建精灵",因为它从来不实际

《Wireshark网络分析就这么简单》目录—导读

内容提要 Wireshark网络分析就这么简单 Wireshark可能是世界上最好的开源网络包分析器,能在多种平台上(比如Windows.Linux和Mac)抓取和分析网络包,在IT业界有着广泛的应用. 本书采用诙谐风趣的手法,由浅入深地用Wireshark分析了常见的网络协议,读者在学习Wireshark的同时,也会在不知不觉中理解这些协议.作者还通过身边发生的一些真实案例,分享了Wireshark的实战技巧. 本书不务虚,不注水,几乎页页干货,篇篇精华,力求为读者提供最佳阅读体验,使读者在一

《Wireshark网络分析就这么简单》—你一定会喜欢的技巧

你一定会喜欢的技巧 Wireshark网络分析就这么简单 我开始学习Wireshark的时候,到处碰壁,差点就放弃了.那时最希望的是有前辈能指点迷津,可惜四处求教却鲜有收获.即便多年后的今天,网络上能找到的中文资料还是寥寥无几,少之又少.所以我总结了一些自认为称得上技巧的东西,希望能帮初学者少走一点弯路. 一.抓包 拿到一个网络包时,我们总是希望它尽可能小.因为操作一个大包相当费时,有时甚至会死机.如果让初学者分析1GB以上的包,估计会被打击得信心全无.所以抓包时应该尽量只抓必要的部分.有很多方

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

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

《Wireshark网络分析就这么简单》—Excel文件的保存过程

*Excel文件的保存过程Wireshark网络分析就这么简单当我们在Notepad等文本编辑器上单击File-->Save的时候,底层的操作非常简单-编辑器上的内容被直接写入文件了(见图1).假如这个文件是被保存到了网络盘上,我们就可以从Wireshark抓包上看到这个过程(见图2). 包号58:客户端:"我要写6个字节到/Temp/wireshark.txt中". 包号59: 服务器:"写好了." 相比之下,微软Office保存文件的过程就没有这么简单了,

《大咖讲Wireshark网络分析》—再来一个很妖的问题

再来一个很妖的问题 大咖讲Wireshark网络分析 有读者问,"叔叔,你那些很"妖"的网络问题是在哪找的?我也很感兴趣,但是从来没有遇到过." 叔叔听完这句话,顿时觉得心里好苦--都是这些"妖怪"自己找上门的,我想躲都来不及,哪会主动去找啊!我们全球有几千用户,假如每位用户每年遇到一次网络故障,我就有看不完的包了.<Wireshark网络分析的艺术>中讲到的那些案例,其实只占极小部分,公司电脑里还躺着几百个案例等着整理呢.既然你们对

利用Wireshark和OSS的API文档简单实现上传和下载

背景及目的 由于各个开发者使用的开发语言可能在官方SDK找不到相应的语言版本,就必须自主开发SDK. 本文根据wireshark和API文档,来简单实现上传和下载的请求,给需要自主开发的开发者提供一个简单的示例. 准备工作 安装wireshark 官网地址:https://www.wireshark.org/download.html 找到合适的平台及版本,下载并安装. 找到OSS的API文档 官网地址:https://help.aliyun.com/document_detail/oss/ap

ANTLR#1:描述一个简单计算器

ANTLR是什么鬼?引用官网的说明, What is ANTLR? ANTLR (ANother Tool for Language Recognition) is a powerful parser generator for reading, processing, executing, or translating structured text or binary files. It's widely used to build languages, tools, and framewo