使用SharpPCap在C#下进行网络抓包
转自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时,则抓取所有的包,包括转发的包.通常我们都是开启这种模式的
下面是示例:
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(true, 1000);
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()
PcapDevice device = devices[i];
//Open the device for capturing
//true -- means promiscuous mode
//1000 -- means a read wait of 1000ms
device.PcapOpen(true, 1000);
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
使用SharpPCap在C#下进行网络抓包相关推荐
- Python下的网络抓包库
一直以来对于Python下的网络抓包库很疑惑,搞不清楚pylibpcap.pypcap.pycap这些库之间是什么关系,混沌了很长时间,在网上G了很久慢慢搞清楚了,其实这些都是libpcap的Pyth ...
- linux下怎么网络抓包
Linux下面如何用tcpdump抓包 很多时候我们的系统部署在Linux系统上面,在一些情况下定位问题就需要查看各个系统之间发送数据报文是否正常,下面我就简单讲解一下如何使用tcpdump抓包 tc ...
- ubuntu 下 Wireshark网络抓包工具使用
Wireshark的原名是Ethereal,新名字是2006年起用的.当时Ethereal的主要开发者决定离开他原来供职的公司,并继续开发这个软件.但由于Ethereal这个名称的使用权已经被原来那个 ...
- python 网络抓包
Python下的网络抓包库pylibpcap.pypcap.pycap这些库其实这些都是libpcap的Python绑定实现,libpcap才是真正的核心. 在http://pypi.python.o ...
- 网络抓包-winpcap
1. winpcap 1. winpcap简介 (windows packet capture)是windows平台下一个免费,公共的网络访问系统.开发winpcap这个项目的目的在于为win32应用 ...
- python抓包库_python 网络抓包
Python下的网络抓包库pylibpcap.pypcap.pycap这些库其实这些都是libpcap的Python绑定实现,libpcap才是真正的核心. pypcap 目前pypcap和pylib ...
- 安卓抓包工具 linux,Android 下使用tcpdump网络抓包方法
Android 下使用tcpdump网络抓包方法 抓包需要tcpdump以及Root权限,tcpdump在本文后有下载. 首先把tcpdump传进手机,用adb命令(放SD卡有时会有问题,我一次可以用 ...
- 硬干货!一张图弄清楚在ESXi下如何进行网络抓包
对于网络问题,抓包一直是一个比较简单方便的"大招".由于在esxi环境下可以在不同的层面下抓包,因此在什么地方抓包,怎么抓包一直让我觉得很复杂,于是每次操作之前我都要再检查一次手册 ...
- esxi vsphere的端口_硬干货!一张图弄清楚在ESXi下如何进行网络抓包
对于网络问题,抓包一直是一个比较简单方便的"大招".由于在esxi环境下可以在不同的层面下抓包,因此在什么地方抓包,怎么抓包一直让我觉得很复杂,于是每次操作之前我都要再检查一次手册 ...
最新文章
- 自动机器学习:团队如何在自动学习项目中一起工作?
- Eclipse 高亮显示
- Spring框架你敢写精通,面试官就敢问@Autowired注解的实现原理
- PostGresSQL简介与Windows上的安装教程
- 【TF-IDF】传统方法TF-IDF解决短文本相似度问题
- HALCON示例程序count_pellets.hdev分割豆子,基本形态学的使用
- Linux Shell脚本专栏_一键查看服务器的利用率_04
- c语言用梯形法计算积分,c语言用梯形法求积分
- 今天来谈一谈环境对我们的习惯有什么影响
- 小小c#算法题 - 1 - 找出数组中满足条件的两个数
- 让本地网络与微软windows azure互通
- RAC动态资源(DRM)管理介绍
- 将Nginx添加到系统服务
- 条码标签打印软件连接不了数据库怎么办?
- Android Adb命令恢复出厂设置
- “磁碟机”病毒肆虐 数万电脑中招
- 解决支付宝验证失败sign check fail: check Sign and Data Fail
- linux系统取消时间同步,linux下时间同步的两种方法分享
- 涉嫌一级强奸重罪之后,危险的刘强东和京东
- [算法]递归(尾递归和非尾递归)
热门文章
- 2022-2028年中国加气站行业市场研究及前瞻分析报告
- 2022-2028年中国煤化工行业市场前景分析预测报告
- 2022-2028年中国小球产业深度调研及投资前景预测报告(全卷)
- ideal如何创建dynamic web project
- python:Json模块dumps、loads、dump、load介绍
- 最强 NLP 预训练模型库 PyTorch-Transformers 正式开源:支持 6 个预训练框架,27 个预训练模型...
- TVM/Relay 的 PartitionGraph()(mod) 函数讨论整理
- AI+IoT+电池应用
- 语义分割:基于openCV和深度学习(二)
- 客快物流大数据项目(五十四):初始化Spark流式计算程序