数据链路层包捕获
1、链路层数据包捕获机制
一个链路层包捕获机制包含三个主要部分:最底层是操作系统有关的包捕
获,最高层是针对用户的应用程序接口,中间层则是最重要的包过滤机制。
不同的操作系统实现的底层包捕获机制可能是不一样的,但从形式和实现
功能上看大同小异。数据包常规的传输路径依次为网卡、设备驱动层、数据链
路层、IP 层、传输层、最后到达应用层序。而包捕获机制是在数据链路层增加
一个旁路处理,对发送和接收到的数据包作过滤/缓冲等相关处理,最后直接传
递到应用程序。值得注意的是,报捕获机制并不影响操作系统对网络数据包的
TCP/IP 协议栈,网卡驱动程序只是将收到的分组的副本交给包捕获程序,系统
的其他应用程序并不会感觉到将本该属于它的数据给截取了。对应用程序而言,
包捕获机制提供了一个统一的接口,使用户程序只需要简单的调用若干函数就
能获得所期望的数据包。这样一来,针对特定操作系统的捕获机制对用户透明,
使用户程序有比较好的可移植性。包过滤机制是对所捕获到的数据包根据用户
的要求进行筛选,最终只把满足过滤条件的数据包传递给用户程序,凡是不符
合要求的包全都丢弃。如果没有包过滤机制,链路层接收到发给本机器的所有
数据包,其中绝大部分都不是我们所关心的数据,而这样如此大量的数据很快
就会占满机器的内存和硬盘。
2、包捕获的原理
2.1 网卡的工作模式
在以太网上通讯的每张网卡上都拥有一个全球唯一的物理地址,也叫 MAC 地
址。该地址是一个 48 比特的二进制数。在以太网卡中内建有一个数据包过滤器。
该数据包过滤器的作用是保留那些目的 MAC 地址是本网卡的数据包和广播数据
包,丢弃所有其它无关的数据包,以免 CPU 对无关的数据报作无谓的处理。这是以
太网卡在一般情况下的工作方式。因此在正常情况下,一个合法的网络接口应该
只响应这样的两种数据包(帧):
(1)帧的目标地址具有和本地网络接口相匹配的硬件地址。
(2)帧的目标地址是“广播地址”(代表所有的接口地址,意味着所有该局域网