winpcap捕获数据包

//技术手册:http://www.ferrisxu.com/WinPcap/html/index.html



 

Winpcap配置编程环境以及出错处理
2011-04-20 11:58

Winpcap配置编程环境:

安装Winpcap,接着:
1> 从WWW.WINPCAP.ORG 上下载WINPCAP SDK -WpdPack,WinPcap SDk 里面包含库
文件,头文件,文档文件和一些例子。解压到一个指定的目录。解压缩后把Include 目录添
加到IDE 的包含文件中(VC6.0 Tools->Option->Directory; VS 2003/2005/2008 工具->选项->项目
和解决方案/ 项目->VC++ 目录); lib 目录添加为新的库文件目录( VC6.0
Tools->Option->Directory; VS 2003/2005/2008 工具->选项->项目和解决方案/项目->VC++目录);

添加wpcap.lib和ws2_32.lib(工程属性->链接器->输入->附加依赖项)

 


2> 如果一个源文件使用了WinPcap 提供的库函数,那么就需要在该文件开始的位置添加
pcap.h 包含文件(或者在引用的文件中),即#include “pcap.h”
也许会出现下面的错误:
fatal error C1083: 无法打开包括文件:“pcap.h”: No such file or directory
这个错误表明找不到pcap.h 文件,这个头文件在驱动程序安装完成后也是没有的,它是开
发包里面的一个头文件,所以,如果要运行程序还需要到官方网站上去下载WinPcap SDK,
并按步骤1 添加到项目中。
3> 在程序中添加wpcap.lib。如果出现下面错误
error LNK2019: 无法解析的外部符号_pcap_findalldevs_ex,该符号在函数XXX 中被引用,
如果发生上面的错误就表明缺少库文件, 需要添加wpcap.lib 到工程中(VC6.0
Project->Settings->Link->Object/library modules; VS 2003/2005/2008 项目->添加现有项->所有文件)

 

4> 新的版本里WinPcap 支持远程数据包获取,所以还应当添加预处理定义WPCAP和HAVE_REMOTE
添加时注意必须以如下图的格式为好:


否则会发生下面的错误

error C2065: “PCAP_SRC_IF_STRING”: 未声明的标识符
error C3861: “pcap_findalldevs_ex”: 找不到标识符
error C2065: “PCAP_OPENFLAG_PROMISCUOUS”: 未声明的标识符
error C3861: “pcap_open”: 找不到标识符

5> 如果还有问题,可以到WinPcaP 官方网站上找FAQ。

 

 

如果应用程序出现一下提示,那就是没有安装驱动程序的原因了。
也可以不安装WinPcap驱动程序。但是需要把上面提到的四个动态链接库文件拷贝到系统分区/WINDOWS/system32目录下。(似乎有些问题)

pcap_open()
pcap_open() 为捕获/发送数据打开一个普通的源。pcap_open()能够替代所有的pcap_open_xxx()函数,它隐藏了不同的pcap_open_xxx()之间的差异,所以程序员不必使用不同的open函数。

pcap_open(source,snaplen,flags,read-timeout,auth,errbuf);

source:的是包含要打开的源名称的以’\0’结尾的字符串。源名称得包含新的源规范语法 (Source Specification Syntax),并且它不能为NULL。为了方便的使用源语法,请记住: (1)pcap_findalldevs_ex()返回的适配器(网卡)可以直接被pcap_open()使用;(2)万一用户想传递他自己的源字符串给 pcap_open(),pcap_createsrcstr()可以创建正确的源标识。

snaplen:需要保留的数据包的长度。对每一个过滤器接收到的数据包,第一个‘snaplen’字节的内容将被保存到缓冲区,并且传递给用户程 序。例如,snaplen等于100,那么仅仅每一个数据包的第一个100字节的内容被保存。简言之就是从每一个包的开头到snaplen的那段内容将被 保存。

flags:保存一些由于抓包需要的标志。Winpcap定义了三种标志:

l         PCAP_OPENFLAG_PROMISCUOUS:1,它定义了适配器(网卡)是否进入混杂模式(promiscuous mode)。

l         PCAP_OPENFLAG_DATATX_UDP:2,它定义了数据传输(假如是远程抓包)是否用UDP协议来处理。

