c#用winpcap发送需要用到的函数

pcap_sendpacket() 发送数据包 pcap_sendpacket(),发送单个数据包 阅读详情

只需要5个

一般步骤是

        [DllImport("wpcap.dll")]
        private static extern int pcap_findalldevs(ref IntPtr devicelist, StringBuilder errbuf);
        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
        private struct pcap_if
        {
            public IntPtr next;
            public string name;
            public string description;
            public IntPtr addresses;
            public uint flags;
        }

pcap_findalldevs找到所有的网络接口

自己找到正确的那个

然后

        [DllImport("wpcap.dll")]
        private static extern void pcap_freealldevs(IntPtr devicelist);

调用这种非托管的dll,包括winapi,弄完一样几乎都要相应的free一下,也几乎都有一个相应的free方法,这是c#不太习惯的


为什么要用pcap_findalldevs?虽然用System.Net.NetworkInformation命名空间里面的玩意可以多快好省的搞到一切信息吧,但是却不能保证winpcap可以打开这个设备啊,用winpcap的函数就相当于测试一下工作是否正常。


然后通过pcap_findalldevs找到相应的网络接口后

要pcap_if结构中的name

然后open

        [DllImport("wpcap.dll")]
        private static extern IntPtr pcap_open(string source, int snaplen,int flags, int read_timeout, IntPtr auth, StringBuilder errbuf);

这个source就是上面那个name


打开后

        [DllImport("wpcap.dll")]
        private static extern int pcap_sendpacket(IntPtr p, byte[] buff, int size);


pcap_sendpacket,这里发送的是以太网的数据包

其实以太网数据包和ip数据包相比,仅仅是在ip数据包前面多了14个字节

这里可能是个误区,好像以太网数据包在mac前面还有点东西,最后还有crc校验,但是对于用winpcap的pcap_sendpacket来说就等于ip包前多了14个字节而已

前6个是目标mac地址,接下来6个是本机网卡的mac地址,最后2个是协议类型,ip协议就是08 00


目标mac如何获得?

其实你用sniffer工具看一下就知道,就是网关的mac

比如我的机器是通过路由器上网的(路由器进行的PPPoE拨号)

那么发送时的以太网数据格式为

路由器mac(6字节)+网卡mac(6字节)+协议2字节+协议内容

这是我用ie连接时捕获的结果,返回的比如syn+ack就是网卡mac在前和路由mac在后仅此而已

自己构造好发出去就行了

于是就可以突破windows对于rawsocket的限制进行syn扫描或者攻击什么的了,只要能装winpcap的windows系统都可以。


最后

        [DllImport("wpcap.dll")]
        private static extern void pcap_close(IntPtr p);


===========

补充一句,winpcap是不管矫正你的数据包的,像ip头的checksum你得算对了才能发出去呢。而rawsocket,系统会帮你矫正checksum的,不信你可以试试,用rawsocket即使不计算checksum把那俩字节全用0,系统照样给你算出checksum发出去,比如说我用rawsocket发出去了syn也收到了syn+ack,但是用winpcap发出去结果就收不到,我就奇怪了同样一个程序啊,结果用sniffer工具一看,用winpcap的ip checksum不对,我就更奇怪了,同样一个程序生成的Ip包,怎么checksum会不一样呢?折腾了半天发现,原来用rawsocket发送的ip包的checksum也是错误的,但是却被系统自己给改成了正确的,合着之前一直算错了,但rawsocket每次都给矫正发出去了,而winpcap是不给矫正的,算错了就发不出去,于是改对了checksum后,用winpcap发送syn也就可以正常接收到syn+ack了。


C# 借助WinPcap实现EtherCAT IO实时控制(告别专用硬件) 本文介绍了一种利用C#WinPcap库实现低成本EtherCAT主站的方案,无需专用硬件即可对IO模块进行实时控制。文章详细阐述了从环境搭建、PDO映射配置到实时数据读写的完整流程,并探讨了该方案在运动控制、系统集成等场景的扩展应用与性能优化技巧。 阅读详情

相关推荐

C# 基于WinPcap实现EtherCAT主站,在Win11上直驱伺服电机

本文详细介绍了如何在Windows 11环境下使用C#WinPcap实现EtherCAT主站,直接驱动伺服电机。通过纯软件方案替代传统昂贵的PLC硬件,显著降低成本,同时保持高精度控制(±1脉冲)。内容涵盖环境配置、核心代码解析、运动控制实战及性能优化技巧,为中小企业和开发者提供经济高效的工业自动化解决方案。

weixin_29168813的博客 312

C# winPcap封装dll

C# winPcap封装dll

C# 借助WinPcap实现EtherCAT IO实时控制(免PLC方案)

本文详细介绍了如何在Windows环境下,利用C#编程语言结合WinPcap网络数据包捕获库,实现一套免PLC的EtherCAT IO实时控制方案。文章从方案原理、软硬件环境搭建、核心代码实现(包括主站初始化、PDO映射和实时控制循环)到调试技巧,提供了完整的实践指南。该方案特别适用于快速原型验证、低成本自动化测试及教育演示等场景,为开发者提供了基于通用PC的灵活工业控制新思路。

weixin_29264201的博客 229

C#利用WinpPcap抓包

C#利用WinpPcap抓包,能统计电脑流量

C#版的抓包软件

NetAnalyzer实现结构 在上一篇中介绍一点VC++开发环境的配置,与基本的运行方式。因为NetAnalyzer使用的C#作为开发语言,所以在此主要介绍一些在C#环境下的开发环境的配置,与一些基本开发情况,力求在完成本篇后后,读者可以制作一个简单的抓包程序。 在开始编程前先要介绍连个.Net类库SharpPcap.dll与PacketDotNet.dll。在2004年Tamir

