Chinaunix首页 | 论坛 | 博客
  • 博客访问: 645661
  • 博文数量: 76
  • 博客积分: 3091
  • 博客等级: 中校
  • 技术积分: 996
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-11 15:40
个人简介

IT老兵,爱好胡思乱想、读书和交流,2015年底重新回到IT战场,期待再一次“贯穿”。

文章存档

2020年(11)

2018年(1)

2017年(1)

2016年(1)

2015年(1)

2014年(2)

2011年(5)

2010年(2)

2009年(4)

2008年(28)

2007年(20)

我的朋友

分类: 网络与安全

2007-03-29 10:55:54

《Linux下Sniffer程序的实现》这篇文章对其关系表述的比较准确。
另外一篇英文参考Inside the Linux Packet Filter 很深入
1,LINUX中PF_PACKET的协议簇允许应用程序直接利用网络驱动程序发送和接收报文,支持两个稍微有点不同的SOCKET类型,SOCK_DGRAM和SOCK_RAW。前者让内核处理添加或者去除以太网报文头部工作,而后者则让应用程序对以太网报文头部有完全的控制!
2,把过滤过程尽可能早的放报文进程链中,LINUX的内核允许我们把一个名为LPF(Linux Packet Filter)的过滤器直接放到PF_PACKET protocol-processing routines(在网卡接收中断执行后立即执行)中,过滤器将决定哪些包被送到应用程序,哪些包被丢弃!这个过滤程序可以根据使用者的定义来运行,由BPF伪机器码写成的。
3,这个过滤器也不是总是有效的,因为它产生于一般的使用BPF的机器,没考虑到一些特殊结构的机器!在一些特殊情况下,过滤器由PF_PACKET进程运行,也许已经检查过以太协议了!这个根据你在socket()调用初使化的时候指定的那些协议!如果不是ETH_P_ALL(抓所有的报文),那么只有那些符合指定的协议类型的报文会流过过滤器!
4,libpcap提供的一个最有用的函数是pcap_compile(), 它可以把一个输入输出的逻辑表达式变为BPF代码!tcpdump利用这个函数完成在用户输入的命令行和BPF代码之间的转换!tcpdump有个我们很感兴趣但是很少使用的参数 ,-d,可以输出BPF代码!把tcpdump -d中的-d换成-dd,将显示出一段C代码,可以把它复制到自己的程序中,可以通过调用setsockopt()来过滤端口!
阅读(6957) | 评论(1) | 转发(1) |
给主人留下些什么吧!~~

chinaunix网友2008-08-27 08:56:15

rtptool文章上说的很清楚了,你自己不能实验一下吗! 请你不要在技术讨论的时候加入攻击性语言,谢谢! http://blog.chinaunix.net/u1/33167/showart_268473.html