l         PCAP_OPENFLAG_NOCAPTURE_RPCAP:4,它定义了远程探测器是否捕获它自己产生的数据包。

read_timeout:以毫秒为单位。read timeout被用来设置在遇到一个数据包的时候读操作不必立即返回,而是等待一段时间,让更 多的数据包到来后从OS内核一次读多个数据包。并非所有的平台都支持read timeout;在不支持read timeout的平台上它将被忽略。

auth:一个指向’struct pcap_rmtauth’的指针,保存当一个用户登录到某个远程机器上时的必要信息。假如不是远程抓包,该指针被设置为NULL。

errbuf:一个指向用户申请的缓冲区的指针,存放当该函数出错时的错误信息。

返回值是一个’pcap_t’指针(就是我们一般所说的网卡的指针),它可以作为下一步调用(例如pcap_compile()等)的参数,并且指定了一个已经打开的Winpcap会话。在遇到问题的情况下,它返回NULL并且’errbuf’变量保存了错误信息。

 

 

如何获取数据包的内容呢?

我们首先来看看包的结构:



 

 

 

当我们过滤掉:以太头,ip,tcp/udp 之后就是我们需要的数据包的内容了



源代码:

#include "stdafx.h"
#include<iostream>
using namespace std;
#include <pcap.h>
using namespace std;
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <net.h>
#pragma comment(lib,"ws2_32.lib")
#define MAX_PRINT 80
#define MAX_LINE 16


#pragma once

 

typedef unsigned char u_int8_t;
typedef unsigned short int u_int16_t;
typedef unsigned int u_int32_t;
#define  ETH_ALEN 6

struct iphdr
{
#if __BYTE_ORDER == __LITTLE_ENDIAN
 unsigned int ihl:4;
 unsigned int version:4;
#elif __BYTE_ORDER == __BIG_ENDIAN
 unsigned int version:4;
 unsigned int ihl:4;
#else
# error "Please fix <bits/endian.h>"
#endif
 u_int8_t tos;
 u_int16_t tot_len;
 u_int16_t id;
 u_int16_t frag_off;
 u_int8_t ttl;
 u_int8_t protocol;
 u_int16_t check;
 u_int32_t saddr;
 u_int32_t daddr;
 /*The options start here. */
};

# ifdef __FAVOR_BSD
typedef u_int32_t tcp_seq;
/*
* TCP header.
* Per RFC 793, September, 1981.
*/
struct tcphdr
{
 u_int16_t th_sport;         /* source port */
 u_int16_t th_dport;         /* destination port */
 tcp_seq th_seq;             /* sequence number */
 tcp_seq th_ack;             /* acknowledgement number */
#  if __BYTE_ORDER == __LITTLE_ENDIAN
 u_int8_t th_x2:4;           /* (unused) */
 u_int8_t th_off:4;          /* data offset */
#  endif
#  if __BYTE_ORDER == __BIG_ENDIAN
 u_int8_t th_off:4;          /* data offset */
 u_int8_t th_x2:4;           /* (unused) */
#  endif
 u_int8_t th_flags;
#  define TH_FIN        0x01
#  define TH_SYN        0x02
#  define TH_RST        0x04
#  define TH_PUSH       0x08
#  define TH_ACK        0x10
#  define TH_URG        0x20
 u_int16_t th_win;           /* window */
 u_int16_t th_sum;           /* checksum */
 u_int16_t th_urp;           /* urgent pointer */
};

# else /* !__FAVOR_BSD */
struct tcphdr
{
 u_int16_t source;
 u_int16_t dest;
 u_int32_t seq;
 u_int32_t ack_seq;
#  if __BYTE_ORDER == __LITTLE_ENDIAN
 u_int16_t res1:4;
 u_int16_t doff:4;
 u_int16_t fin:1;
 u_int16_t syn:1;
 u_int16_t rst:1;
 u_int16_t psh:1;
 u_int16_t ack:1;
 u_int16_t urg:1;
 u_int16_t res2:2;
#  elif __BYTE_ORDER == __BIG_ENDIAN
 u_int16_t doff:4;
 u_int16_t res1:4;
 u_int16_t res2:2;
 u_int16_t urg:1;
 u_int16_t ack:1;
 u_int16_t psh:1;
 u_int16_t rst:1;
 u_int16_t syn:1;
 u_int16_t fin:1;
#  else
#   error "Adjust your <bits/endian.h> defines"
#  endif
 u_int16_t window;
 u_int16_t check;
 u_int16_t urg_ptr;
};
#endif