qq_36095086的博客 6631

【ARP】C# winpacp抓包

1、安装WinPcap 包。 2、引用PacketDotNet.dll 、SharpPcap.dll 3、指定

LeoChaw 974

winpcap发送单个数据包的示例

#define WIN32 #define HAVE_REMOTE #include #include "pcap.h" #include "Win32-Extensions.h" //第一次遇到,在变量声明的时候不是随时都可以的,vs2010下 要把变量声明放到最前面,否则会报错 void genPacket(unsigned char *buf,int len) {

小猪猪and小马马的博客 974

关于使用Winpcap发送数据包的心得

在对网络数据包发送解析进行编程的时候,人们普遍使用的是Win socket套接字技术,但该技术仅限于网络层及其以上的传输层,对于下层应用的不多,为了了解数据包发送的真正机制,需要使用winpcap来进行数据包发送。下面针对两种协议使用winpcap进行数据包的发送winpcap下载地址:http://www.winpcap.org/archive/使用winpcap发送TCP协议数据包

无知的我 9409

WINPCAP发送自己构造的数据包问题

WINPCAP中,我可以抓取一个包,进行分析,然后得到它的MAC地址,现在我想利用此MAC构造一个数据包, 然后发送出去,请问这样的可行性?谢谢

taiyang156的专栏 870

c#捕获数据包(Winpcap

c#捕获数据包Winpcapc#捕获数据包Winpcapc#捕获数据包Winpcap

winpcap 发送数据包

WinPcap 中分析数据包的代码复制到VS中,再把WinPcap中数据分析中的一些关于网卡打印的代码复制到VS中。// mist12306.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <stdlib.h>#include <stdio.h>#include <pcap.h>void...

weixin_33766805的博客 533

winpcap demo

最近要写一个程序捕获物理层的包,用到winpcap,使用很简单。 详见:http://www.cnblogs.com/phinecos/archive/2008/10/20/1315176.html。// Demo.cpp : 定义控制台应用程序的入口点。 //#include "stdafx.h" #define HAVE_REMOTE #include <pcap.h>#define GET

混沌的博客 975

WinPcap快速构建网络诊断工具原型

最近工作中遇到一个需求:需要快速验证内网设备的连通性和稳定性。传统的ping命令和tracert虽然能用,但数据展示不够直观,而且无法一次性完成多项测试。于是我用WinPcapC#环境下花1小时做了个轻量级网络诊断工具原型,效果出乎意料的好。从代码编写到功能上线全程可视化操作,还能生成分享链接给同事测试,比本地开发效率高不少。上尝试了部署,发现它的Windows环境预装了WinPcap驱动,省去了配置依赖的麻烦。用WinPcap发送ICMP请求包后,监听返回的响应包并计算时间差。

ThunderstormLynx23的博客 737

WinPcap编程(前言&&学习)

计算机网络课设要求用WinPcap写对ARP包的接收与发送。 所以学了一下WinPcap的内容。 参考的博客: http://blog.csdn.net/htttw/article/details/7521053 http://www.cnblogs.com/yingfang18/archive/2010/11/27/1889596.html http://www.cnb...

azy67351的博客 168

详谈调用winpcap驱动写arp多功能工具

winpcap驱动简介二 Packet.dll相关数据结构及函数三 T-ARP功能及原理介绍四 T-ARP主要代码分析五 T-ARP源代码一)winpcap驱动简介    winpcap(windows packet capture)是windows平台下一个免费,公共的网络访问系统。开发winpcap这个项目的目的在于为win32应用程序提供访问网络底层的能力。它提供了以下的各项功能:   

吹云专栏 14万+

C++模板实战:从函数模板到类模板的工程化理解

C++模板是实现零成本抽象与编译期泛型的核心机制,其本质并非语法糖,而是通过类型参数化在编译阶段生成特化代码,兼顾类型安全与运行效率。理解模板需把握三大维度:类型契约(如operator+是否可用)、资源契约(如构造/析构行为)和实例化时机(函数模板隐式调用、类模板显式声明)。技术价值体现在STL容器、通用算法及嵌入式系统等场景中——仅修改模板参数即可适配uint16_t或float等不同数据类型,显著降低维护成本。本文聚焦西南科技大学C++实验十典型任务,结合函数模板、类模板、特化与内存布局等关键实践,解

weixin_30703911的博客 391

使用C#实现网络抓包与分析

文档及代码下载:http://www.dingos.cn/index.php?topic=361.0介绍 写这个包监听的最初想法来源于一个朋友的一个项目“NetSend(在两个计算机之间发送消息)”,朋友想知道这中间到底在网络上传输了什么?为了回答这个问题,查找了大部分资料后,得到一个结果,那就是免费的类库--WinPCap。 浏览了WinPCap的部分源码后,最初的想法是写一个包装的类,

夜晚回家 3568

智能电网开发必备:用libiec61850+C#实现MMS协议通信(含WinPcap配置秘籍)

本文详细介绍了如何利用libiec61850库与C#实现智能电网中的MMS协议通信,包括WinPcap配置、动态库编译及C#项目集成等关键步骤。通过实战案例和优化技巧,帮助开发者高效完成电力自动化系统的通信开发,提升系统性能和稳定性。

weixin_33730836的博客 152
上一篇: 忍无可忍吐槽一下
下一篇: 用sack去除扫描1433假结果?
太上老君
博客等级 码龄21年 111粉丝 29原创
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值