使用SharpPCap在C#下进行网络抓包

news/2024/9/21 22:33:41

转自http://www.cnblogs.com/billmo/archive/2008/11/09/1329972.html

在做大学最后的毕业设计了,无线局域网络远程安全监控策略
那么抓包是这个系统设计的基础
以前一直都是知道用winpcap的,现在网上搜了一下,有用C#封装好了的,很好用
下面是其中的几个用法
这个类库作者的主页:http://www.tamirgal.com/home/default.aspx

PcapOpen()有下面几个方法

  • PcapOpen()
  • PcapOpen(bool promiscuous_mode)
  • PcapOpen(bool promiscuous_mode, int read_timeout)

promiscuous_mode:在普通的抓取模式下,我们只抓取那些目的地为目标网络的包,而处于promiscuous_mode时,则抓取所有的包,包括转发的包.通常我们都是开启这种模式的

下面是示例:

 

//Extract a device from the list

PcapDevice device 
= devices[i];

//Register our handler function to the 

//'packet arrival' event

device.PcapOnPacketArrival 
+= 

  
new SharpPcap.PacketArrivalEvent(device_PcapOnPacketArrival);

//Open the device for capturing
 

//true -- means promiscuous mode

//1000 -- means a read wait of 1000ms

device.PcapOpen(
true1000);

Console.WriteLine(

    
"-- Listenning on {0}, hit 'Enter' to stop...",

    device.PcapDescription);

//Start the capturing process

device.PcapStartCapture();

//Wait for 'Enter' from the user.

Console.ReadLine();

//Stop the capturing process

device.PcapStopCapture();

//Close the pcap device
device.PcapClose();

 

 

PcapStartCapture()对应PcapStopCapture()

使用PcapCapture(int packetCount)时我们可以使用SharpPcap.INFINITE,来达到持续抓包的功能

 

Note:通常CRC的数据是不在数据包的中的,因为通常错误的CRC包会被自动丢弃.

 

上面的需要注册一个event handle,这在很多时候是不可行的,所以我们推荐使用下面这个方法PcapGetNextPacket()

 

//Extract a device from the list

PcapDevice device 
= devices[i];

//Open the device for capturing
//true -- means promiscuous mode
//1000 -- means a read wait of 1000ms
device.PcapOpen(true1000);
Console.WriteLine();
Console.WriteLine(
"-- Listenning on {0}...",
device.PcapDescription);
Packet packet 
= null;

//Keep capture packets using PcapGetNextPacket()
while( (packet=device.PcapGetNextPacket()) != null )

{

    
// Prints the time and length of each received packet

 

    DateTime time 
= packet.PcapHeader.Date;

    
int len = packet.PcapHeader.PacketLength;

    Console.WriteLine(
"{0}:{1}:{2},{3} Len={4}"

              time.Hour, time.Minute, time.Second, 

              time.Millisecond, len);

}


//Close the pcap device

 

device.PcapClose();

Console.WriteLine(
"-- Capture stopped, device closed.");

 

 

 

 

PcapSetFilter() 设置过滤条件

 

string filter = "ip and tcp";
device.PcapSetFilter( filter );

 

 

 

下面这个例子通过抓取TCP,输出他们的时间,长度,IP,源端口,目的IP,目的端口

/// <SUMMARY>

/// Prints the time, length, src ip, 

/// src port, dst ip and dst port

/// for each TCP/IP packet received on the network

/// </SUMMARY>


private static void device_PcapOnPacketArrival(
                       
object sender, Packet packet)

{            

    
if(packet is TCPPacket)

    
{                

        DateTime time 
= packet.Timeval.Date;

        
int len = packet.PcapHeader.len;

 

        TCPPacket tcp 
= (TCPPacket)packet;

        
string srcIp = tcp.SourceAddress;

        
string dstIp = tcp.DestinationAddress;

        
int srcPort = tcp.SourcePort;

        
int dstPort = tcp.DestinationPort;

 

        Console.WriteLine(
"{0}:{1}:{2},

            
{3} Len={4} {5}:{6} -> {7}:{8}"

            time.Hour, time.Minute, time.Second, 

            time.Millisecond, len, srcIp, srcPort, 

            dstIp, dstPort);

    }


}

转载于:https://www.cnblogs.com/armyao/archive/2010/11/05/1870164.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pgtn.cn/news/17576.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

卷积结构及其计算

文章目录卷积结构及其计算卷积及其参数设计卷积计算优化Winograd池化卷积计算常用方法经典卷积神经网络模型结构LeNet-5AlexNetVGGGoogleNetResNet卷积结构及其计算 卷积及其参数设计 局部连接&#xff1a;视觉具有局部性&#xff0c;充分考虑领域信息&#xff0c;局部稠密链接…

记录|深度学习100例-卷积神经网络(CNN)服装图像分类 | 第3天

记录|深度学习100例-卷积神经网络&#xff08;CNN&#xff09;服装图像分类 | 第3天 1. 服装图像分类效果图 原始训练图如下&#xff1a; 测试图&#xff1a;预测标签及实际标签如下&#xff1a; 可以看到正确预测 训练损失/准确度图&#xff1a; 2. 源码 # 深度学习10…

即将到来的日子 ,你会寂寞吗?

见到如此的数字&#xff0c;不知道身边的你是否会想起一些往事&#xff0c;我想这一刻很难去形容&#xff0c;因为哥也会有寂寞的一天。 从来不太喜欢的节日&#xff0c;但是每逢到来的时候&#xff0c;总会有一阵阵的痛。今天不是好的节日&#xff0c;在地球上某一个角落&…

并行及分布式框架

文章目录并行及分布式框架并行计算常用技术共享内存系统和分布式内存系统概述OPENMP技术OpenMP编程模型OPENMP API构成编译伪指令运行时函数环境变量OpenMP常用指令OpenMP常用函数OpenMP 环境变量MPI技术MPI消息传递Nvidia NCCL技术并行及分布式框架 并行计算常用技术 共享内…

Postgresql时间戳long转日期,转字符串,转timestamp,日期转换错误定位及解决

1. 效果图如下 排查问题时遇到个尴尬的问题&#xff0c;程序里计算好的小时开始及结束的时间戳&#xff0c;转换发现有点乱。 遂研究下&#xff0c;终于正确的转换了。 记录下原因&#xff1a; postgresql的 timestamp可以由bigint秒时间戳10位通过 to_timestamp转换出来&…

Django_1

文章目录云服务器配置docker&gitdjango:项目开发&#xff1a;开发环境&#xff1a;配置docker、git环境项目创建实例1创建django2git维护项目3运行项目IP加入ALLOWED_HOSTS4通过app写django页面5创建自己的页面6流程优化云服务器配置docker&git django: Django是后起…

记录|深度学习100例-卷积神经网络(CNN)彩色图片分类 | 第2天

记录|深度学习100例-卷积神经网络&#xff08;CNN&#xff09;彩色图片分类 | 第2天 1. 彩色图片分类效果图 数据集如下&#xff1a; 测试图1如下 训练/验证精确图如下&#xff1a; 优化后&#xff1a;测试图——打印预测标签: 优化后&#xff1a;测试图——打印 预测标…

django_创建菜单界面

文章目录创建菜单界面项目系统设计项目文件结构素材地址创建文件项目配置settings.py配置项目架构配置tempaltes管理html配置js配置views配置urls编辑菜单界面配置menu的js添加按钮添加按钮创建菜单界面 项目系统设计 menu&#xff1a;菜单页面 playground&#xff1a;游戏界…