#define ETH_P_802_3     0x0001          /* Dummy type for 802.3 frames  */
#define ETH_P_AX25      0x0002          /* Dummy protocol id for AX.25  */
#define ETH_P_ALL       0x0003          /* Every packet (be careful!!!) */
#define ETH_P_802_2     0x0004          /* 802.2 frames                 */
#define ETH_P_SNAP      0x0005          /* Internal only                */
#define ETH_P_DDCMP     0x0006          /* DEC DDCMP: Internal only     */
#define ETH_P_WAN_PPP   0x0007          /* Dummy type for WAN PPP frames*/
#define ETH_P_PPP_MP    0x0008          /* Dummy type for PPP MP frames */
#define ETH_P_LOCALTALK 0x0009          /* Localtalk pseudo type        */
#define ETH_P_CAN       0x000C          /* Controller Area Network      */
#define ETH_P_PPPTALK   0x0010          /* Dummy type for Atalk over PPP*/
#define ETH_P_TR_802_2  0x0011          /* 802.2 frames                 */
#define ETH_P_MOBITEX   0x0015          /* Mobitex (
kaz@cafe.net )       */
#define ETH_P_CONTROL   0x0016          /* Card specific control frames */
#define ETH_P_IRDA      0x0017          /* Linux-IrDA                   */
#define ETH_P_ECONET    0x0018          /* Acorn Econet                 */
#define ETH_P_HDLC      0x0019          /* HDLC frames                  */
#define ETH_P_ARCNET    0x001A          /* 1A for ArcNet :-)            */
struct ethhdr {
 unsigned char   h_dest[ETH_ALEN];       /* destination eth addr */
 unsigned char   h_source[ETH_ALEN];     /* source ether addr    */
 u_int16_t          h_proto;                /* packet type ID field */
} ;

 

/* 4字节的IP地址 */
typedef struct ip_address{
    u_char byte1;
    u_char byte2;
    u_char byte3;
    u_char byte4;
}ip_address;

/* IPv4 首部 */
typedef struct ip_header{
    u_char  ver_ihl;        // 版本 (4 bits) + 首部长度 (4 bits)
    u_char  tos;            // 服务类型(Type of service)
    u_short tlen;           // 总长(Total length)
    u_short identification; // 标识(Identification)
    u_short flags_fo;       // 标志位(Flags) (3 bits) + 段偏移量(Fragment offset) (13 bits)
    u_char  ttl;            // 存活时间(Time to live)
    u_char  proto;          // 协议(Protocol)
    u_short crc;            // 首部校验和(Header checksum)
    ip_address  saddr;      // 源地址(Source address)
    ip_address  daddr;      // 目的地址(Destination address)
    u_int   op_pad;         // 选项与填充(Option + Padding)
}ip_header;

/* UDP 首部*/
typedef struct udp_header{
    u_short sport;          // 源端口(Source port)
    u_short dport;          // 目的端口(Destination port)
    u_short len;            // UDP数据包长度(Datagram length)
    u_short crc;            // 校验和(Checksum)
}udp_header;



/* packet handler 函数原型 */
void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data);

