虽然网上已经有了SharpSniffer

这一个SharpSniffer还是原创的
无他,唯为学习
工程文件下载:SharpSniffer.rar

1、创建套接字
2、绑定到本机
3、设置IOControl
4、接收数据
5、处理(显示)数据

1、创建套接字

创建socket ,据MSDN,IOControlCode.ReceiveAll(后面要使用到)使用时有以下限制:

ReceiveAll

启用对网络上的所有 IPv4 数据包的接收。套接字必须有 InterNetwork地址族,套接字类型必须是Raw,

并且协议类型必须为 IP。当前用户必须属于本地计算机上的 Administrators 组,并且套接字必须绑定到特定端口。

Windows 2000 及更高版本的操作系统支持此控制代码。此值等于 Winsock 2 SIO_RCVALL 常数。

Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP); //直接new一个

2、绑定到本机

绑架到本机,只有绑定到本机才可以监听数据包:

socket.Bind(new IPEndPoint(GetHostAdress(), 0));

3、设置IOControl
获取本机IP地址,从一个主机名可能解析到好几个地址,这要看你电脑的网络适配器的状态了,这里只取第一个:

private static IPAddress GetHostAdress()

{

string hostName=Dns.GetHostName();

var hostAddreses=Dns.GetHostAddresses(hostName);

return hostAddreses[0];

}

很关键的一步,对IOControl进行设置。这里输入参数为1表示RCVALL_ON(启用接收所有包),当输入参数为0时表示RCVALL_OFF,具体定义在MSDN中WSAIoctl函数的Remark中说的很清楚:

byte[] outValue = BitConverter.GetBytes(0);

byte[] inValue = BitConverter.GetBytes(1);

socket.IOControl(IOControlCode.ReceiveAll,inValue, outValue); //对IO设置为可以接受所有包

很关键的,接收数据:

int recvedSize = socket.ReceiveFrom(buf, ref ep); //用ReceiveFrom接受数据

// socket.Receive(buf);

//用Receive也能接受到数据,不过使用ReceiveFrom可以直接获取发送方IP地址

接下来要显示数据了,这里只是简单的把数据打印出来,如果想获取该数据包的更多信息则就需要按IP数据包的格式来解析包的内容了:

string s = GetByteArrayHexString(buf, 0, recvedSize); //此函数把字节数组格式化,详细参考源代码

PrintLine(s);

详细过程参考源代码
本程序在WinXP sp3, VS2010, .Net Framework 4.0 Client & .Net Framework 2.0下编译运行通过
能成功抓包,如ping发出和收到的数据包能抓到,打开网页的数据包也能抓到。

