路由器和交换机的重要功能就是根据ip包的目的物理地址把包只转发到对应的端口。交换机或路由器工作在OSI的第二层,在正常工作的情况下,所有主机只能收到其他主机发给它的包和广播包。但是有时候,我们却需要监听发给其他主机的包。比如说不同厂家声称实现了Ethernet/IP的scaner 和adaliptor 之间怎么也不能建立通信时,或者通信不稳定时,我们就需要抓取并分析这两个设备之间的流量,以找到连接失败的原因。

集线器工作在OSI的第一层,使用集线器连接主机时,所有主机都能收到其他主机发的包,但是只会对是发给自己的包和广播包产生响应。使用集线器来连接各个设备是最简单的办法,只需要在wireshark 中开启混杂模式就可以抓取到其他主机间的流量。wireshark 默认就工作在混杂模式。但是,现在很难找到真正工作在第一层的集线器。按理说集线器比交换机更简单,造价也应该更便宜。可是因为绝大多数可以使用集线器的地方都可以用交换机替代,只能用集线器而不能用交换机的地方比较少,所以很少有厂家现在还在生产和销售集线器。当然有需求就会有供给,高端的管理型交换机支持端口镜像。端口镜像就是把一个端口的流量全部复制到另外一个端口。有端口镜像的支持,抓取其他主机的流量就和使用集线器的情况一样简单了。

如果我们只有普通的非管理型交换机或者家用路由器,那我们要怎样才能抓取到其他主机之间的流量呢?这虽然比较让人头疼了,但是办法总比困难多。我们可以对交换机发起mac 泛洪攻击,填满交换机的地址转发表,让其退化到集线器模式。交换机内部有一张地址转发表,可以简单地认为该表有N行两列,每行记录一个物理地址和端口号。当交换机收到一个数据包时,用数据包的目标物理地址查找地址转发表,找出对应行的端口号,然后把数据包转发到那个端口。当交换机在地址转发表中找不到数据包的物理地址时,就只能把数据包转发到所有的端口上。 一般交换机的地址转发表的容量为10K左右(1万行)。 mac 泛洪攻击就是向交换机发送大量的具有不同物理地址的ICMP包,填满交换机的地址转发表。有现成的工具macof 可以用来发起mac泛洪攻击。

mac 泛洪攻击毕竟是非正常手段,也不能保证能抓取到其他主机间的全部流量。如果有软路由或者可以给路由器刷入openwrt 固件,我们的办法就多了。即可以方便地实现高端交换机才有的端口镜像特性,也可以用tcpdump 和wireshark 实现远程抓包。我尝试过用双网卡电脑建立一个网桥来抓取流量,但是在win10 系统里,wireshark 不能抓取网桥上的流量。Linux 系统下,不能建立有线网和无线网的网桥。

综合来看,最佳方式还是用支持openwrt的路由器比较好,价格便宜又完全满足我们的需求。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据