WireShark 分析鼠标键盘包
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WireShark 分析鼠标键盘包相关的知识,希望对你有一定的参考价值。
参考技术A 使用wireshark自带的tshark命令行工具,可以将 leftover capture data单独提取出来,具体命令为:tshark.exe -r usb1.pcap -T fields -e usb.capdata > usbdata.txt
然后我们需要编写脚本从得出的userdata.txt文件中过滤出键盘击键相关的流量,并根据上述映射表,将键盘按键按照对应关系输出出来,这里附上简要的脚本:
mappings = 0x04:"A", 0x05:"B", 0x06:"C", 0x07:"D", 0x08:"E", 0x09:"F", 0x0A:"G", 0x0B:"H", 0x0C:"I", 0x0D:"J", 0x0E:"K", 0x0F:"L", 0x10:"M", 0x11:"N",0x12:"O", 0x13:"P", 0x14:"Q", 0x15:"R", 0x16:"S", 0x17:"T", 0x18:"U",0x19:"V", 0x1A:"W", 0x1B:"X", 0x1C:"Y", 0x1D:"Z", 0x1E:"1", 0x1F:"2", 0x20:"3", 0x21:"4", 0x22:"5", 0x23:"6", 0x24:"7", 0x25:"8", 0x26:"9", 0x27:"0", 0x28:"\n", 0x2a:"[DEL]", 0X2B:" ", 0x2C:" ", 0x2D:"-", 0x2E:"=", 0x2F:"[", 0x30:"]", 0x31:"\", 0x32:"~", 0x33:";", 0x34:"'", 0x36:",", 0x37:"."
nums = []
keys = open('usbdata.txt')
for line in keys:
if line[0]!='0' or line[1]!='0' or line[3]!='0' or line[4]!='0' or line[9]!='0' or line[10]!='0' or line[12]!='0' or line[13]!='0' or line[15]!='0' or line[16]!='0' or line[18]!='0' or line[19]!='0' or line[21]!='0' or line[22]!='0':
continue
nums.append(int(line[6:8],16))
keys.close()
output = ""
for n in nums:
if n == 0 :
continue
if n in mappings:
output += mappings[n]
else:
output += '[unknown]'
print 'output :\n' + output
首先同样使用tshark 命令将cap data提取出来:
tshark.exe -r usb2.pcap -T fields -e usb.capdata > usbdata.txt
每一个数据包的数据区有四个字节,第一个字节代表按键,当取0x00时,代表没有按键、为0x01时,代表按左键,为0x02时,代表当前按键为右键。第二个字节可以看成是一个signed byte类型,其最高位为符号位,当这个值为正时,代表鼠标水平右移多少像素,为负时,代表水平左移多少像素。第三个字节与第二字节类似,代表垂直上下移动的偏移。
了解协议相关约定之后,可编写脚本将数据包的内容变成一系列点的集合,为了区分左右按键,可以特意对第一个字节的内容作一下判断。相关脚本如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
nums = []
keys = open('data.txt','r')
posx = 0
posy = 0
for line in keys:
if len(line) != 12 :
continue
x = int(line[3:5],16)
y = int(line[6:8],16)
if x > 127 :
x -= 256
if y > 127 :
y -= 256
posx += x
posy += y
btn_flag = int(line[0:2],16) # 1 for left , 2 for right , 0 for nothing
if btn_flag == 1 :
print posx , posy
keys.close()
本题的flag藏在右键信息中,当btn_flag 取2时,运行脚本可以得到一系列坐标点:
[图片上传中。。。(2)]
得到这些点之后,需要将他们画出来,因而需要辅以gnuplot 或者其他的绘图工具,gnuplot的命令为"plot inputfile",运行如下:
[图片上传中。。。(3)]
最后得到本题的flag: XNUCAUSBPCAPGETEVERYTHING
[图片上传中。。。(4)]
wireshark怎么抓包分析网络故障实战
【WireShark概览】1、Wireshark 是网络报文分析工具。网络报文分析工具的主要作用是尝试捕获网络报文, 并尝试显示报文尽可能详细的内容。过去的此类工具要么太贵,要么是非公开的。 直到Wireshark(Ethereal)出现以后,这种情况才得以改变。Wireshark可以算得上是今天能使用的最好的开源网络分析软件。2、WireShark简史:1997年,Gerald Combs 需要一个工具追踪网络问题,并且想学习网络知识。所以他开始开发Ethereal (Wireshark项目以前的名称) 以解决自己的需求。1998年,Ethreal0.2.0版诞生了。此后不久,越来越多的人发现了它的潜力,并为其提供了底层分析。2006年Ethreal改名为Wireshark。2008年,在经过了十年的发展后,Wireshark发布了1.0版本。3、WireShark的主要作用,就是可以抓取各种端口的报文,包括有线网口、无线网口、USB口、LoopBack口等等,从而就可以很方便地进行协议学习、网络分析、系统排错等后续任务。4、不同平台下的WireShark:目前WireShark支持几乎所有主流报文文件,包括pcap,cap ,pkt,enc等等。但是不同平台下的WireShark却有功能上的不同。总体来说,Linux版本WireShark的功能和特性比Windows版本的要丰富和强大。例如,Linux版本的WireShark可以直接抓取USB接口报文,而Windows版本就不行。
Figure 1,Linux下的WireShark
Figure 2,Windows下WireShark
Figure 3,各平台下的WireShark所支持的协议
各平台下的WireShark支持的协议如上图所示。从图中可以看到Linux下的版本功能最强大,由于平台本身特性,可以使WireShark几乎支持所有协议。但由于我们平时工作中主要抓取以太网报文,且绝大部分的操作系统都是Windows,所以本文还是以Windows平台下的WireShark为例来进行说明。
【如何正确使用WireShark抓取报文】
1、WireShark组网拓扑。为了抓到HostA与HostB之间的报文,下面介绍几种WireShark组网。
i.在线抓取:如果WireShark本身就是组网中的一部分,那么,很简单,直接抓取报文就行了。
ii. 串联抓取:串联组网是在报文链路中间串联一个设备,利用这个中间设备来抓取报文。这个中间设备可以是一个HUB,利用HUB会对域内报文进行广播的特性,接在HUB上的WireShark也能收到报文。
若是WireShark有双网卡,正确设置网络转发,直接串接在链路上。
也可以利用Tap分路器对来去的报文进行分路,把报文引到WireShark上。
串联组网的好处是报文都必须经过中间设备,所有包都能抓到。缺点是除非原本就已经规划好,不然要把报文链路断开,插入一个中间设备,会中断流量,所以一般用于学习研究,不适用于实际业务网以及工业现场以太网。
iii. 并联抓取:并联组网是将现有流量通过现网设备本身的特性将流量引出来。
若是网络本身通过HUB组网的,那么将WireShark连上HUB就可以。
若是交换机组网,那直接连上也能抓取广播报文。
当然,最常用的还是利用交换机的镜像功能来抓包。
并联组网的优点是不用破坏现有组网,适合有业务的在线网络以及工业现场以太网。缺点是HUB组网已经不常见,而交换机组网的设备开启镜像后,对性能有非常大的影响。
2、 WireShark的安装。WireShark是免费开源软件,在网上可以很轻松获取到。Windows版的WireShark分为32位而64位两个版本,根据系统的情况来决定安装哪一个版本,虽然64位系统装32位软件也能使用,但装相应匹配的版本,兼容性及性能都会好一些。在Windows下,WireShark的底层抓包工具是Winpcap,一般来说WireShark安装包内本身就包含了对应可用版本的Winpcap,在安装的时候注意钩选安装就可以。安装过程很简单,不再赘述。
3、使用WireShark抓取网络报文。Step1. 选择需要抓取的接口,点选Start就开始抓包。
4、使用WireShark抓取MPLS报文。对于mpls报文,wireshark可以直接抓取带MPLS标签的报文。
5、使用WireShark抓取带Vlan Tag的报文。早期网卡的驱动不会对VLAN TAG进行处理,而是直接送给上层处理,在这种环境下,WireShark可以正常抓到带VLAN TAG的报文。而Intel,broadcom,marvell的网卡则会对报文进行处理,去掉TAG后再送到上层处理,所以WireShark在这种情况下通常抓不到VLAN TAG。这时我们需要针对这些网卡做一些设置,WireShark才能够抓取带VLAN TAG的报文。1). 更新网卡的最新驱动。2). 按照以下说明修改注册表:a) Intel:HKEY_LOCAL_MACHINE\SYSTEM \ControlSet001\Control\Class\4D36E972-E325-11CE-BFC1-08002BE10318 \00xx(where xx is the instance of the network adapter that you need to see tags on. )PCI或者PCI-X网卡增加dword:MonitorModeEnabled,通常设置为1即可 0 - disabled (Do not store bad packets, Do not store CRCs, Strip 802.1Q vlan tags) 1 - enabled (Store bad packets. Store CRCs. Do not strip 802.1Q vlan tags) PCI-Express网卡增加dword:MonitorMode,通常设置为1即可 0 - disabled (Do not store bad packets, Do not store CRCs, Strip 802.1Q vlan tags) 1 - enabled (Store bad packets. Store CRCs. Do not strip 802.1Q vlan btag) 2 - enabled strip vlan (Store bad packets. Store CRCs. Strip 802.1Q vlan tag as normal);b) Broadcom:在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet下搜索,找到"TxCoalescingTicks"并确认这是唯一的,增加一个新的字符串值"PreserveVlanInfoInRxPacket",赋值1。c) Marvell Yukon 88E8055 PCI-E 千兆网卡:"HKLM\SYSTEM \CurrentControlSet\Control\Class\4D36E972-E325-11CE-BFC1-08002bE10318 \000"(where 000 is the number of the folder for the Marvel ethernet controller)增加DWORD:SkDisableVlanStrip:1;3). 以Intel网卡为例,对网卡进行配置。选择Intel网卡的本地连接,右键属性
点击“配置”按钮。
在VLAN选项卡中,加入任意一个VLAN,激活接口的VLAN TAG上送功能。此时可以把“本地连接”接口看成是一个Trunk接口。
配置完VLAN后,如果发现系统禁用了“本地连接”接口,则只要启用它,会看到网络连接中会出现一个新的子接口“本地连接2”。
在WireShark上查看抓取“本地连接”接口的报文。
可以看到已经可以抓到有VLAN TAG的报文了。
由于此时的子接口都是有VLAN属性的,所以无法当成正常的网卡来用。如果想要在抓VLAN包的同时,还能够与网络正常通信,只要再新建一个未标记的VLAN就行。
这时,会生成一个对应的子接口“本地连接3”,在这个接口上正确配置网络参数,就可以正常通信了。 参考技术A 你可以在 wireshark 软件中设置各种过滤规则,(filter)来捕获各种有用的数据包。然后保存到一个文件中,最后对那个文件中的内容进行数据包分析。本回答被提问者和网友采纳
以上是关于WireShark 分析鼠标键盘包的主要内容,如果未能解决你的问题,请参考以下文章