int main()
{
pcap_if_t *alldevs;
pcap_if_t *d;
int inum;
int i=0;
pcap_t *adhandle;
char errbuf[PCAP_ERRBUF_SIZE];
u_int netmask;
char packet_filter[] = "dst host 192.168.0.1";//过了条件port 20 and ip and tcp dst host 127.0.0.1
struct bpf_program fcode;

    
    /* 获取本机设备列表 */
    if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1)
    {
        fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf);
        exit(1);
    }
    
    /* 打印列表 */
    for(d=alldevs; d; d=d->next)
    {
        printf("%d. %s", ++i, d->name);
        if (d->description)
            printf(" (%s)\n", d->description);
        else
            printf(" (No description available)\n");
    }
    
    if(i==0)
    {
        printf("\nNo interfaces found! Make sure WinPcap is installed.\n");
        return -1;
    }
    
    printf("Enter the interface number (1-%d):",i);
    scanf("%d", &inum);
    
    if(inum < 1 || inum > i)
    {
        printf("\nInterface number out of range.\n");
        /* 释放设备列表 */
        pcap_freealldevs(alldevs);
        return -1;
    }
    
    /* 跳转到选中的适配器 */
    for(d=alldevs, i=0; i< inum-1 ;d=d->next, i++);
    
    /* 打开设备 */
    if ( (adhandle= pcap_open(d->name,          // 设备名
                              65536,            // 65535保证能捕获到不同数据链路层上的每个数据包的全部内容
                                 PCAP_OPENFLAG_NOCAPTURE_RPCAP,//PCAP_OPENFLAG_PROMISCUOUS,    // 混杂模式
                              1000,             // 读取超时时间
                              NULL,             // 远程机器验证
                              errbuf            // 错误缓冲池
                              ) ) == NULL)
    {
        fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", d->name);
        /* 释放设备列表 */
        pcap_freealldevs(alldevs);
        return -1;
    }
    


      /* 检查数据链路层,为了简单,我们只考虑以太网 */
    if(pcap_datalink(adhandle) != DLT_EN10MB)
    {
        fprintf(stderr,"\nThis program works only on Ethernet networks.\n");
        /* 释放设备列表 */
        pcap_freealldevs(alldevs);
        return -1;
    }
    
    if(d->addresses != NULL)
        /* 获得接口第一个地址的掩码 */
        netmask=((struct sockaddr_in *)(d->addresses->netmask))->sin_addr.S_un.S_addr;
    else
        /* 如果接口没有地址,那么我们假设一个C类的掩码 */
        netmask=0xffffff;


    //编译过滤器
    if (pcap_compile(adhandle, &fcode, packet_filter, 1, netmask) <0 )
    {
        fprintf(stderr,"\nUnable to compile the packet filter. Check the syntax.\n");
        /* 释放设备列表 */
        pcap_freealldevs(alldevs);
        return -1;
    }
    
    //设置过滤器
    if (pcap_setfilter(adhandle, &fcode)<0)
    {
        fprintf(stderr,"\nError setting the filter.\n");
        /* 释放设备列表 */
        pcap_freealldevs(alldevs);
        return -1;
    }
    




    printf("\nlistening on %s...\n", d->description);
    
    /* 释放设备列表 */
    pcap_freealldevs(alldevs);
    
    /* 开始捕获 */
    pcap_loop(adhandle, 0, packet_handler, NULL);
    
    return 0;
}


/* 每次捕获到数据包时,libpcap都会自动调用这个回调函数 */
void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data)
{
    /*struct tm *ltime;
    char timestr[16];
    time_t local_tv_sec;
    
    // 将时间戳转换成可识别的格式
    local_tv_sec = header->ts.tv_sec;
    ltime=localtime(&local_tv_sec);
    strftime( timestr, sizeof timestr, "%H:%M:%S", ltime);
    
    printf("%s,%.6d len:%d\n", timestr, header->ts.tv_usec, header->len);*/

    struct tm *ltime;
    struct iphdr *ip;
    struct ethhdr *eth;
    struct tcphdr *tcp;

    char timestr[16];
    ip_header *ih;
    udp_header *uh;
    u_int ip_len;
    u_short sport,dport;
    time_t local_tv_sec;
    
    
    pkt_data=(pkt_data + sizeof(struct ethhdr) + sizeof(struct iphdr)+sizeof(struct tcphdr))-4;//-4 表示移动32位
    
    const char* target="corporation/login_corporation.yizhi?method=verify";
    
    if(!(strstr((char*)pkt_data,target)))
    {
        return;
    }


    if()

        oa/corporation/login_corporation.yizhi?method=verify
    cout<<pkt_data<<endl;

    

}

 

一步一步尝试在MFC下开发基于winpcap数据包捕获和分析软件(之三) 随便转载,转载请注明出处http://blog.csdn.net/leotangcw/欢迎大家和我交流QQ:17371764     Email:tangchengwen@163.com刚才上FTP想找部电影看看,没新片,玩游戏好的游戏又没法玩(机器太老了),其他游戏又不想玩,接着写吧!刚才把视图的上面大部分都搞定了,现在开始写下面的那部分,我在左边放的是一个Tree控件,右边放的是一 阅读详情

相关推荐

基于WinPcap网络数据包捕获程序开发