C#使用sharppcap实现网络抓包-----2的更多相关文章

  1. C#使用sharppcap实现网络抓包

    sharppcap dll的下载地址: http://sourceforge.net/directory/os:windows/?q=sharppcap 具体使用详细步骤: http://www.co ...

  2. CatchPacket网络抓包软件

    CatchPacket网络抓包软件  qq  22945088431.技术特点:基于WinPcap库,c# winform2.实现获取机器所有网卡,可任意选择监听3.可以捕获常见网络协议arp dns ...

  3. 网络抓包wireshark(转)

    转自 网络抓包wireshark   抓包应该是每个技术人员掌握的基础知识,无论是技术支持运维人员或者是研发,多少都会遇到要抓包的情况,用过的抓包工具有fiddle.wireshark,作为一个不是经 ...

  4. 跨平台网络抓包工具-Microsoft Message Analyzer

    Microsoft Message Analyzer (MMA 2013)是微软最受欢迎的Netmon的最新版本. 在Netmon网络跟踪和排除故障功能的基础上提供了更强大的跨平台网络分析追踪能力.园 ...

  5. Microsoft Message Analyzer (微软消息分析器,“网络抓包工具 - Network Monitor”的替代品)官方正式版现已发布

    来自官方日志的喜悦 被誉为全新开始的消息分析器时代,由MMA为您开启,博客原文写的很激动,大家可以点击这里浏览:http://blogs.technet.com/b/messageanalyzer/a ...

  6. 网络抓包工具-Wireshark学习资料

    wireshark一个非常牛逼的网络抓包工具.转载一系列博文 一站式学习Wireshark(一):Wireshark基本用法 一站式学习Wireshark(二):应用Wireshark观察基本网络协议 ...

  7. 三种经典iPhone上网络抓包方法详解

    此文章来自:听云博客 很多时候需要网络抓包分析,在iPhone上抓包稍有不同,下面介绍三种常用的方式.分析工具以wireshark为例. 一.最简单的方式:用PC作为热点,在PC上抓包 优点:简单 缺 ...

  8. HttpWatch网络抓包工具的使用

    HttpWatch网络抓包工具是专为IE浏览器集成的一款网络拽包工具.   是一款强大的网页数据分析软件,是最好用的抓包工具,httpwatch可以抓到上传视屏图片的包,一般的抓包软件是抓不到的.打开 ...

  9. 网络抓包--Wireshark

    Wireshark 是一款非常棒的Unix和Windows上的开源网络协议分析器.它可以实时检测网络通讯数据,也可以检测其抓取的网络通讯数据快照文件.可以通过图形界面浏览这些数据,可以查看网络通讯数据 ...

随机推荐

  1. C# 将cookiecontainer写到本地

    public static void WriteCookiesToDisk(string file, CookieContainer cookieJar) { using(Stream stream ...

  2. 说说iOS中的手势及触摸

    一.响应链 在IOS开发中会遇到各种操作事件,通过程序可以对这些事件做出响应. 首先,当发生事件响应时,必须知道由谁来响应事件.在IOS中,由响应者链来对事件进行响应,所有事件响应的类都是UIResp ...

  3. JAVA算术运算符、关系运算符和位运算符

    算术运算符 1.java的算数运算符包括+(加).-(减).*(乘)./(除).%(取余),在运算过程中出现的隐式转换原则和C语言一样:2. 高位数据向低位数据转化要使用强制转化: 关系运算符 1.j ...

  4. Interview-Harry Potter walk through matrix.

    假设你是harry potter,在grid的左上角,你现在要走到右下角,grid中有正数也有负数,遇到正数表示你的strength增加那么多,遇到负数表示strength减少那么多,在任何时刻如果你 ...

  5. 下拉刷新ListView实现原理

    (1)主要是onScroll()方法和onTouchEvent()方法,先是onTouchEvent()的ACTION_DOWN,然后是 ACTION_MOVE和onScroll()方法同时进行,最后 ...

  6. Enterprise Library 6——Using the Logging Application Block

    原文参考 http://msdn.microsoft.com/en-us/library/dn440731(v=pandp.60).aspx 一.简介 .更重要的是用于审计.这种日志可以跟踪用户的行为 ...

  7. [转载+原创]Emgu CV on C# (二) —— Emgu CV on 灰度化

    本文主要对彩色图片灰度化的方法及其实现过程进行总结,最终给出Emgu CV实现的代码. 一.灰度化原理及数学实现(转载自——<图像灰度化方法总结及其VC实现> 该篇文章使用opencv实现 ...

  8. 一个SQL Server 2008 R2 死锁的问题解决

    问题场景:在客户那碰到一个操作卡死的现象 问题解决: 1.如何挂钩是死锁问题:通过代码跟踪,发现是指执行一个SQL语句超时,因此猜想可能是表锁住了 2.如果确认是思索问题:通过SQL发现死锁,以下是相 ...

  9. Jquery 查看DOM上绑定的事件列表

    $(dom).data( "events" ); 包括事件类型和关联的处理函数 下面是firefox的截图

  10. #define x do{......} while(0)的用处

    比如定义宏,#define FREE1(p) if (p) free (p)然后这样调用:if (expression)FREE1(p);elseprintf(“expression was fals ...