惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

量子位
S
Securelist
MyScale Blog
MyScale Blog
Jina AI
Jina AI
罗磊的独立博客
The Cloudflare Blog
美团技术团队
博客园 - 叶小钗
阮一峰的网络日志
阮一峰的网络日志
博客园 - 三生石上(FineUI控件)
月光博客
月光博客
雷峰网
雷峰网
小众软件
小众软件
aimingoo的专栏
aimingoo的专栏
大猫的无限游戏
大猫的无限游戏
博客园 - Franky
博客园 - 聂微东
Y
Y Combinator Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
MongoDB | Blog
MongoDB | Blog
T
Tailwind CSS Blog
Attack and Defense Labs
Attack and Defense Labs
博客园_首页
Latest news
Latest news
Apple Machine Learning Research
Apple Machine Learning Research
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
The Hacker News
The Hacker News
G
GRAHAM CLULEY
Simon Willison's Weblog
Simon Willison's Weblog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
P
Proofpoint News Feed
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
U
Unit 42
D
Docker
Webroot Blog
Webroot Blog
N
Netflix TechBlog - Medium
T
Tor Project blog
C
Cyber Attacks, Cyber Crime and Cyber Security
L
LINUX DO - 最新话题
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
The Last Watchdog
The Last Watchdog
B
Blog
Recent Announcements
Recent Announcements
GbyAI
GbyAI
Microsoft Azure Blog
Microsoft Azure Blog
Security Latest
Security Latest
V2EX - 技术
V2EX - 技术
N
News | PayPal Newsroom
Microsoft Security Blog
Microsoft Security Blog

博客园 - Pvistely

SQL查询日历 怀旧下给自己留个备份, 小东西WinForm的等待窗口 FluorineFx ASObject自动转换基础类 AutoParseASObject ,用于Flash AMF协议解析 Flash网页游戏辅助工具制作简析 Microsoft SQL Server 2008 基本安装说明 SQL 2000 异数据库数据同步 请把这个消息提示框拿掉,谢谢 MS新版Wallop, 被VB6搞死。。。。。。。鸟 企业管理应用系统平台插件接口应用说明 企业管理应用系统平台应用说明 企业管理应用平台预览演示版下载 企业管理系统应用平台(预览版) ENA13条码转换函数 运行时自定义PropertyGrid显示属性项目 C1Flexgrid与XtraGrid性能比较 继上次的GDI+做报表设计器后............. 想用GDI+2.0做设计器,但在实现过程中遇到大麻烦
PPPOE数据包转换及SharpPcap应用
Pvistely · 2009-02-24 · via 博客园 - Pvistely

在最近写的一个程序中需要用到Sniffer功能,但由于通过.net自身的Socket做出来的Sniffer不能达到实际应用的要求(如不能监听WIFI数据包)所以找到了WinPCAP的.NET库SharpPcap(http://www.tamirgal.com/home/dev.aspx?Item=SharpPcap)

说下我遇到的问题,由于我自己用的是通过路由器上网,所以做出来的东西所有功能都可以用,但把程序发到一些朋友那里就遇到问题了,关于SNIFFER的所有功能都不能用,起先还以为是程序功能问题,不停的在做修改,慢慢的才意识到原来是由于PPPOE拨号的原因,通过网上找了相关PPPOE的资料才知道,他将原来的数据包加上了一个PPPOE的协议包头,为了使程序支持PPPOE的协议只能把数据包转换成一般的TCP/IP包,PPPOE的协议有8字节组成,之后就是原有的TCP/IP协议包,一般的ADSL拨号都不会加密,因此可以不考虑加密的因素通过PCAP来做包转换主要有这几个过程,

1.获取PPPOE的原始以太包

2.将原始以太包头写入新以太包做为头部

3.移去原始以太包头部后的8个字节

4.将处理后的以太包数据块写入新包中

具体的PCAP应用实现代码:

 1 //数据包接收事件
 2 Device.PcapOnPacketArrival += new Pcap.PacketArrivalEvent(PcapOnPacketArrival);
 3 //设置过滤条件,"以太协议为0x8864(即PPPOE协议)或TCP协议"
 4 Device.PcapSetFilter("ether[12:2]=0x8864 or tcp");
 5 //开始截包
 6 PcapCapture(-1);
 7 
 8 
 9 
10 //截包事件
11 void PcapOnPacketArrival(object sender, Packet packet){
12 
13   TCPPacket tmpTcpPacket = null;
14   //当获取的数据包为TCPPacket时直接转换为TCP数据包
15   if (packet is TCPPacket) 
16   {
17       tmpTcpPacket = (packet as TCPPacket);
18   }
19   else
20       //当为以太包时,则尝试转换成TCP数据包
21       if (packet is EthernetPacket)
22       {
23       //协议数据区(TCP/IP协议包数据区,包括IP协议数据及TCP协议数据)
24           byte[] tmpBuf = new byte[packet.Data.Length - 8];
25       //复制实际TCP/IP数据块
26           Array.Copy(packet.Data, 8, tmpBuf, 0, tmpBuf.Length);
27           MemoryStream tmpMs = new MemoryStream();
28           //将原来的以太包头作为目标TCP/IP数据包的以太头
29           tmpMs.Write(packet.Header, 0, packet.Header.Length);
30           //将实际TCP/IP数据包写入目标TCP/IP数据包中,跟在以太包头后面,成为一个新的TCP/IP数据包
31           tmpMs.Write(tmpBuf, 0, tmpBuf.Length);
32           try
33           {
34         //尝试创建新的TCP/IP数据包对象,
35                 //第一个参数为以太头长度,第二个为数据包数据块
36               tmpTcpPacket = new TCPPacket(packet.Header.Length, tmpMs.ToArray());
37           }
38           catch { tmpTcpPacket = null; }
39           tmpMs.Dispose();
40       }
41 
42 }