本文还有配套的精品资源,点击获取 简介:本文介绍了一个基于WinPcap库的网络捕包程序的开发过程。WinPcap是一个专为Windows系统设计的开源网络数据包处理库,它允许开发者直接捕获、修改和发送网络数据包。文章详细说明了下载安装WinPcap、配置开发环境、在Visual C++ 6.0中添加必要的头文件和库文件,以及成功编译程序的步骤。通过这些步骤,开发者可以创建...

weixin_42263617的博客 3192

libpcap(winpcap捕获数据包与存储和读取

libpcap(winpcap捕获数据包与存储和读取 环境 libpcap + Qt Creator

深入网络数据包捕获技术:使用PacketX与WinPCap

本章深入探讨了使用PacketX库和WinPCap进行网络第二层数据包捕获的技术细节。通过示例代码展示如何在VB.NET和C#中实现数据包捕获,并详细说明了如何处理捕获数据包,包括数据包的过滤、内容提取以及本地与远程IP地址的解析。此外,本章还讨论了在繁忙网络中如何使用硬件过滤器来提高处理效率,以及如何通过编程方式检测计算机的网络连接状态。

weixin_35019679的博客 410

WinPcap数据包捕获程序

数据包捕获程序,C++编写的WinPcap下的网络数据包捕获程序

解析Winpcap截获的数据包

解析Winpcap截获的数据包2009-04-28 16:38现在Winpcap库已经被广泛应用于网络程序,特别是用于网络分析,而多数初学者对于如何分析所截获的数据包还不太清楚。现在就以我的经验来介绍一下,希望能对大家有所帮助。首先要清楚的是,Winpcap截获的数据包与Windows Raw socket截获的数据包不同的是,raw socket截获的数据包只局限于传输层(请参考有关OSI模型知识),也就是所只能够截获tcp,udp,icmp等高层协议,而Winpcap截获的数据包是从数据链路层开始的,它

HTTP 404 5209

Winpcap进行抓包,分析数据包结构并统计IP流量

计算机网络实验,直接把电饭锅塞嘴里 一.实验目的 随着计算机网络技术的飞速发展,网络为社会经济做出越来越多的贡献,可以说计算机网络的发展已经成为现代社会进步的一个重要标志。但同时,计算机犯罪、黑客攻击、病毒入侵等恶性事件也频频发生。网络数据包捕获、监听与分析技术是网络安全维护的一个基本技术同时也是网络入侵的核心手段。通过基于网络数据包的截获和协议分析,对网络上传输的数据包进行捕获,可以获取网络上传输的非法信息,对维护网络安全起到重大作用。 本次实验的主要目的有: 理解协议在通信中的作用; 掌握抓包软件的开

include的博客 1万+

C++ 捕获与解析IP数据包winpcap

源代码链接:https://download.csdn.net/download/chd_lcj/10891420 (不知道为什么积分涨到4积分了。。。原先只是单纯的想分享下的,结果最低只能设置1积分) //网络编程学习经验记录贴 winpcap简介 WinPcap 是由伯克利分组捕获库派生而来的分组捕获库,它是在Windows 操作平台上来实现对底层包的截取过滤。 WinPcap...

Fuguir™的博客 2万+

利用WinPcap技术捕获数据包

前言   随着网络入侵的不断发展,网络安全变得越来越重要,于是网络入侵取证系统的研究也变得日益重要。在网络入侵取证系统中,对网络上传送的数据包进行有效的监听即捕获包是目前取证的关键技术,只有进行高效的数据包捕获网络管理员才能对所捕获的数据进行一系列的分析,从而进行可靠的网络安全管理。 1winpcap简介   WinPcap 是由伯克利分组捕获库派生而来的分组捕获库,它是在Windows 操作平

1719

Winpcap捕获数据包并转发

WinPcap是一个重要的抓包工具,它是libpcap的Windows版本。 关于WinPcap的介绍、安装与配置,之后我会单独写一篇文章,这里先介绍下使用Winpcap函数能完成的基本功能:捕获数据包并转发。 首先来看几个函数: int pcap_findalldevs_ex(char * source, struct pcap_rmtauth * auth,pcap_if_t

小菜鸟的起飞之路 5156

WinPcap编程4——捕获数据包

winpcap程序中,捕获数据包主要分为如下几步:获取网络适配器列表打开网络适配器捕获数据获取网络适配器列表在前文中已经讲述,这里就不再累述了。打开设备的函数是pcap_open()。下面是参数 snaplen, flags 和 to_ms 的解释说明 snaplen 制定要捕获数据包中的哪些部分。 在一些操作系统中 (比如 xBSD 和

键者天行 2393

winpcap编程捕获数据包

打开本地网卡,捕获流经本地的数据包;通过以太网类型确定上层协议、源以太网地址和目的以太网地址,分析上层IP协议和TCP协议,并在控制台输出详细信息。

WinPcap技术捕获数据包

前言  随着网络入侵的不断发展,网络安全变得越来越重要,于是网络入侵取证系统的研究也变得日益重要。在网络入侵取证系统中,对网络上传送的数据包进行有效的监听即捕获包是目前取证的关键技术,只有进行高效的数据包捕获网络管理员才能对所捕获的数据进行一系列的分析,从而进行可靠的网络安全管理。 1winpcap简介  WinPcap 是由伯克利分组捕获库派生而来的分组捕获库,它是在Windows

张彤的专栏 1310

实现Winpcap数据包捕获的C++源码解析与实战

Winpcap(Windows Packet Capture)是一个广泛使用的开源库,它为Windows系统提供了网络数据包捕获的能力。通过这个库,开发者可以绕过标准的网络栈来访问网络通信的数据,这对于网络监控、入侵检测系统(IDS)、协议分析工具的开发至关重要。数据包过滤是网络数据分析中的重要步骤,它允许用户根据特定的标准筛选出需要的流量,从而可以专注于网络上的特定类型的数据。在这一章节中,我们将详细介绍如何定义和应用过滤规则,以便能够有效地管理所捕获数据包

weixin_42604188的博客 480

WinPcap数据包捕获与分析系统毕业设计项目

WinPcap是Windows平台下一个强大的网络数据包捕获和分析的库。它提供了一种简单易用的方法,使得开发者可以不必深入底层网络协议,而专注于应用层的开发。WinPcap工作原理基于网络驱动,能够捕获和发送原始网络数据包。MFC(Microsoft Foundation Classes)是微软提供的一套C++类库,用于简化Windows应用程序的开发。它抽象和封装了Windows API,使开发者能快速构建图形用户界面(GUI)的应用程序。

weixin_29443363的博客 1029

利用WinPcap实现网络数据包捕获与分析

WinPcap是一个功能强大的开源库,用于网络数据包捕获网络分析,最初由Loris Degioanni在1999年发起。它的出现极大地简化了Windows平台上的网络流量捕获工作,尤其在网络安全、网络故障诊断和网络性能监控领域具有重要应用。随着时间的推移,WinPcap经过了多个版本的迭代,不仅在性能上有了大幅提升,而且在易用性、稳定性和安全性等方面也得到了长足的进步。目前,它已成为许多商业网络监控软件和网络分析工具的底层实现基础。

weixin_42591908的博客 1104

从配置Winpcap环境(dev c++)到运行HTTP数据包捕获还原

2.打开Dev c++,工具——》编译选项——》编译器配置——》目录——》库,点击红框处添加Winpcap开发包中的Lib文件夹。链接:https://pan.baidu.com/s/155x_BiCf-O0gNLk29_nTWw?4.新建一个空项目,点击“项目”——》"项目属性",依照下图添加wpcap.lib和WS2_32.lib。3.继续向"C包含文件"和"C++包含文件"中添加开发者包中的Include文件夹。我的环境:WindosXP虚拟机 , Dev C++

lsm1227msl的博客 1650

基于Winpcap的网卡信息获取与数据包捕获实战小程序

Winpcap 是一个专为 Windows 平台设计的网络数据包捕获与发送库,基于 libpcap/Winpcap 架构,提供了对底层网络接口的直接访问能力。其核心功能包括数据包捕获、过滤、发送以及网络接口控制,广泛应用于网络安全分析、流量监控、协议解析等领域。对于开发人员而言,搭建 Winpcap 开发环境是进行网络编程的第一步。

weixin_35705784的博客 1199
上一篇: js获得选中的下拉列表的值跟去掉空格
下一篇: C++编写及注册windows服务程序
tanaichen
博客等级 码龄17年 1粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值