C#抓包

工具:SharpPcap 4.2.0

vs工程:控制台应用程序


关于C#抓包,我只找到SharpPcap 这个dll,相关的资料不多,而且都是挺老的,所以就顺手记一下自己的代码,给有同样需求的人一个参考吧。

当然,代码可能存在问题,请见谅。


一、获取连接设备

// 获取连接列表
CaptureDeviceList devices = CaptureDeviceList.Instance;

// 无连接
if (devices.Count < 1)
{
    Console.WriteLine("No devices were found on this machine");
    return;
}

Console.WriteLine("\n以下为本机连接:");
Console.WriteLine("--------------\n");

int j=0;
string temp = "";
Regex r = new Regex("FriendlyName: .*\n"); //匹配连接的FriendlyName
Match m;
// 打印连接设备
foreach (ICaptureDevice dev in devices)
{
    temp = dev.ToString();
    m = r.Match(temp);
    Console.WriteLine("{0}:{1}\n", j++, m.ToString());
}
Console.Write("输入设备号");
string input = Console.ReadLine();
int i = 0;
try
{
    i = Int32.Parse(input);
}
catch (Exception e)
{
    Console.WriteLine("非法输入!"+e.Message);
    return;
}
if (devices.Count < 1 || i == -1)
{
    Console.WriteLine("变量非法!");
    return;
}
// 得到指定连接设备
ICaptureDevice device = devices[i];


二、打开连接

// 定义“包到达”事件
device.OnPacketArrival +=new SharpPcap.PacketArrivalEventHandler(device_OnPacketArrival);

// 打开连接
int readTimeoutMilliseconds = 1000;
device.Open(DeviceMode.Promiscuous, readTimeoutMilliseconds);


三、设置过滤

// 设置仅获取目标端口为1234的tcp包
string filter = "tcp dst port 1234";
device.Filter = filter;


四、开始获取

// 开始无限期捕获包
device.Capture();


五、包处理方法

private static void device_OnPacketArrival(object sender, CaptureEventArgs e)
{
    //获取以太网(Ethernet)的帧
    var ent = PacketDotNet.EthernetPacket.ParsePacket(LinkLayers.Ethernet, e.Packet.Data);
    //获取ip包
    var ip = ent.PayloadPacket;
    //获取tcp包
    var tcp = ip.PayloadPacket;
    //格式化tcp包,可直接读取tcp包中的相应值
    var tcp_packet = new TcpPacket(new ByteArraySegment(tcp.Bytes));
    if (tcp != null)
    {
        DateTime time = e.Packet.Timeval.Date;
        if (tcp.PayloadData != null)
        {
            //根据需要,获取tcp的data数据
            string str = BitConverter.ToString(tcp.PayloadData);
            /*
            *
            其他数据处理
            *
            */
        }
    }
}


六、技术有限,只做到这样的程度

转载于:https://my.oschina.net/u/1260893/blog/322939

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值