Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6271086
  • 博文数量: 2759
  • 博客积分: 1021
  • 博客等级: 中士
  • 技术积分: 4091
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-11 14:14
文章分类

全部博文(2759)

文章存档

2019年(1)

2017年(84)

2016年(196)

2015年(204)

2014年(636)

2013年(1176)

2012年(463)

分类: LINUX

2013-12-06 03:12:36

原文地址:TCPDUMP 原理 (Linux) 作者:zhoujianpingboy

Linux:

PF_PACKET  往是专门用于抓包的,往系统网络层注册一个协议。然后所有的往外发的包和进来的包都会调到这个文件里面 的packet_rcv() 函数,

static int (struct  *, struct net_device *dev,
 struct  *, struct net_device *orig_dev)




outgoing方向(出去的包)会在 dev_queue_xmit_nit 里面遍历 ptype_all 链表进行所有网络协议处理的时候调用到packet_rcv 。
incoming  方向(从外面其他机器进来的包会在 netif_receive_skb 函数里面同样办法遍历 ptype_all进行处理的时候调用到packet_rcv 。


利用数据链路层抓包 

Linux:
对于Linux是sock_packet 
对于Solaris是DLPI 
对于BSD是BPF 

libpcap封装了上述这些接口而已。

Windows:
采用原始套接字RAW_SOCK
采用Winpcap.lib
采用winsock 2 spi(服务提供者接口
采用Api Hook   
采用ddk(device   driver   kit设备驱动工具包)

|应用层|------exe程序,比如ie
--------
|表示层|-------ws2_32.dll
--------
|会话层|-------SPI
--------         
|传输层|-------TDI(不能截获ICMP等协议的数据)
--------  
|网络层|-------NDIS(可以截获所有的网络数据)
--------
|链路层|-------设备驱动 
--------       
|物理层|-------网卡

阅读(1173) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~