wireshark代码解析1
wiresharkicmp、mac地址分析
wiresharkicmp、mac地址分析
ICMP
1表明源ip地址和⽬的ip地址 icmp 协议是icmp
2类型是0表明这是回显响应
3代码为0
4检验和为0x4d4e
5序列号为0x000d与请求包相同
6请求帧为126帧
mac帧格式分析
mac帧格式是有5部分组成,由⽬的mac和源mac以及类型组成、数据、fcs
1:⽬的mac f8:28:19:da:de:a7
2: 源 mac d8:9a:34:35:ef
3: 类型为IPv4
4、数据字段(46-1500):正式名称是MAC客户数据字段最⼩长度64 字节-18字节的⾸部和尾部 = 数据字段的最⼩长度
5、FCS字段(4 字节):当数据字段的长度⼩于 46 字节时,应在数据字段的后⾯加⼊整数字节的填充字段,以保证以太⽹的MAC帧长不⼩于64 字节
MAC地址分析
MAC地址的长度为48位(6个字节),通常表⽰为12个16进制数,d8:9a:34:35:ef就是⼀个MAC地址,其中前6位16进制数d8:9a_34代表⽹络硬件制造商的编号,它由IEEE(电⽓与电⼦⼯程师协会)分配,⽽后6位16进制数34:35:ef代表该制造商所制造的某个⽹络产品(如⽹卡)的系列号。
wireshark protobuf 解析 -回复
wireshark protobuf 解析-回复如何使用Wireshark解析Protobuf数据包Wireshark是一种流行的网络协议分析工具,它可以帮助我们深入了解网络通信过程中的数据包。
然而,当我们遇到使用Protobuf进行编码的数据包时,解析这些数据包可能会变得复杂起来。
在本文中,我将详细介绍如何使用Wireshark正确解析Protobuf数据包,帮助您更好地理解网络通信过程中的数据传输。
1. 确认Wireshark版本及配置首先,确保您已经安装了最新版本的Wireshark,并且已经正确配置好了相关选项。
打开Wireshark并进入“Edit”>“Preferences”菜单,确保“Protocols”选项卡中的“Protobuf”已经被选中。
如果没有选中,勾选该选项并保存更改。
2. 捕获数据包连接到需要分析的网络,并在Wireshark的主界面使用适当的过滤器来捕获相关的数据包。
如果您已经知道待解析的数据包是使用Protobuf编码的,您可以使用过滤器"protobuf"来捕获与Protobuf相关的数据包。
捕获数据包后,您将看到屏幕上显示的原始数据包列表。
3. 选择要解析的数据包在列表中选择一个使用Protobuf编码的数据包,右键点击该数据包并选择“Follow”>“Protobuf”>“Decode as”选项,然后选择与您的协议相对应的消息类型。
4. 解析Protobuf数据包在选择了正确的数据包和消息类型后,Wireshark将使用Protobuf解码器尝试解析该数据包。
在解析完成后,您将看到解析结果在Wireshark的主界面中以树状结构呈现。
5. 查看解析结果通过展开树状结构,您可以查看Protobuf数据包中的不同字段和值。
Wireshark将为您解析和展示每个字段的名称、类型和值。
您还可以查看嵌套的消息类型以及各字段的编码方式等细节。
攻防世界-Misc高手进阶区部分Writeup
攻防世界-Misc⾼⼿进阶区部分Writeup 1.Training-Stegano-1WinHex打开,得到flag2.wireshark-1⽤Wireshark打开之后,先查找其中的HTTP在⼀处HTTP中找到了⽹站的信息在keyword⼀⾏追踪TCP流,发现flag3.János-the-Ripper⽤WinHex打开,发现前缀是zip⽂件前缀把⽂件后缀名改成.zip⽂件,打开之后发现是加密⽂件爆破得到密码:fish输⼊密码,解压,得到flag4.Test-flag-please-ignore记事本打开,发现⼀串16进制字符16进制转⽂本字符串,得到flag5.Banmabanma⼀看就是条形码,打开⽹站,扫描,得到flag,⽹站地址6.Hear-with-your-Eyes下载好⽂件之后解压,发现⾥⾯有个没有后缀的⽂件,放到winhex⾥观察,⽂件头是1f8b0800,百度搜了搜发现是个zip⽂件的⽂件头,于是把后缀改为zip 解压,有⼀个wav后缀的⾳频⽂件,⽤audacity打开这个⾳频⽂件,然后调⾄频谱图,出现flag7.pure_color⽤Stegsolve打开,发现flag8.What-is-this⽤WinHex打开,发现是两个⽂件,改成压缩包.zip的格式,解压,发现两张图⽚,⽤Stegsolve打开,图⽚合并得到flag9.base64÷4题⽬告诉是base16解码得到flag10.embarrassWireshark找了半天没找到,百度⼀下才发现是⽤HxD打开⽤WinHex打开,Ctrl+F,直接获得flag11.神奇的ModbusWireshark打开,追踪tcp流,得到flag(虽然在wireshark中显⽰的是Easy_Mdbus,但得写成Easy_Modbus才能提交成功)12.快乐游戏题还真是⼀个游戏,赢了就得到flag了quipqiup词频分析,得到flag14.肥宅快乐题这个题⽬下载到⼿是⼀个.swf后缀的⽂件,⽤到⼀个特殊的⼯具,叫做potplayer把这个.swf⽂件使⽤这个⼯具打开在放到57帧的时候,出现了下⾯的对话有⼀段base64:提取出来:U1lDe0YzaVpoYWlfa3U0aWxlX1QxMTF9base64解码得flag:SYC{F3iZhai_ku4ile_T111}15.easycap打开⽂件,追踪tcp流,得到flag16.签到题给了⼀串字符串:Z2dRQGdRMWZxaDBvaHRqcHRfc3d7Z2ZoZ3MjfQ==base64解密:ggQ@gQ1fqh0ohtjpt_sw{gfhgs#}栅栏密码7字⼀栏:ggqht{ggQht_gsQ10jsf#@fopwh}凯撒密码位移14:ssctf{ssCtf_seC10ver#@rabit}17.Excaliflag⽤Stegsolve打开,得到flag:3DS{Gr4b_Only_th1s_B1ts}(看flag是真费眼睛)18.Get-the-key.txt⽤WinHex打开,发现是个压缩包,⽂件后缀改成.zip打开key.txt,得到flag:SECCON{@]NL7n+-s75FrET]vU=7Z}19.misc1给出⼀串16进制字符串,ASCII码只有0-127,⽽发现这⼀串16进制字符串化成⼗进制后都⼤于128所以转化成⼗进制之后再减去128,再转成ASCII码,代码如下:char = "d4e8e1f4a0f7e1f3a0e6e1f3f4a1a0d4e8e5a0e6ece1e7a0e9f3baa0c4c4c3d4c6fbb9e1e6b3e3b9e4b3b7b7e2b6b1e4b2b6b9e2b1b1b3b3b7e6b3b3b0e3b9b3b5e6fd" for i in range(0,len(char),2):print(chr(int(char[i:i+2],16)-128),end="")运⾏得到flag:20.2017_Dating_in_Singapore题⽬描述给出了⼀串字符串,复制到txt⽂本上,“-”肯定是分隔,每段字符通过观察⼜都是2的倍数,所以↓这样两两分隔开来然后题⽬附件给出了⼀个⽇历,通过观察txt⽂本上的数字,发现都不超过31,⽽且是12⾏对应12个⽉份,于是猜测在⽇历上找到对应⽇期:得到flag:HITB{CTFFUN}21.can_has_stdio?记事本打开,发现是Brainfuck编码,去解码,得到flag22.Erik-Baleog-and-Olaf⽤WinHex打开,发现是png头,后缀改为.png⽤Stegsolve打开发现有⼀个很⼩的⼆维码,直接扫,扫不出来,不断切换找到⼀张最清的⼆维码:⽤截图⼯具截个图:再把这张图放进 stegsolve中,找到⼀张更清的图⽚,保存下来扫描得到flag:flag{#justdiffit}23.适合作为桌⾯⽤Stegsolve打开,发现⼀张⼆维码扫码之后得到⼀串字符串WinHex新建⽂件观察可知通过保存为pyc⽂件,反编译,得到python代码,运⾏,得到flag24.⼼仪的公司⽤Wireshark打开,http筛选,追踪tcp流,得到fl ag25.stage1和“适合作为桌⾯”⼀个解法,前⾯有说,python代码如下:str = [65,108, 112,104,97,76,97,98]flag = ''for i in str:flag += chr(i)print flag运⾏,得到flag:AlphaLab26.很普通的数独下载发现是⼀堆数独图⽚,把有数字的记为1,没有数字的记为0,结果保存在txt⽂本中(这个是真的折磨⼈,直接上⽹上找⼤佬弄完的看了) 111111101010101000101000001111110000101111111100000101100111101010011101100011001001000001101110101110011111010011111101000101001011101101110101101100010001010000011110001101011101101110100011100100001111101111111011101011101100000101100100000011000100001110100001000001111111101010101010101010101010101011101111111000000000011001101001000110100110011100000000110011100100100001111111100100101000000101111101001001011111111101110101011110101101001100100000111100100100000110001101001101010001010001100010011010001010011000100000010110010000010110101010001111110100011101001110101101111100011000100011100111011101101100101101110001001100110100000000010010000111100101101011010101000001011010111110011011111101001110100011110111110111011001101100010100001110000100000110101000010101000011101101101110101101001100010011111110001011111010001000011011101101100011001011001010101100011110101001100001010010010111111111101011111111101101101111111111100011110001100000100001000101000100100100011110111110101110011100111010110100110100101010010110010001011101011101000111100000011100010000101011111011100111101111111100001010111110010110100011000111000100111101101111101000100010111101111110001001000011010110001111110111110011001010101000110010100010001000101101010001011101110101101101100100001101101000111101001110110001001101100010101101111110100101100110000011100111000000000100001010101111100010010111010010011110011101110010100001011111010010101001100010111111110100000100001010101010100000010011001001101110101001111100101111101101000010111101110001101011000001000101110100110011110011010100010100000011011000001110010000100110100100001101111111101100101110111110011000000001111110101101000101011100100100011010111111100011111011011010101101110011101011110100000101110101101101000111110010001100010001101110101011100001111111101101001000111111011101110100110111101101000001001101100011101101101110100000011101100001101010110010010010001100000101011001011111011001011000011010110000111111101010101001111011110101101110000101101通过python代码将01进制转换为图⽚,得到⼀张⼆维码from PIL import Imagex = 45y = 45im = Image.new('RGB', (x, y))white = (255, 255, 255)black = (0, 0, 0)with open('file.txt') as f:for i in range(x):ff = f.readline()for j in range(y):if ff[j] == '1':im.putpixel((i, j), black)else:im.putpixel((i, j), white)im.save("1.jpg")扫描得到⼀串字符串:Vm0xd1NtUXlWa1pPVldoVFlUSlNjRlJVVGtOamJGWnlWMjFHVlUxV1ZqTldNakZIWVcxS1IxTnNhRmhoTVZweVdWUkdXbVZHWkhOWGJGcHBWa1paZWxaclpEUmhNVXBYVW14V2FHVnFRVGs base64多次解码得到flag:flag{y0ud1any1s1}27.很普通的Disco是wav⾳频⽂件,⽤audacity打开,在开头部分发现⼀段诡异的⾳乐,放⼤上⾯是1,下⾯是0,得到:110011011011001100001110011111110111010111011000010101110101010110011011101011101110110111011110011111101,总共105个01字符,每15个⼀组,共7组,先转化为⼗进制,再把⼗进制转换为ASCII码,python代码如下a='110011011011001100001110011111110111010111011000010101110101010110011011101011101110110111011110011111101'flag=''for i in range(15):b=a[i*7:i*7+7]c=int(b,2)flag+=chr(c)print(flag)运⾏,得到flag:flag{W0W*funny}28.miscmisc⽤Winhex打开,发现是个压缩包,⽂件后缀改成.zip,解压,得到⼀个压缩包和⼀个图⽚,图⽚看了⼀眼,没什么⽤,压缩包是加密的,于是⽤Ziperello暴⼒破解密码:解压得到:flag.txt是假的...解压flag.zip得到⼀个加密压缩包,⼀个doc⽂档和⼀张图⽚先看图⽚,告诉密码在world.doc⾥⾯⽤Stegsolve打开图⽚,在LSB BGR条件下发现pass,所以这是LSB信息隐写得到pass:z^ea,然后打开world.doc,发现只有下⾯这样⼀段⽂字Ctrl+A全选,右键——字体——隐藏⽂字发现了隐藏字符pass内容+world⾥每⾏字符串的最后⼀个字符,就是密码:z^ea4zaa3azf8解压得到flag29.隐藏的信息给出了⼀堆⼋进制数,转成⼗进制再转成字符,得到⼀串base64编码char = "126062126163142103102153142062065154111121157113111105132163131127143066111105154124121060116067124152102146115107065154130062116150142154071172144104102167130063153167144130060113" for i in range(0,len(char),3):print(chr(int(char[i:i+3],8)),end="")base64解码,得到flag30.2-1⽤Winhex打开,发现⽂件头出错,改为89 50,然后宽度改为02 C5,图⽚就可以打开了31.Aesop_secret打开是⼀张GIF图⽚,发现每⼀帧位置都不⼀样,⽤PS把每⼀帧都显⽰出来,然后⽤WinHex打开这张GIF发现⼀串字符串,试了⼀下不是Base64,根据题⽬名字猜测是AES加密,解密两次得到flag32.a_good_idea打开是⼀张图⽚,⽤WinHex打开发现PK,猜测是压缩包,后缀改为.zip,解压得到⼀个提⽰和两张图⽚,⽤Stegsolve将两张图⽚结合在⼀起,得到⼀张图⽚,保存之后再⽤Stegsolve打开,发现⼀张⼆维码,扫描得到flag:NCTF{m1sc_1s_very_funny}33.reverseMe打开图⽚是⼀张翻转倒⽴的图⽚,直接翻转,得到flag34.Reverse-it打开⽂件,⽤WinHex打开,发现是JPG⽂件倒序,修改后缀为JPG⽂件复制16进制⽂件,倒序输出得到正确的16进制⽂件,新建WinHex⽂件,粘贴16进制⽂件得到⼀张倒转的图⽚,翻转再调整位置,得到flag35.something_in_image_下载附件之后,改为txt⽂件,搜索得到flag36.打野使⽤zsteg查看路径,得到flag37.倒⽴屋lsb隐写,⽤Stegsolve打开,发现ISCC2019,根据题⽬名字,猜测倒着输⼊就是flag:flag{9102_cCsI}38.再见李华⽤WinHex打开,在最下⾯发现.txt⽂件和压缩包⽂件头,后缀改为.zip,发现⼀个加密的.txt⽂件,根据题⽬描述,不少于1000字→8的⼆进制,所以密码不少于9位数;记得署名→密码后⼏位是LiHua,AZRP爆破,得到密码:15CCLiHua,打开之后得到flag。
Wireshark教程,看完这个,你也是大神!!!
抓取报文:下载和安装好Wireshark之后,启动Wireshark并且在接口列表中选择接口名,然后开始在此接口上抓包。
例如,如果想要在无线网络上抓取流量,点击无线接口。
点击Capture Options 可以配置高级属性,但现在无此必要。
点击接口名称之后,就可以看到实时接收的报文。
Wireshark会捕捉系统发送和接收的每一个报文。
如果抓取的接口是无线并且选项选取的是混合模式,那么也会看到网络上其他报文。
上端面板每一行对应一个网络报文,默认显示报文接收时间(相对开始抓取的时间点),源和目标IP地址,使用协议和报文相关信息。
点击某一行可以在下面两个窗口看到更多信息。
“+”图标显示报文里面每一层的详细信息。
底端窗口同时以十六进制和ASCII码的方式列出报文内容。
需要停止抓取报文的时候,点击左上角的停止按键。
色彩标识:进行到这里已经看到报文以绿色,蓝色,黑色显示出来。
Wireshark通过颜色让各种流量的报文一目了然。
比如默认绿色是TCP报文,深蓝色是DNS,浅蓝是UDP,黑色标识出有问题的TCP报文——比如乱序报文。
报文样本:比如说你在家安装了Wireshark,但家用LAN环境下没有感兴趣的报文可供观察,那么可以去Wireshark wiki下载报文样本文件。
打开一个抓取文件相当简单,在主界面上点击Open并浏览文件即可。
也可以在Wireshark里保存自己的抓包文件并稍后打开。
过滤报文:如果正在尝试分析问题,比如打电话的时候某一程序发送的报文,可以关闭所有其他使用网络的应用来减少流量。
但还是可能有大批报文需要筛选,这时要用到Wireshark过滤器。
最基本的方式就是在窗口顶端过滤栏输入并点击Apply(或按下回车)。
例如,输入“dns”就会只看到DNS报文。
输入的时候,Wireshark会帮助自动完成过滤条件。
也可以点击Analyze菜单并选择Display Filters来创建新的过滤条件。
winshark教程1
一、Wireshark简介Wireshark是一个有名的网络端口探测器,是可以在Windows、Unix等各种平台运行的网络监听软件,它主要是针对TCP/IP协议的不安全性对运行该协议的机器进行监听。
其功能相当于Windows下的Sniffer,都是在一个共享的网络环境下对数据包进行捕捉和分析,而且还能够自由地为其增加某些插件以实现额外功能。
Ethernet网络监测工具可在实时模式或离线模式中用来捕获和分析网络通信。
下面是使用Wireshark 可以完成的几个工作:l 网络管理员使用它去帮助解决网络问题l 网络安全工程师用它去测试安全问题l 开发人员用它是调试协议的实现过程l 用它还可以帮助人员深入的学习网络协议l 支持UNIX 平台和Windows 平台。
l 从网络接口上捕获实时数据包l 以非常详细的协议方式显示数据包l 可以打开或者存贮捕获的数据包l 导入/导出数据包,从/到其它的捕获程序l 按多种方式过滤数据包l 按多种方式查找数据包l 根据过滤条件,以不同的颜色显示数据包l 可以建立多种统计数据其最常用的功能是被攻击者用来检测被攻击电脑通过23(telnet)和110(pop3)端口进行的一些明文传输数据,以轻松得到用户的登录口令和邮件账号密码。
对于网络管理员来说,也可以通过抓包分析,来确定一些异常的流量和局域网内部的非正常用户与外界的通信,比如说对于现在比较占用网络带宽的诸如Bit T orrent等P2P应用软件流量,通过使用该软件确定这些流量,网络管理员就可以使用流量控制(T C)的方法来规范、合理的分配带宽资源,提高网络的利用率。
二、下载安装WiresharkWireshark可以在/download/上下载,该软件有极其方便和友好的图形用户界面,并且能够使得用户通过图形界面的配置和选择,针对多块网卡、多个协议进行显示,效果非常好。
目前最新版本为:Wireshark 0.99。
Wireshark安装后自动安装winpcap 4.0 ,Winpcap是UNIX下的libpcap移植到windows下的产物,他是一个GPL项目。
01-Wireshark抓包工具介绍
Wireshark 可以捕捉多种网络接口类型的包,包括是无线局域网接口。 Wireshark可以支持许多协议的解码,如IP,TCP,RTP,H.264等。 Wireshark可以用来检测网络安全隐患、解决网络问题,用来学习网络协议、测试协议 运行情况等。
Wireshark不处理网络数据,仅是监测网络。Wireshark不会发送网络包或做其它 数据处理。界面如下:
"File"(文件) ——打开或保存捕获的信息。 "Edit" (编辑)——查找或标记封包。进行全局设置。
"View"(查看) ——设置Wireshark的视图。
"Go" (转到)——跳转到捕获的数据。 "Capture"(捕获)——设置捕捉过滤器并开始捕捉。
"Analyze"(分析)——设置分析选项。
HUAWEI TECHNOLOGIES CO., LTD.
华为保密信息,未经授权禁止扩散
Page 14
2.1 Wireshark抓包环境准备
2. 在通过利用hub集线器将被检测端口的数据复制多路进行捕获;
HUAWEI TECHNOLOGIES CO., LTD.
华为保密信息,未经授权禁止扩散
Page 15
HUAWEI TECHNOLOGIES CO., LTD.
华为保密信息,未经授权禁止扩散
Page 29
Thank you
华为保密信息,未经授权禁止扩散
Page 22
h225||h245||q931 说明:协议h.225或h.245或q.931的所有报文
HUAWEI TECHNOLOGIES CO., LTD.
wireshark数据包分析实战第一章
wireshark数据包分析实战第⼀章1,数据包分析⼯具:tcpdump、wireshark。
前者是命令⾏的,后者是图形界⾯的。
分析过程:收集数据、转换数据(⼆进制数据转换为可读形式)、分析数据。
tcpdump不提供分析数据,只将最原始的数据展现给分析⼈员。
⼤⽜使⽤tcpdump较多。
⽽wireshark可以根据数据包的内容进⾏分析,划分出不同类型的协议数据包等。
2,可以将⽹卡设置成混杂模式,⽹卡将抓取⼀个⽹段的所有⽹络通信流量,⽽不仅是发往它的数据包。
3,集中⽹络硬件:集线器、交换机、路由器。
集线器:物理层上的转发设备A计算机通过集线器发往计算机B,计算机C、D都会收到数据包,只是通过MAC地址⽐较发现不是传给⾃⼰的⽽将其丢弃。
B收到发现是传给⾃⼰的,⽽将其传递给上层。
集线器⽬前不怎么流⾏。
因为会产⽣不必要的⽹络流量。
如C、D都会收到数据包并丢弃。
交换机:交换机可以将数据包发送到指定的计算机。
⽐如这⾥的A计算机发给B计算机的数据包,并不会发送到C、D计算机上。
因为,交换机维护⼀张CAM(内容寻址寄存器),存放着每个设备的MAC地址。
从⽽⼤⼤降低⽹络流量。
路由器:路由器⼯作在第三层,负责在⽹络间转发数据包。
路由器在⽹络间引导数据包流向叫做路由。
通过路由表实现。
4,⼴播:⼴播数据包会被发送到⼀个⽹段的所有端⼝,⽽⽆论这个端⼝是连接在集线器还是交换机上。
⼴播域,任意计算机可以不通过路由器即可进⾏直接传输的⽹段范围。
5,多播:将单⼀来源数据包同时传输给多个⽬标的通信⽅式。
D类IP地址都是多播地址。
Wireshark抓包分析TCP.IP.UDP.ICMP报文格式(移动互联网方向)
Wireshark抓包分析TCP.IP.UDP.ICMP报⽂格式(移动互联⽹⽅向)TCP 报⽂格式分析:TCP 报⽂段的报头有 10 个必需的字段和 1 个可选字段。
报头⾄少为 20 字节。
1)源端⼝(16位):标识发送报⽂的计算机端⼝或进程。
⼀个 TCP 报⽂段必须包括源端⼝号,使⽬的主机知道应该向何处发送确认报⽂。
2)⽬的端⼝(16位):标识接收报⽂的⽬的主机的端⼝或进程。
由抓包数据可得源端⼝号为12762,⽬的端⼝号为803)序号(也叫序列号)(32位):⽤于标识每个报⽂段,使⽬的主机可确认已收到指定报⽂段中的数据。
当源主机⽤于多个报⽂段发送⼀个报⽂时,即使这些报⽂到达⽬的主机的顺序不⼀样,序列号也可以使⽬的主机按顺序排列它们。
在建⽴连接时发送的第⼀个报⽂段中,双⽅都提供⼀个初始序列号。
TCP 标准推荐使⽤以 4ms 间隔递增 1 的计数器值作为这个初始序列号的值。
使⽤计数器可以防⽌连接关闭再重新连接时出现相同的序列号。
序列号表达达到2^32 - 1后⼜从0开始,当建⽴⼀个新的连接时,SYN标志为1,系列号将由主机随机选择⼀个顺序号由图可得现序列号为25e4d8a84)确认号(32位):⽬的主机返回确认号,使源主机知道某个或⼏个报⽂段已被接收。
如果 ACK 控制位被设置为 1,则该字段有效。
确认号等于顺序接收到的最后⼀个报⽂段的序号加 1,这也是⽬的主机希望下次接收的报⽂段的序号值。
返回确认号后,计算机认为已接收到⼩于该确认号的所有数据。
由图可得现确认号为59eafa0c5)数据偏移(⾸部长度)(4位)TCP 报⽂段的数据起始处距离 TCP 报⽂段的起始处有多远,即⾸部长度。
由于 TCP 报头的长度随 TCP 选项字段内容的不同⽽变化,因此报头中包含⼀个指定报头字段的字段。
该字段以 32 ⽐特为单位,所以报头长度⼀定是 32 ⽐特的整数倍,有时需要在报头末尾补 0 。
由抓包图有偏移量在0x50中,占4bit,0x50转化为⼆进制数0101 0000 所以偏移量是 0101=5,所以TCP报⽂⾸部长度为5* 4 = 20字节。
socket和抓包工具wireshark
socket和抓包⼯具wiresharksocket和抓包⼯具wireshark最近在学习Python代码中的socket和抓包⼯具wireshark,故⼜将socket等概念⼜学习了⼀遍,温故⽽知新:Python代码如下:server:#!/usr/bin/python# -*- coding: UTF-8 -*-# ⽂件名:server.pyimport socket # 导⼊ socket 模块s = socket.socket() # 创建 socket 对象host = socket.gethostname() # 获取本地主机名port = 12345 # 设置端⼝s.bind((host, port)) # 绑定端⼝s.listen(5) # 等待客户端连接while True:c, addr = s.accept() # 建⽴客户端连接。
print 'conect_address:', addrc.send('welcome to python!')c.close() # 关闭连接client:#!/usr/bin/python# -*- coding: UTF-8 -*-# ⽂件名:client.pyimport socket # 导⼊ socket 模块s = socket.socket() # 创建 socket 对象host = socket.gethostname() # 获取本地主机名port = 12345 # 设置端⼝好s.connect((host, port))print s.recv(1024)s.close()启动server后⽤client进⾏访问,wireshark监听本地回环⽹卡,抓取tcp.port==12345的ip报⽂可以从抓取的报⽂中看到返回的内容总结:在TCP和UDP同属于传输层,共同架设在IP层(⽹络层)之上。
使用 LUA 编写 WIRESHARK 协议解析插件
使用LUA 编写WIRESHARK 协议解析插件一、平台操作系统:windows 7wireshark:1.10.3lua:5.1二、准备lua 语言基本语法,特别是关于表操作和循环wireshark 文档,包括用户使用文档和开发者文档,这些在wireshark 官方网站都能找到三、开始我们首先定义一个简单的协议,我们使用 C 语言的语法描述,1struct foo2{3char protocol_type[16]; /* request response notify */4 char service_type[16]; /* 我们定义的各种服务类型 */5 unsigned intmsg_len; /* 消息体的长度 */6char msg_content[0]; /* 消息体的内容,由于是变长的所以采用此方法定义 */7 };现在可以让我们使用lua 定义一个最基本的框架1do 2--[[ 3创建一个新的协议结构 foo_proto 4第一个参数是协议名称会体现在过滤器中 5第二个参数是协议的描述信息,无关紧要 6 --]] 7local foo_proto = Proto("foo", "Foo Protolcol") 8 9--[[10下面定义字段11 --]]12local foo_protocol_type =ProtoField.string("foo.prototype", "Protocol Type", base.NONE)13local foo_service_type = ProtoField.string("foo.servicetype", "Service Type", base.NONE)14local foo_msg_len = ProtoField.uint32("foo.msglen", "Message Length", base.DEC)15local foo_msg_content =ProtoField.string("foo.msgcontent", "Message Content", base.NONE)1617 -- 将字段添加都协议中18 foo_proto.fields = {19 foo_protocol_type,20 foo_service_type,21 foo_msg_len,22 foo_msg_content23 }24 25--[[26下面定义 foo 解析器的主函数,这个函数由 wireshark调用27第一个参数是 Tvb 类型,表示的是需要此解析器解析的数据28第二个参数是 Pinfo 类型,是协议解析树上的信息,包括 UI 上的显示29第三个参数是 TreeItem 类型,表示上一级解析树30 --]]31function foo_proto.dissector(tvb, pinfo,treeitem)3233-- 设置一些 UI 上面的信息34pinfo.cols.protocol:set("FOO")35 :set("FooProtocol")3637local offset = 038local tvb_len = tvb:len()3940-- 在上一级解析树上创建 foo 的根节点41local foo_tree = treeitem:add(foo_proto, tvb:range(offset))4243-- 下面是想该根节点上添加子节点,也就是自定义协议的各个字段44-- 注意 range 这个方法的两个参数的意义,第一个表示此时的偏移量45-- 第二个参数代表的是字段占用数据的长度46 foo_tree:add(foo_protocol_type, tvb:range(offset, 16))47offset = offset+16 48 foo_tree:add(foo_service_type,tvb:range(offset, 16))49 offset = offset+1650foo_tree:add(foo_msg_len, tvb:range(offset, 4))51 offset = offset+452 53-- 计算消息内容的长度54local foo_content_len =tvb_len-offset55 foo_tree:add(foo_msg_content, tvb:range(offset, foo_content_len))56 offset = offset+foo_content_len5758end5960-- 向 wireshark 注册协议插件被调用的条件61localtcp_port_table = DissectorTable.get("tcp.port")62tcp_port_table:add(12345, foo_proto)63end四、扩展(1)单TCP 分节多应用PDU这种情况可以在我们的协议解析函数中使用循环解决,但是应用层PDU 一般都需要有我们自定义的分割标识符,不然无法区分,这里我们使用协议尾端标记的方式,采用0xFF分割,这里我们假设我们的协议体中不会出现这个值,也就是我们的消息体长度字段的值不会出现这个值。
wireshark抓包分析
wireshark抓包分析Wireshark抓包分析是一种网络安全技术,通过对网络数据包的捕捉和分析,可以深入了解网络通信过程中所传输的数据内容和各层协议的运行情况。
本文将从Wireshark抓包的基本原理、抓包的过程、常见应用场景以及分析方法等方面进行详细介绍。
首先,我们来了解一下Wireshark抓包的基本原理。
Wireshark是一款开放源代码的网络协议分析工具,可以在不同的操作系统上运行。
它使用网络接口(如网卡)来捕捉通过该接口的数据包,并对数据包进行解析和展示。
通过Wireshark的捕包功能,我们可以观察和分析网络通信过程中发送和接收的数据包,从而深入了解网络的运行情况和数据内容。
要进行Wireshark抓包,首先需要安装Wireshark软件,并打开它的图形界面。
在Wireshark的主界面上,我们可以选择要进行抓包的接口,如以太网、无线网卡等。
选择好接口后,点击开始按钮即可开始抓包。
在抓包过程中,Wireshark会实时捕捉到通过选择的接口发送和接收的数据包,并以列表的形式展示出来。
Wireshark抓包可以应用于各种网络场景中,例如网络故障排查、网络性能优化、网络安全分析等。
在网络故障排查方面,我们可以通过抓包分析来确定网络中出现的故障原因,找出导致网络延迟、丢包或连接中断的根源。
在网络性能优化方面,我们可以通过抓包分析来评估网络的带宽使用情况,找出网络瓶颈所在,并采取相应的措施来提高网络性能。
在网络安全分析方面,我们可以通过抓包分析来检测和识别网络中的恶意流量和攻击行为,以及监测网络中的异常行为和数据泄露等情况。
对于Wireshark抓包的分析方法,首先我们可以从数据包的基本信息入手,了解到达和离开主机的数据包的源地址和目的地址。
通过IP地址和端口号的对应关系,我们可以知道数据包的发送者和接收者,以及它们之间建立的连接。
其次,我们可以进一步分析数据包的内容,了解TCP、UDP、HTTP等各个层次的协议头的具体内容和传输过程。
wireshark插件开发-Lua插件解析
wireshark插件开发-Lua插件解析wireshark⽀持C语⾔和Lua语⾔开发插件,本部分内先介绍Lua插件部分开发。
Lua语⾔相对C语⾔开发有⼀个巨⼤的优势,就是不需要编译代码,因为Lua语⾔是脚本语⾔,只需要编写相关协议解析的脚本内容,然后由wireshark加载即可(Wireshark⾃带Lua解析器),wireshark封装丰富的接⼝给Lua使⽤,实现代码1-----------------------------------------------------------------2-- wireshark分析udp sample协议插件3-- 将⾃定义协议以可读的⽅式展⽰在wireshark中4-----------------------------------------------------------------5--基于UDP协议6local udp_table = DissectorTable.get("udp.port")7local my_proto = Proto("udp-sample", "udp sample protocol", "udp sample protocol")8--协议端⼝号9local my_port = 111101011--定义协议字段内容12local versionField = ProtoField.uint16("Version", "Version", base.DEC)13local idField = ProtoField.uint32("ID", "ID", base.DEC)14local stringField = ProtoField.string("Buffer", "Buffer")1516 my_proto.fields = {versionField, idField, stringField}1718--协议分析器19function my_proto.dissector(buffer, pinfo, tree)20 pinfo.cols.protocol:set("udp-sample")2122local len = buffer:len()23local myProtoTree = tree:add(my_proto, buffer(0, len), "udp sample protocol")24local offset = 025 myProtoTree:add(versionField, buffer(offset, 2))26 offset = offset + 22728 myProtoTree:add(idField, buffer(offset, 4))29 offset = offset + 43031 myProtoTree:add(stringField, buffer(offset, 1024))32end3334--增加协议到Wireshark中35 udp_table:add(my_port, my_proto)加载修改wireshark根⽬录下⾯的init.lua⽂件。
python利用wireshark实例
python利用wireshark实例
Wireshark是一个开源的网络协议分析器,它可以实时地捕获数据包并对其进行详细的分析。
利用Python语言的scapy库可以与Wireshark结合使用,进一步方便地进行网络协议的分析。
使用Python和Wireshark,可以轻松地通过编写Python脚本来实现网络协议的抓包和分析。
首先,我们需要安装Wireshark和Python的scapy库。
接着,我们可以编写一个Python脚本来运行Wireshark,捕获特定的数据包。
下面是一个捕获TCP数据包的Python代码示例:
```python
from scapy.all import *
# 过滤条件,只捕获TCP流量
filter_condition = "tcp"
# 开始抓包
capture = sniff(filter=filter_condition, prn=lambda
x:x.summary())
# 输出捕获的数据包
print(capture)
```
在这个例子中,我们使用了scapy库中的sniff函数来启动Wireshark并捕获TCP数据包。
通过设置一个过滤条件来只捕获TCP流量,我们可以使用print函数输出捕获的数据包。
在实际使用中,我们可以根据需要修改过滤条件,捕获特定的数据包,并对其进行详细的分析。
在网络安全领域中,使用Python和
Wireshark可以帮助我们实现对网络流量的监控和分析,从而更好地保障网络安全。
iec104wireshark解析
iec104wireshark解析IEC 104是电力行业中用于远程监控和通信的标准协议,而Wireshark是一款常用的网络封包分析工具。
本文将探讨如何使用Wireshark来解析IEC 104协议。
一、介绍Wireshark是一种自由开放源代码的网络封包分析软件,适用于多个操作系统。
它能够帮助我们捕获、查看和分析网络封包,并提供了丰富的功能,如解析协议、分析流量等。
IEC 104是一种远程监控和通信协议,广泛应用于电力行业。
通过Wireshark的解析功能,我们可以深入了解IEC 104协议的交换过程和数据格式,从而帮助工程师进行网络故障排除和性能优化。
二、Wireshark的安装和配置首先,我们需要下载并安装Wireshark软件。
在安装过程中,我们可以选择所需的插件和解码器。
为了解析IEC 104协议,我们需要安装相应的解析器。
安装完成后,打开Wireshark软件并选择所需的网络接口进行数据捕获。
Wireshark将开始捕获网络封包并显示在主界面上。
三、解析IEC 104协议1. 打开捕获的网络封包文件我们可以通过点击“File”菜单中的“Open”选项来打开一个已经捕获的网络封包文件。
选择相应的文件后,Wireshark将加载该文件并显示其中的封包数据。
2. 选择IEC 104协议在Wireshark的主界面上,我们可以看到一列列的封包以及其对应的协议信息。
在这些协议中,我们需要找到IEC 104协议。
Wireshark会自动将协议进行解析,并显示相应的协议字段和数值。
我们可以点击协议名称旁边的加号,展开该协议的详细信息。
3. 解析IEC 104协议字段IEC 104协议中有许多字段,每个字段都有特定的含义和格式。
通过Wireshark,我们可以逐个解析这些字段。
例如,我们可以查看APCI(Application Protocol Control Information)字段,了解ASDU(Application Service Data Unit)类型、传输原因和发送序号等信息。
西门子S7comm协议解析——利用Wireshark对报文逐字节进行解析详细解析S7com。。。
西门⼦S7comm协议解析——利⽤Wireshark对报⽂逐字节进⾏解析详细解析S7com。
接着上⼀篇来继续。
这⼀篇把常见的功能码全部解析⼀遍吧,把UserData这⼀块放到最后⼀篇以及模拟器和抓取pacp的包。
1、0x1a 请求下载我们基本上也可以推断出来这个报⽂都会有什么内容。
要下载什么东西,要下载东西的地址,要下载的东西的属性。
⼋九不离⼗。
发包头部都是⼀样的我就不在贴图了,我们看参数部分。
Byte[0] 1a 功能码Byte[1] 00 即功能状态,包含错误是否发⽣、是否使⽤另⼀个检索块/⽂件来请求的更多数据⽹络状态Byte[2] Byte[3] 01 00没什么意义Byte[4] 到 Byte[7] 没什么意义⼀般都为0x00000000Byte[8] 09为⽂件名的长度Byte[9]到 Byte[17] 为⽂件名然后我们把Filename展开解析这⼀块。
Filename部分Byte[0] 5f ⽂件标识符Byte[1] Byte[2] 30 41 块类型Byte[3] 到Byte[7] 30 30 30 30 31 即请求的块编号Byte[8] 50 即请求⽬标的⽂件系统,有三种如下表P(Passive (copied, but not chained) module):被动⽂件系统A (Active embedded module):主动⽂件系统B (Active as well as passive module):既主既被⽂件系统种接着参数部分继续往下看Byte[18] 0d 参数第⼆部分的长度、即为接下来数据的长度Byte[19] 31即加载mem之前的未知字符Byte[20] 到 Byte[25] 即装载长度Byte[26] 到 Byte[31] 即 MC7 代码长度整个意思就是请求下载(请求的标识是 5f 、请求的块类型是 DB 块的编号是0001 、⽬标块⽂件系统是P、所以⽂件名为_0A00001P,⽤于将DB1复制到被动⽂件系统或从被动⽂件系统复制。
wireshark 源码分析
Wireshark源码剖析(2struct _epan_dissect_t {tvbuff_t *tvb;//用来保存原始数据包proto_tree *tree;//协议树结构packet_info pi;// 包括各种关于数据包和协议显示的相关信息};typedef struct _proto_node {struct _proto_node *first_child;//协议树节点的第一个子节点指针struct _proto_node *last_child; //协议树节点的最后一个子节点指针struct _proto_node *next; //协议树节点的下一个节点指针struct _proto_node *parent;//父节点指针field_info *finfo;//保存当前协议要显示的地段tree_data_t *tree_data;//协议树信息} proto_node;packet_infotypedef struct _packet_info {const char *current_proto; //当前正在解析的协议名称column_info *cinfo; //wireshark显示的信息frame_data *fd;//现在分析的原始数据指针union wtap_pseudo_header *pseudo_header;//frame类型信息GSList *data_src;address dl_src;address dl_dst;address net_src;address net_dst;address src;address dst;guint32 ethertype;guint32 ipproto;guint32 ipxptype;guint32 mpls_label;circuit_type ctype;guint32 circuit_id;const char *noreassembly_reason;gboolean fragmented;gboolean in_error_pkt;port_type ptype;guint32 srcport;guint32 destport;guint32 match_port;const char *match_string;guint16 can_desegment;guint16 saved_can_desegment;int desegment_offset;#define DESEGMENT_ONE_MORE_SEGMENT 0x0fffffff #define DESEGMENT_UNTIL_FIN 0x0ffffffeguint32 desegment_len;guint16 want_pdu_tracking;guint32 bytes_until_next_pdu;int iplen;int iphdrlen;int p2p_dir;guint16 oxid;guint16 rxid;guint8 r_ctl;guint8 sof_eof;guint16 src_idx;guint16 dst_idx;guint16 vsan;guint16 dcectxid;int dcetransporttype;guint16 dcetransportsalt;#define DECRYPT_GSSAPI_NORMAL 1#define DECRYPT_GSSAPI_DCE 2guint16 decrypt_gssapi_tvb;tvbuff_t *gssapi_wrap_tvb;tvbuff_t *gssapi_encrypted_tvb;tvbuff_t *gssapi_decrypted_tvb;gboolean gssapi_data_encrypted;guint32 ppid;guint32 ppids[MAX_NUMBER_OF_PPIDS];void *private_data;GString *layer_names;guint16 link_number;guint8 annex_a_used;guint16 profinet_type;void *profinet_conv;void *usb_conv_info;void *tcp_tree;const char *dcerpc_procedure_name;struct _sccp_msg_info_t* sccp_info;guint16 clnp_srcref;guint16 clnp_dstref;guint16 zbee_cluster_id;guint8 zbee_stack_vers; int link_dir;} packet_info;重要函数理解1、proto_tree_add_itemstatic voiddissect_foo(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree){col_set_str(pinfo->cinfo, COL_PROTOCOL, "FOO");col_clear(pinfo->cinfo,COL_INFO);if (tree) {proto_item *ti = NULL;ti = proto_tree_add_item(tree, proto_foo, tvb, 0, -1, FALSE);}}What we're doing here is adding a subtree to the dissection. This subtree will hold all the details of this protocol and so not clutter up the display when not required.We are also marking the area of data that is being consumed by this protocol. In our case it's all that has been passed to us, as we're assuming this protocol does not encapsulate another. Therefore, we add the new tree node with proto_tree_add_item(), adding it to the passed in tree, label it with the protocol, use the passed in tvb buffer as the data, and consume from 0 to the end (-1) of this data. The FALSE we'll ignore for now.2、tvb_format_text3、header_field_info对协议中的每个域都会注册一个header_field_info对象,它描述了此协议域的显示名称,filer中的使用的名称,数据类型以及显示格式等等。
实验一 利用WireShark分析HTTP和DNS
山东建筑大学计算机学院实验报告班级:______ 姓名:______ 学号:实验成绩:__________课程:______________________________ 同组者:__________ 实验日期:__________ 实验一利用WireShark分析HTTP和DNS一、实验目的及任务1、熟悉并掌握Wireshark的基本操作,了解网络协议实体间的交互以及报文交换。
2、分析HTTP协议3、分析DNS协议二、实验环境与因特网连接的计算机网络系统;主机操作系统为Windows2000或Windows XP;Wireshark等软件。
三、实验预习1、Internet协议栈分为哪几层?每一层的功能、典型协议各是什么?并给出典型协议的英文全称。
应用层运输层网络层链路层物理层应用层:网络应用程序及他们的应用层协议保存的地方HTTP SMTP FTP 运输层:在应用程序端点之间传送应用层报文TCP UDP网络层:负责将数据包的网络层分组从一台主机移动到另一台主机IP协议链路层:主要为网络层提供传输服务物理层:将帧中的一个一个比特从一个节点移动到下一个节点2、HTTP请求报文的基本格式是什么?列举四种常见的首部字段名,并解释其后“值”字段的含义。
Accept:用于高速服务器,客户机支持的数据类型Accept-Charset:用于告诉服务器,客户机采用的编码格式Accept-Encoding:用于告诉服务器,客户机支持的数据压缩格式Accept-Language:客户机的语言环境3、HTTP响应报文的基本格式是什么?列举五种常见的首部字段名,并解释其后“值”字段的含义。
4、应用“条件Get”方法的基本目的是什么?该方法所用到的典型的首部字段名是什么?当客户端要从服务器中读取文档时,使用GET方法。
GET方法要求服务器将URL定位的资源放在响应报文的数据部分,回送给客户端。
5、DNS有哪两层基本含义?DNS层次结构中包含哪三类DNS服务器?分布式数据库层次数据库根DNS服务器顶级域名服务器权威DNS服务器6、DNS报文的基本格式是什么?7、列举三种常见的DNS记录,并解释记录中每个字段的含义。
抓包工具命令行简介Wireshark
第 1 章抓包工具Wireshark命令行简介1.1. 什么是WiresharkWireshark 是网络包分析工具。
网络包分析工具的主要作用是尝试捕获网络包,并尝试显示包的尽可能详细的情况。
你可以把网络包分析工具当成是一种用来测量有什么东西从网线上进出的测量工具,就好像使电工用来测量进入电信的电量的电度表一样。
(当然比那个更高级)过去的此类工具要么是过于昂贵,要么是属于某人私有,或者是二者兼顾。
Wireshark出现以后,这种现状得以改变。
Wireshark可能算得上是今天能使用的最好的开元网络分析软件。
1.1.1. 主要应用下面是Wireshark一些应用的举例:∙网络管理员用来解决网络问题∙网络安全工程师用来检测安全隐患∙开发人员用来测试协议执行情况∙用来学习网络协议除了上面提到的,Wireshark还可以用在其它许多场合。
1.1.2. 特性∙支持UNIX和Windows平台∙在接口实时捕捉包∙能详细显示包的详细协议信息∙可以打开/保存捕捉的包∙可以导入导出其他捕捉程序支持的包数据格式∙可以通过多种方式过滤包∙多种方式查找包∙通过过滤以多种色彩显示包∙创建多种统计分析∙…还有许多不管怎么说,要想真正了解它的强大,您还得使用它才行图 1.1. Wireshark捕捉包并允许您检视其内1.1.3. 捕捉多种网络接口Wireshark 可以捕捉多种网络接口类型的包,哪怕是无线局域网接口。
想了解支持的所有网络接口类型,可以在我们的网站上找到/CaptureSetup/NetworkMedia.1.1.4. 支持多种其它程序捕捉的文件Wireshark可以打开多种网络分析软件捕捉的包,详见???1.1.5. 支持多格式输出Wieshark可以将捕捉文件输出为多种其他捕捉软件支持的格式,详见???1.1.6. 对多种协议解码提供支持可以支持许多协议的解码(在Wireshark中可能被称为解剖)???1.1.7. 开源软件Wireshark是开源软件项目,用GPL协议发行。
实验1wireshark协议分析-http协议
实验1W i r e s h a r k协议分析-H T T P协议(总12页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--实验二利用Wireshark分析协议HTTP一、实验目的分析HTTP协议二、实验环境与因特网连接的计算机,操作系统为Windows,安装有Wireshark、IE等软件。
三、实验步骤1、利用Wireshark俘获HTTP分组(1)在进行跟踪之前,我们首先清空Web 浏览器的高速缓存来确保Web网页是从网络中获取的,而不是从高速缓冲中取得的。
打开浏览器,找到Internet选项,点击后出现如图1所示的界面。
以IE浏览器为例,步骤为:点击浏览器右上角的“工具”-“Internet选项”。
图1 Internet选项之后,还要在客户端清空DNS高速缓存,以确保Web服务器域名到IP地址的映射是从网络中请求的。
在Windows系列的机器上,可在命令提示行输入ipconfig/flushdns完成操作(如图2所示);具体步骤及Linux、MAC等系统的清空方法请参见:。
图2 命令提示行输入ipconfig/flushdns完成操作(2)启动Wireshark 分组俘获器。
(3)在Web 浏览器中输入: (重庆大学网站)。
(4)停止分组俘获。
图3 利用Wireshark俘获的HTTP分组在URL 中,是一个具体的web 服务器的主机名。
最前面有两个DNS分组。
第一个分组是将主机名转换成为对应的IP 地址的请求,第二个分组包含了转换的结果。
这个转换是必要的,因为网络层协议——IP协议,是通过点分十进制来表示因特网主机的,而不是通过这样的主机名。
当输入URL 时,将要求Web服务器从主机上请求数据,但首先Web浏览器必须确定这个主机的IP地址。
小提示--域名和主机关系举例:域名下,有主机server1和server2,其主机全名就是和。
随着转换的完成,Web浏览器与Web服务器建立一个TCP连接。
Wireshark抓包常见问题解析(转)
Wireshark抓包常见问题解析(转)1. tcp out-of-order(tcp有问题)解答:1)、应该有很多原因。
但是多半是⽹络拥塞,导致顺序包抵达时间不同,延时太长,或者包丢失,需要重新组合数据单元因为他们可能是通过不同的路径到达你电脑上⾯的。
2)、 CRM IT 同仁上礼拜来跟我反应⼀个问题,由他们客服系统藉由邮件主机要寄送给客户的信件,常常会有寄送失败的问题,查看了⼀下 Log,发现正常的信件在主机接收 DATA 完成后会记录收到的邮件⼤⼩,然后开始进⾏后续寄送出去的处理,但这些有问题的寄送,都会发⽣ DATA 没有传送完,Server 就记录已读取到 EOF,然后结束连线,也因此这封信就不算顺利的送到 Server 上来。
初步看了⼀下排除是 Timeout 问题,因为连线断的时间都还未达设定的连线 Timeout 时间,由于 CRM 系统是外⾯⼚商写的,为了厘清问题我只好抓封包来看是不是⽤户端送出来结束传送的指令的。
抓了⼀下结果如下:整封邮件的传送过程,包含了⼤量的 TCP Retransmission 或是 Segment Lost,到后来还有跑出 TCP Out-Of-Order,看起来是⽹路的问题,⽹路上对于 TCP Out-Of-Order 的建议是说,有些 Packet 可能 Lost,所以重新传送造成,另⼀个可能是因为 Client 到 Server 间有两条⽹路路径,像是 Load Balance 之类的架构,因此若两个封包⾛不同路径,晚送的封包却⽐早送的到达,就会发⽣ Out-Of-Order。
因此在断定有可能是⽹路造成,加上 CRM 系统上的⽹卡同事是把两张做成⼀张 Virtual,再请他拿掉 Bonding 只⽤单⼀张跑以后,问题就不存在了,观察流量还跑的⽐原本两张合起来的 Virtual 单张跑的⾼,所以 M$ 在 Bonding ⽹卡上是不是还有什么需要调整的就不得⽽之了,⾄少找出造成⼤量寄送失败的原因就好。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Wireshark学习笔记1.简介2.Wireshark功能模块下图给出了wireshark功能模块:a)GTK1/2处理用户的输入输出显示,源码在gtk目录.b)Core核心模块,通过函数调用将其他模块连接在一起,源码在根目录c)Epanwireshark Packetage Analyzing,包分析引擎,源码在epan目录●Protocol-Tree:保存数据包的协议信息,wireshark的协议结构采用树形结构,解析协议报文时只需要从根节点通过函数句柄依次调用各层解析函数即可。
●Dissectors:在epan/dissector目录下,各种协议解码器,支持700+种协议解析,对于每种协议,解码器都能识别出协议字段(field),并显示出字段值(field value)由于网络协议种类很多,为了使协议和协议间层次关系明显,对数据流里的各个层次的协议能够逐层处理,wireshark系统采用了协议树的方式。
●Plugins:一些协议解码器以插件形式实现,源码在plugins目录●Display-Filters:显示过滤引擎,源码在epan/dfilter目录d)Capture捕包引擎,利用libpcap/WinPcap从底层抓取网络数据包,libpcap/WinPcap提供了通用的抓包接口,能从不同类型的网络接口(包括以太网,令牌环网,ATM网等)获取数据包。
e)Wiretap从文件中读取数据包,支持多种文件格式,源码在wiretap目录f)Win-/libpcapWireshark抓包时依赖的库文件wireshark功能模块3.wireshark流程分析1)初始化Wireshark的初始化包括一些全局变量的初始化、协议分析引擎的初始化和Gtk相关初始化,显示Ethereal主窗口,等待用户进一步操作。
重点就是Epan模块的初始化。
Epan初始化:⏹tvbuff初始化:全局变量tvbuff_mem_chunk指向用memchunk分配的固定大小的空闲内存块,每个内存块是tvbuff_t结构,从空闲内存块中取出后,用来保存原始数据包。
⏹协议初始化:◆全局变量:●proto_names●proto_short_names●proto_filter_names以上三个全局变量主要用来判断新注册的协议名是否重复,如果重复,给出提示信息,在协议解析过程中并没有使用。
◆协议注册:●注册协议:将三个参数分别注册给proto_names、proto_short_names、proto_filter_names三个全局变量中,●注册字段,需要在wireshark协议树显示的报文内容字段。
●协议解析表◆Handoff注册●将协议与父协议节点关联起来⏹Packet(包)初始化◆全局变量:●frame_handle:协议解析从frame开始,层层解析,直到所有的协议都解析完为止。
frame_handle保存了frame协议的handle。
●data_handle:有的协议无法从frame开始,那么就从data开始。
原理同frame。
⏹读配置文件preference⏹读capture filter和display filter文件,分别保存在全局变量capture_filter和display_filter中。
⏹读disabled protocols文件,保存全局变量global_disabled_protos和disabled_protos中⏹初始化全局变量cfile◆Cfile是个重要的变量,数据类型为capture file,它保存了数据包的所有信息,⏹取得命令行启动时,参数列表,并进行相应的处理2)处理流程Wireshark初始化完成以后进入实际处理阶段,主程序创建抓包进程,捕包进程和主程序是通过PIPE进行传递数据的,主程序把抓取的数据写入临时文件,通过函数add_packet_to_packet_list将数据包加入包列表。
处理时,主程序从列表中选取一个数据包,提取该数据包中的数据填写在数据结构中,最后调用协议解析函数epan_dissect_run进行处理,从epan_dissect_run开始,是实际的协议解析过程,下面以HTTP协议报文为例,流程如下:a)解析frame层调用函数dissect_frame对frame层进行解析,并在协议树上填充相应字段信息。
函数最后会判断是否有上层协议封装,如果有则调用函数dissector_try_port在协议树上查找对应的解析函数,这里函数dissector_try_port根据pinfo->fd->lnk_t查找对应的上层协议处理函数,pinfo->fd->lnk_t值为1,上层封装协议为以太网协议,全局结构体指针变量dissector_handle 当前的协议解析引擎句柄置为dissect_eth_maybefcs,至此,frame层解析结束。
b)解析以太网层函数call_dissector_work根据dissector_handle调用frame上层协议解析函数dissect_eth_maybefcs对以太网层进行解析,并在协议树上填充相应字段,包括目的MAC地址和以太网上层协议类型等信息。
函数最后会判断是否有上层协议封装,如果有则调用函数dissector_try_port在协议树上查找对应的解析函数,这里函数dissector_try_port根据etype 查找对应的上层协议处理函数,以太网字段etype为0800的报文是ip报文,上层封装协议为IP协议,全局结构体指针变量dissector_handle当前的协议解析引擎句柄置为dissect_ip,至此,以太网层解析结束。
c)解析IP层函数call_dissector_work根据dissector_handle调用以太网上层协议解析函数dissect_ip对以太网层进行解析,并在协议树上填充相应字段,包括版本号,源地址,目的地址等信息。
函数最后会判断是否有上层协议封装,如果有则调用函数dissector_try_port在协议树上查找对应的解析函数,这里函数dissector_try_port根据nxt (nxt = iph->ip_p)查找对应的上层协议处理函数,以太网字段nxt为06的报文是TCP报文,上层封装协议为TCP协议,全局结构体指针变量dissector_handle当前的协议解析引擎句柄置为dissect_tcp,至此,IP层解析结束。
d)解析TCP层函数call_dissector_work根据dissector_handle调用以太网上层协议解析函数dissect_tcp对TCP层进行解析,包括对TCP头的解析和选项字段的解析,并在协议树上填充相应字段,包括源端口,目的端口,标志位等信息。
函数最后会判断是否有上层协议封装,如果有则调用函数dissector_try_port在协议树上查找对应的解析函数,这里函数dissector_try_port根据port查找对应的上层协议处理函数,将源端口和目的端口分别赋值给low_port和high_port,根据low_port和high_port分别匹配上层协议解析函数,port为80的报文是HTTP报文,上层封装协议为HTTP协议,全局结构体指针变量dissector_handle当前的协议解析引擎句柄置为dissect_http,至此,TCP层解析结束。
e)解析HTTP层至此wireshark进入应用层协议检测阶段,wireshark解析dissect_http函数中注册的字段,并提取相应的字段值添加到协议树中,应用层的具体解析流程将在下面介绍。
HTTP协议具体函数调用过程参见:重要的数据结构struct _epan_dissect_t {tvbuff_t *tvb;//用来保存原始数据包proto_tree *tree;//协议树结构packet_info pi;//包括各种关于数据包和协议显示的相关信息};/** Each proto_tree, proto_item is one of these. */typedef struct _proto_node {struct _proto_node *first_child;//协议树节点的第一个子节点指针struct _proto_node *last_child; //协议树节点的最后一个子节点指针struct _proto_node *next; //协议树节点的下一个节点指针struct _proto_node *parent;//父节点指针field_info *finfo;//保存当前协议要显示的地段tree_data_t *tree_data;//协议树信息} proto_node;typedef struct _packet_info {const char *current_proto; //当前正在解析的协议名称column_info *cinfo; //wireshark显示的信息frame_data *fd;//现在分析的原始数据指针union wtap_pseudo_header *pseudo_header;//frame类型信息GSList *data_src; /*frame层信息*/address dl_src; /* 源MAC */address dl_dst; /*目的MAC */address net_src; /* 源IP */address net_dst; /*目的IP */address src; /*源IP */address dst; /*目的IP */guint32 ethertype; /*以太网类型字段*/guint32 ipproto; /* IP协议类型*/guint32 ipxptype; /* IPX 包类型*/guint32 mpls_label; /* MPLS包标签*/circuit_type ctype;guint32 circuit_id; /*环路ID */const char *noreassembly_reason; /* 重组失败原因*/gboolean fragmented; /*为真表示未分片*/gboolean in_error_pkt; /*错误包标志*/port_type ptype; /*端口类型*/guint32 srcport; /*源端口*/guint32 destport; /*目的端口*/guint32 match_port; /*进行解析函数匹配时的匹配端口*/ const char *match_string; /*调用子解析引擎时匹配的协议字段指针*/ guint16 can_desegment; /* 能否分段标志*/guint16 saved_can_desegment;int desegment_offset; /*分段大小*/#define DESEGMENT_ONE_MORE_SEGMENT 0x0fffffff#define DESEGMENT_UNTIL_FIN 0x0ffffffeguint32 desegment_len;guint16 want_pdu_tracking;guint32 bytes_until_next_pdu;int iplen; /*IP包总长*/int iphdrlen; /*IP头长度*/int p2p_dir;guint16 oxid; /* next 2 fields reqd to identify fibre */guint16 rxid; /* channel conversations */guint8 r_ctl; /* R_CTL field in Fibre Channel Protocol */guint8 sof_eof;guint16 src_idx; /* Source port index (Cisco MDS-specific) */guint16 dst_idx; /* Dest port index (Cisco MDS-specific) */guint16 vsan; /* Fibre channel/Cisco MDS-specific *//* Extra data for DCERPC handling and tracking of context ids */guint16 dcectxid; /* Context ID (DCERPC-specific) */int dcetransporttype;guint16 dcetransportsalt; /* fid: if transporttype==DCE_CN_TRANSPORT_SMBPIPE */#define DECRYPT_GSSAPI_NORMAL 1#define DECRYPT_GSSAPI_DCE 2guint16 decrypt_gssapi_tvb;tvbuff_t *gssapi_wrap_tvb;tvbuff_t *gssapi_encrypted_tvb;tvbuff_t *gssapi_decrypted_tvb;gboolean gssapi_data_encrypted;guint32 ppid; /* SCTP PPI of current DATA chunk */guint32 ppids[MAX_NUMBER_OF_PPIDS]; /* The first NUMBER_OF_PPIDS PPIDS which are present * in the SCTP packet*/void *private_data; /* pointer to data passed from one dissector to another *//* TODO: Use emem_strbuf_t instead */GString *layer_names; /* layers of each protocol */guint16 link_number;guint8 annex_a_used;guint16 profinet_type; /* the type of PROFINET packet (0: not a PROFINET packet) */void *profinet_conv; /* the PROFINET conversation data (NULL: not a PROFINET packet) */ void *usb_conv_info;void *tcp_tree; /* proto_tree for the tcp layer */const char *dcerpc_procedure_name; /* Used by PIDL to store the name of the current dcerpc procedure */struct _sccp_msg_info_t* sccp_info;guint16 clnp_srcref; /* clnp/cotp source reference (can't use srcport, this would confuse tpkt) */guint16 clnp_dstref; /* clnp/cotp destination reference (can't use dstport, this would confuse tpkt) */guint16 zbee_cluster_id; /* ZigBee cluster ID, an application-specific message identifier that* happens to be included in the transport (APS) layer header.*/guint8 zbee_stack_vers; int link_dir;/* 3GPP messages are sometime different UP link(UL)。