嗅探与伪造原理

嗅探


程序接收数据包的过程:python

1.数据包在传播介质中流动时,网络中的每一个网卡都能收到全部的数据帧,这些数据帧会被复制到网卡的内存中,而后检查目的MAC地址,是否为本身的MAC地址,是,则会经过直接存储器(DMA)的方式被复制到操做系统内核的缓存中,不然拒绝接收。而后网卡会以中断的方式告诉CPU,接收到了新数据,CPU会将这些数据从缓存复制到一个队列中(链路层驱动),为新数据的到来腾出空间。缓存

2.而后经过协议栈,检查网络层头部,目的IP地址,目的IP地址不是本身的IP,会进行丢弃,在检查传输层的目的端口,交给相应的程序。会依次去掉各层的头部,交给程序的是数据部分。网络


以下图:socket

Sniffer 程 序  链 路 一 驱  缓 存  网 卡  网 络  用 户 空 间  协 议 栈  OS 内 核

Q: Sniffer程序位于用户空间部分,想观察到完整的(包含首部信息)、未经处理的、没有进行丢弃的数据包,怎么办?操作系统

A: OS内核 为嗅探程序 提供了 一个Raw Socket API ,当数据包到达链路层驱动位置,会进行复制,经过raw socket 交给嗅探程序,若是有多个嗅探程序,会复制多份,分别交付。以下图:blog

Sniffer 程 序  raw socket  co PY  链 路 一 驱 一  缓 存  网 卡  网 络  用 户 空 间  协 议 栈  OS 内 核

Sniffer程序并不须要得到全部的报文,可能只须要得到其中的一小部分报文,好比UDP报文,这里就须要进行过滤,UNIX系统添加了一个BSD 数据包过滤器(BSD packet filter,BPF),以下图:队列

Sniffer 程 序  raw socket  B P F 过 滤 器  链 路 一 驱 一  缓 存  网 卡  网 络  用 户 空 间  协 议 栈  OS 内 核

Q:为何不在Sniffer程序处过滤,而在OS内核里面进行过滤?内存

A: 能够节省资源,在数据包复制以前进行过滤,以后进行复制的数据包相应大大减小。资源

注意:Sniffer程序,嗅探的是收包的过程。(站在攻击者的角度)程序


伪造


正常的应用程序 仅仅向OS 内核提供数据,目的IP地址,目的端口等信息,其余构造数据包的过程都交给OS内核去完成,而不能随意的去构造各个包头。与嗅探同样,这列也可用raw socket API,进行数据包的构造,而后交给下层,发送出去。以下图:

应 用 程 序  ocket AP  协 议 栈  网 络  spoof 不 帛  aw socket  网 卡

注意:该图是简化的图,大致理解一下过程,没有具体说起OS内核中的链路层操做。

另外,进行伪造,通常是发包的过程。(站在攻击者的角度)





以后会提供相应python、c代码。

相关文章
相关标签/搜索