获取VLAN报文
问题描述:
用sniffer/Ethereal(WireShark)/EtherPeek等软件,在接入层设备的以太网口镜像抓包是分析问题的基本方法之一,然而很多维护人员在实际操作时发现,自己的台式机或笔记本抓到的数据报看不到VLAN标记。难以区分数据流是从哪个vlan过来的。给问题分析造成不便。
问题分析:
VLAN
tag是在802.1Q中定义的标签,支持VLAN的设备(例如以太网交换机)可以在数据包的报文头部分,目的mac和源mac之后,插入2个字节的报文类型标识TPID(通常为81
00)、和两个字节的VLAN号(包含优先级标示),用于实现区分数据流、分割广播域、标示报文优先级等功能。
近几年的笔记本电脑,尤其是带千兆以太网卡的电脑,所采用的千兆网卡不仅10/100/1000M自适应、直联/交叉自适应,而且网卡驱动会自动识别并剔除数据包中的vlan标记。功能是很强大的,但却给我们二层网络抓包的数据分析造成了不便之处。
解决方法:
1.修改网卡的注册表
2.设置允许PC抓取的vlan
注意事项:
此外,我在这里强调一下,vlan数据包有802.1Q封装的,还有ISL(思科私有)封装的。我们在此能抓的都指的是802.1Q封装的vlan数据包。
一、在PC上设置允许抓取的vlan
先介绍PC设置允许接入的vlan方法,但网卡的注册表没有改特定的参数值的话,还是无法抓取vlan的tag的。
由于不同网卡有不同的注册表修改方法,比较棘手,最后介绍,所以先介绍简单的:
steps:
1.首先,选择需要修改的网卡(以Intel网卡为例,其他的类似),右击进入“属性”
2.在网卡的属性中的“常规”栏下,选择“配置”
3.然后选择“VLAN”那一栏
4.在“VLAN”栏下选择“新建”
5.在弹出的“新VLAN”中,选择你需要虚拟的VLAN网卡,以便抓取该VLAN。
6.“新VLAN”中可以新建“未标记的VLAN”,就是抓取取出tag的报文,跟普通网卡一样
7.在新建过程中,电脑处理会比较慢,因为在虚拟此特定VLAN的网卡。如弹出这个对话框,点”仍然继续“
8.这就是电脑虚拟出来的专门的VLAN网卡,最多可以建64个(不同网卡可能不同)
9.在上图中,建立了一大堆VLAN虚拟网卡,很乱!所以,不用的VLAN虚拟网卡就请删掉:
右击主网卡的“属性”——“配置”——“VLAN”——选择vlan点击删除
二、修改网卡的注册表项
不同网卡需要修改不同的注册表项,先以Intel网卡为例:在windows系统下,通过修改注册表的方式,就可以让驱动保留 tag 。具体如下:
Intel PRO/1000或PRO/100网卡
对于Intel PRO/1000或PRO/100网卡, 需要将注册表
HKEY_LOCAL_MACHINE\
SYSTEM\
ControlSet001\
Control\
Class\
{4D36E972-E325-11CE-BFC1-08002BE10318}\
00xx下的MonitorModeEnabled 改为1,
如果不存在则新建这么一个d word键。(上述ControlSet001也可能是或者后接002~00x等其他数值)
具体步骤:
1.打开“运行”,输入regedit,进入注册表
2.找到注册表中的 HKEY_LOCAL_MACHINE
3.在注册表 HKEY_LOCAL_MACHINE下找到SYSTEM
4.在注册表
HKEY_LOCAL_MACHINE——SYSTEM下找到ControlSet001(可能还有ControlSet002、0ControlSet03、ControlSet004、ControlSet005……有多个的话,接下的步骤就要回到此重复即可)
5.在ControlSet001下找到Control(ControlSet002、ControlSet003……也如此)
6.在Control下找到Class
7.在Class下搜索 {4D36E972-E325-11CE-BFC1-08002BE10318}
8.在{4D36E972-E325-11CE-BFC1-08002BE10318}下的0000等目录下找到要修改的以太网卡
9.在该以太网卡下新建字符串值:
10.添加 MonitorModeEnabled 值为 1
11.在{4D36E972-E325-11CE-BFC1-08002BE10318}下的0000——0022寻找需要抓vlan的网卡,重复新建字符串值
MonitorModeEnabled = 1
12.在ControlSet002、ControlSet003……下重复此步骤
对于千兆网卡,需要在注册表里增加一项=1,类型为string(字符串值)。位置与相同,后者可以在
{4D36E972-E325-11CE-BFC1-08002bE10318}\0009下。
修改后需要重启机器让它生效。然后抓包就可以看到802.1Q VLAN标记了。该方法在 User
Manual中可以搜到,较新的网卡驱动里都支持这个设置。
注:这样修改的一个后遗症就是,原来这些网卡接某些交换机的tag口是直接能通的(前提是端口 =
相应),这样改了以后,tag标记底层不过滤,交给上层软件处理,windows本身不会去识别,于是就不通了。
====================其他====================
Broadcom netXtreme 57XX Gigabite网卡
针对Broadcom netXtreme 57XX Gigabite网卡(dell
PC机上大多配置此种网卡,支持802.1q),通过设置可以抓取到报文的vlan tag。
启用网卡802.1q功能
右键点击网卡选择属性,选择配置-高级-802.1q,选enable,确定;
修改注册表
打开注册表,在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet中查找在TxCoalescingTicks字符串,在相同目录下创建PreserveVlanInfoInRxPacket字符串,值设置为1;
修改完成后重启电脑;
用sniffer/Ethereal(WireShark)/EtherPeek等软件,在接入层设备的以太网口镜像抓包是分析问题的基本方法之一,然而很多维护人员在实际操作时发现,自己的台式机或笔记本抓到的数据报看不到VLAN标记。难以区分数据流是从哪个vlan过来的。给问题分析造成不便。
问题分析:
VLAN
tag是在802.1Q中定义的标签,支持VLAN的设备(例如以太网交换机)可以在数据包的报文头部分,目的mac和源mac之后,插入2个字节的报文类型标识TPID(通常为81
00)、和两个字节的VLAN号(包含优先级标示),用于实现区分数据流、分割广播域、标示报文优先级等功能。
近几年的笔记本电脑,尤其是带千兆以太网卡的电脑,所采用的千兆网卡不仅10/100/1000M自适应、直联/交叉自适应,而且网卡驱动会自动识别并剔除数据包中的vlan标记。功能是很强大的,但却给我们二层网络抓包的数据分析造成了不便之处。
解决方法:
1.修改网卡的注册表
2.设置允许PC抓取的vlan
注意事项:
此外,我在这里强调一下,vlan数据包有802.1Q封装的,还有ISL(思科私有)封装的。我们在此能抓的都指的是802.1Q封装的vlan数据包。
一、在PC上设置允许抓取的vlan
先介绍PC设置允许接入的vlan方法,但网卡的注册表没有改特定的参数值的话,还是无法抓取vlan的tag的。
由于不同网卡有不同的注册表修改方法,比较棘手,最后介绍,所以先介绍简单的:
steps:
1.首先,选择需要修改的网卡(以Intel网卡为例,其他的类似),右击进入“属性”
2.在网卡的属性中的“常规”栏下,选择“配置”
3.然后选择“VLAN”那一栏
4.在“VLAN”栏下选择“新建”
5.在弹出的“新VLAN”中,选择你需要虚拟的VLAN网卡,以便抓取该VLAN。
6.“新VLAN”中可以新建“未标记的VLAN”,就是抓取取出tag的报文,跟普通网卡一样
7.在新建过程中,电脑处理会比较慢,因为在虚拟此特定VLAN的网卡。如弹出这个对话框,点”仍然继续“
8.这就是电脑虚拟出来的专门的VLAN网卡,最多可以建64个(不同网卡可能不同)
9.在上图中,建立了一大堆VLAN虚拟网卡,很乱!所以,不用的VLAN虚拟网卡就请删掉:
右击主网卡的“属性”——“配置”——“VLAN”——选择vlan点击删除
二、修改网卡的注册表项
不同网卡需要修改不同的注册表项,先以Intel网卡为例:在windows系统下,通过修改注册表的方式,就可以让驱动保留 tag 。具体如下:
Intel PRO/1000或PRO/100网卡
对于Intel PRO/1000或PRO/100网卡, 需要将注册表
HKEY_LOCAL_MACHINE\
SYSTEM\
ControlSet001\
Control\
Class\
{4D36E972-E325-11CE-BFC1-08002BE10318}\
00xx下的MonitorModeEnabled 改为1,
如果不存在则新建这么一个d word键。(上述ControlSet001也可能是或者后接002~00x等其他数值)
具体步骤:
1.打开“运行”,输入regedit,进入注册表
2.找到注册表中的 HKEY_LOCAL_MACHINE
3.在注册表 HKEY_LOCAL_MACHINE下找到SYSTEM
4.在注册表
HKEY_LOCAL_MACHINE——SYSTEM下找到ControlSet001(可能还有ControlSet002、0ControlSet03、ControlSet004、ControlSet005……有多个的话,接下的步骤就要回到此重复即可)
5.在ControlSet001下找到Control(ControlSet002、ControlSet003……也如此)
6.在Control下找到Class
7.在Class下搜索 {4D36E972-E325-11CE-BFC1-08002BE10318}
8.在{4D36E972-E325-11CE-BFC1-08002BE10318}下的0000等目录下找到要修改的以太网卡
9.在该以太网卡下新建字符串值:
10.添加 MonitorModeEnabled 值为 1
11.在{4D36E972-E325-11CE-BFC1-08002BE10318}下的0000——0022寻找需要抓vlan的网卡,重复新建字符串值
MonitorModeEnabled = 1
12.在ControlSet002、ControlSet003……下重复此步骤
于千兆网卡
对于千兆网卡,需要在注册表里增加一项=1,类型为string(字符串值)。位置与相同,后者可以在
HKEY_LOCAL_MACHINE\SYSTEM\下搜索到,各个电脑不同,例如我的电脑就是在
HKEY_LOCAL_MACHINE\SYSTEM\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\0009下。
修改后需要重启机器让它生效。然后抓包就可以看到802.1Q VLAN标记了。该方法在 User
Manual中可以搜到,较新的网卡驱动里都支持这个设置。
注:这样修改的一个后遗症就是,原来这些网卡接某些交换机的tag口是直接能通的(前提是端口 =
相应),这样改了以后,tag标记底层不过滤,交给上层软件处理,windows本身不会去识别,于是就不通了。
====================其他====================
Broadcom netXtreme 57XX Gigabite网卡
针对Broadcom netXtreme 57XX Gigabite网卡(dell
PC机上大多配置此种网卡,支持802.1q),通过设置可以抓取到报文的vlan tag。
启用网卡802.1q功能
右键点击网卡选择属性,选择配置-高级-802.1q,选enable,确定;
修改注册表
打开注册表,在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet中查找在TxCoalescingTicks字符串,在相同目录下创建PreserveVlanInfoInRxPacket字符串,值设置为1;
修改完成后重启电脑;
用wireshark抓取数据包,可以看到报文中显示VLAN TAG;
From:https://www.douban.com/note/254431793/