您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > Wireshark教程7
第7章高级7.1.说明在本节将介绍Wireshark的一些高级特性7.2.FollowTCPStream如果你处理TCP协议,想要查看Tcp流中的应用层数据,FollowingTCPstreams功能将会很有用。如果你项查看telnet流中的密码,或者你想尝试弄明白一个数据流。或者你仅仅只需要一个显示过滤来显示某个TCP流的包。这些都可以通过Wireshark的FollowingTCPstreams功能来实现。在包列表中选择一个你感兴趣的TCP包,然后选择Wireshark工具栏菜单的FollowingTCPStreams选项(或者使用包列表鼠标右键的上下文菜单)。然后,Wireshark就会创建合适的显示过滤器,并弹出一个对话框显示TCP流的所有数据。如图7.1“FollowTCPStream对话框”所示注意值得注意的是:FollowTcpStream会装入一个显示过滤来选择你已经选择的Tcp流的所有包。7.2.1.FollowTCPStream对话框图7.1.FollowTCPStream对话框流的内容出现的顺序同他们在网络中出现的顺序一致。从A到B的通信标记为红色,从B到A的通信标记为蓝色。当然,如果你喜欢的话你可以从Edit/Preferences菜单项的Colores修改颜色。非打印字符将会被显示为圆点。XXX-Whataboutlinewrapping(maximumlinelength)andCRNLconversions?在捕捉过程中,TCP流不能实时更新。想得到最近的内容需要重新打开对话框。你可以在此对话框执行如下操作:1.SaveAs以当前选择格式保存流数据。2.Print以当前选择格式打印流数据。3.Direction选择流的显示方向(Entireconversation,datafromAtoBonlyordatafromBtoAonly).4.Filteroutthisstream应用一个显示过滤,在显示中排除当前选择的TCP流。5.Close关闭当前对话框。移除对当前显示过滤的影响。你可以用以下格式浏览流数据。1.AsCII。在此视图下你可以以ASCII凡是查看数据。当然最适合基于ASCII的协议用,例如HTTP.2.EBCDIC。Forthebig-ironfreaksoutthere.(不知道这句是什么意思,EBCDIC是IBM公司的字符二进制编码标准。)3.HEXDump.允许你查看所有数据,可能会占用大量屏幕空间。适合显示二进制协议。4.CArrays.允许你将流数据导入你自己的C语言程序。5.RAW。允许你载入原始数据到其他应用程序做进一步分析。显示类似与ASCII设置。但“saveAs”将会保存为二进制文件。7.3.时间戳时间戳,时间戳的精度,等等是在让人感到困惑。本节将向你介绍介绍Wireshark处理时间戳时都发生了什么。在包被捕捉时,每个包在进入时都被加上时间戳,这个时间戳将会保存在捕捉文件中,所以他们也可以在以后分析时使用。那么说,时间戳是从哪里来的呢?是捕捉的时候产生的。Wireshark从libpcap(WinPcap)libraray(库)中获得时间戳。而libpcap(winpcap)又是从操作系统内核获得的时间。如果捕捉数据是从捕捉文件载入的,很显然Wireshark从文件中获得时间戳数据。7.3.1.Wireshark内置Wireshak内置的格式使用的时间戳格式由日期(从1.1.1970开始)和时间(从凌晨起,纳秒(10亿分之一秒)为单位)组成。你可以调整Wireshark在包列表的时间戳显示方式。见第3.7节“View菜单”的TimeDisplayFormat项。当读取或写入捕捉文件时,Wireshark按需要在内置格式和其他捕捉文件格式间进行时间戳转换。捕捉时,Wireshark使用libpcap(WinPcap)捕捉库(支持纳秒精度)。除非你在专用的捕捉硬件上进行捕捉,一般这样的精度已经足够了。7.3.2.捕捉文件格式Wireshark支持的捕捉文件格式都带有时间戳。不同的捕捉文件格式的时间戳精度有很大不同,从秒0到纳秒0.123456789都有。大多数格式捕捉文件存储的时间戳都是固定精度的,些捕捉文件格式甚至存储了时间戳精度本身(可能是出于方便)。大多数被Wireshark(和或多其他工具)使用的libpcap捕捉文件格式都仅支持固定的百万分之一固定精度0.123456注意写入数据到一个实际支持精度比你写入数据精度低的格式文件中,可能会导致数据丢失。例如:如果你载入一个纳秒精度的捕捉文件,然后将其存储为libpcap文件(百万分之一秒精度)。Wireshark很明显会将时间精度调整为百万分之一秒。7.3.3.准确性经常有人问:Wireshark的时间戳的准确性如何?。实际上,Wireshark自身不会创建时间戳,而是通过其他的地方得到时间并显示他们。所以,准确性取决于你实用的捕捉系统(操作系统,性能。。。)。因此以上问题很难通过通常的途径回答。注意通常USB连接的网络适配器提供的精度非常差。入口的实际上“占用很长的时间和走很曲折的路”才能穿过USB数据线到系统内核。而数据包只有被系统内核处理过以后才会打上时间戳,这种时间戳机制将会导致准确性大大降低。结论:如果你需要精确的时间戳,请不要使用USB连接的网卡!(笔者的注脚:有没有网卡在USB硬件上提前加上时间戳的?)[17]7.4.时区当你在各地旅行时,会碰到时区的困扰。如果你从其他时区得到捕捉文件,时区问题会给你带来更大的困扰:-)首先,下面有两个原因说明你为什么完全不需要考虑时区问题:你仅对两个包的时间戳的差别有兴趣,你并不需要了解捕捉包的实际的日期和时间(通常是这样)。很可能你不会得到不同与你所在时区的包文件,所以你基本上碰不到时区问题。例如:你的团队的所有都和你工作在一个时区。表7.1.什么是时区?人们希望时间和日升日落对应。早成应该是6点钟,天黑应该在20:00.这些时间又随着四季变化。如果地球上每个人使用同样的全局时间,将只有一小部分人的日落和时间对应,这将会导致混乱。因此,人们将地球划分为不同的区域,每个区域都有一个本地时间对应本地的日升日落。时区基于UTC(CoordinatedUniversalTime)或者Zulu时间(军事和航空)。旧有的GTM(格林尼治时间)已不再使用,因为它有少许误差(与UTC相比达到0.9秒)。UTC起始时区等于0(位于格林威治,英格兰),所有的时区和它的偏在在-12~+14小时之间!例如:如果你住在柏林,你的时区将比UTC早1小时,所以你的时区应该是+1(与UTC时间比较的差别,以小时为单位)。柏林的3点和UTC的两点钟表示同一个时刻。有些地区要加以注意,因为那里的时区不是用整小时的。(比如:新德里的时区是UTC+05:30)更多相关信息见和。表7.2.什么是时DST?DaylightSavingTime(DST),又称为夏令时,目的是在夏天的几个月里“拯救”白天的时间(夏季白昼较长,如果按照传统的作息时间,比较可惜,不过我不认为)。为了达到这个目的,很多国家(但不是所有的)增加一个DST小时到UTC中。所以你还得加个小时(极少数地方甚至是2小时)的时差来计算你的时区。不幸的是,DST并未在全世界范围内被启用。你可能同样注意到,北半球和南半球的夏令时是刚好相反的(比如:欧洲是夏季时,澳大利亚则是冬季)。注意:不管DST怎样,UTC在全年都是一致的。更多相关信息见正确设置你的计算机的时区如果你同世界各地的人一同工作,正确设置计算机时区非常有必要。你应当按正确的顺序设置时间和时区1.设置正确的时区。2.设置本地时间。这样的顺序将告诉你的计算机本地时间和时区。提示如果你去各地旅行,通常可能会犯尝试调整计算机本地时间的错误。实际上并不需要这样做,仅仅调整时区就可以了。在计算机上,时间实际上没有发生变化,你只是在不同时区采用不同的本地时间而已。提示你可以使用网络时间协议(NetworkTimeProtocolNTP)通过与互联网上的NTP授时服务器同步来自动调整你的计算机的时间。Wireshark支持的所有平台都可以使用NTP客户端,可参见的介绍。7.4.2.Wireshark和时区的关系那么,Wireshark和时区到底有什么关系?Wireshark原生的捕捉文件格式(libpcap格式),和一些其他格式,例如sniffer,EtherPeek,AiroPeek和Sunsnoop格式,都将包到达时间存储为UTC时间。UNIX系统,WindosNT系统(NT4.0,2000,xp,2003,vista)在系统内部都将时间表示为UTC.当Wireshark进行捕捉时,无需进行转换。但如果你没有正确设置时区,即使系统时钟正确显示了本地时间,UTC时间也有可能是错误的。windows9X系列(win95,98,winMe)在系统内部以本地时间表示时间。在捕捉时,WinPcap必须将时间转换为UTC时间再发送给Wireshark.如果时区设置错误,转换时间也不会正确。其他捕捉格式,如MicrosoftNetworkMonitor,Dos-basedSniffer,和NetworkInstrumentsObserver格式,保存包到达时间为本地时间。在Wireshark内部,时间戳以UTC时间显示;这意味着,如果要读取那些保存包达到时间为本地时间的捕捉文件,Wireshark需要将本地时间转换为UTC时间。随后Wireshark会始终以本地时间显示时间戳。用于显示捕捉数据的计算机会将UTC时间转换为本地时间,并显示这个这个本地时间。对于那些是以UTC值来存储包到达时间的捕捉文件,这意味着到达时间会显示为你所在时区的本地时间,这很有可能同与你不同时区的捕捉数据的人看到的到达时间不一样。对于那些以本地时间存储包到达时间的包文件,时区转换会使用你所在的时区与UTC偏差,以及DST规则进行转换,这很可能会导致错误时间显示,将显示设置修改改为显示本地时间可能会修正这个错误,这样现实的时间值可能会与捕捉文件到达时间一致。表7.3.各时区UTC到达时间LosAngelesNewYorkMadridLondonBerlinTokyoCaptureFile(UTC)10:0010:0010:0010:0010:0010:00LocalOffsettoUTC-8-5-10+1+9DisplayedTime(localTime)02:0005:0009:0010:0011:0019:00举例:假定有人在洛杉矶本地时间临晨2:00点整捕捉了一个包,然后发送给你包含那个包的文件。那个包在包文件中的时间戳将是UTC时间10:00.你在柏林打开后会看到那个包显示的时间是11:00点。假设现在你和你的同事正在通过电话,视频会议,或者网络会议讨论那个包文件。前面提到的那个包,在洛杉矶的朋友看到的依然是2:00,而你看到的却是11:00。对同一个时间点,两个地方会显示不同的本地时间。结论:你可能不介意你看到的时间戳的日期/时间显示,除非你确实需要正确设置时间/日期。所以,如果你得到一个其他时区/DST的捕捉文件,你必须了解两地的时区/DST的不同,对时间戳做合适的调整。无论怎样,确定每台电脑都正确设置了时间和时区。7.5.合并包7.5.1.什么是合并包网络协议经常需要传输较大的数据块,在传输时,底层协议可能不支持这样大的数据块(比如网络包大小的限制),或者是像像TCP一样的流数据,TCP流完全不知道数据分块情况。(原文为:orisstream-basedlikeTCP,which
本文标题:Wireshark教程7
链接地址:https://www.777doc.com/doc-2856649 .html