首页 > 系统相关 >Windows下配置使用WinPcap

Windows下配置使用WinPcap

时间:2024-04-08 14:35:47浏览次数:28  
标签:XXX Windows 配置 char include WinPcap NULL pcap sin

 0、前提

     windows: win7 x64

     WinPcap版本:4.1.3

     WinPcap开发包:4.1.2

     目标:在VS2010中配置使用winpcap 获取目标计算机中安装的网卡列表

 1、下载

    http://www.winpcap.org/

下载winpcap安装包 和 开发包

安装包安装完毕后,解压开发包到某个目录即可,开发包免安装。

 3、在VS2010中配置

    配置头文件 和 库文件

    项目属性--VC++目录--包含目录 / 库目录

 4、Demo

    获取本机 / 远程机器上网卡的列表和相关数据

 1 /*******************************
 2 函数成功返回 0
 3 失败返回      -1
 4 *******************************/
 5 int 
 6 pcap_findalldevs_ex(
 7 char *source,                //本机/远程机器/文件
 8 struct pcap_rmtauth *auth,   //目标机器用户名 密码
 9 pcap_if_t **alldevs,         //输出参数,详细信息
10 char *errbuf                 //缓冲区 大小为PCAP_BUF_SIZE,函数失败时保存错误信息
11 );
pcap_findalldevs_ex函数指定本机时指定参数"rpcap://" 或 预定义宏PCAP_SRC_IF_STRING
当指定远程机器时需要按照"rpcap://host:port"的格式,默认端口号为2002
远程机器有密码时需要指定用户名和密码。
1 struct pcap_rmtauth
2 {
3     
4     int type;   //#define RPCAP_RMTAUTH_NULL 0  或   用户名密码验证 #define RPCAP_RMTAUTH_PWD 1
5     
6     char *username;  //用户名
7    
8     char *password;  //密码
9 };
  1 // demo1.cpp : 定义控制台应用程序的入口点。
  2 //
  3 
  4 #include "stdafx.h"
  5 #include <iostream>
  6 #include <WinSock2.h>
  7 #include <Windows.h>
  8 
  9 //the macro HAVE_REMOTE must define before
 10 #ifndef  HAVE_REMOTE
 11 #define HAVE_REMOTE
 12 #endif
 13 
 14 #include <pcap.h>
 15 #include <remote-ext.h>
 16 
 17 #pragma comment(lib, "ws2_32.lib")
 18 #pragma comment(lib, "packet.lib")
 19 #pragma comment(lib, "wpcap.lib")
 20 
 21 using namespace std;
 22 
 23 
 24 /************************************************************************/
 25 /* platfor win7 x64
 26  * version of winpcap: 4.1.3
 27  * version of developping tool: 4.1.2
 28 
 29  * notes: The local/remote machine must install the Winpcap
 30           and 
 31           Start the server(go to the install path and double click rpcapd.exe).
 32 
 33           You must look out that the DEFAULT PORT  is 2002. 
 34           If you use another port, the pcap_findalldevs_ex  function return -1
 35           and the erro information in errbuf is 
 36           [Is the server properly installed on XXX.XXX.XXX.XXX?  
 37           connect() failed: 由于目标计算机积极拒绝,无法连接。  (code 10061) ]
 38 
 39 /************************************************************************/
 40 
 41 int _tmain(int argc, _TCHAR* argv[])
 42 {
 43     //char* pSource = "rpcap://";                  //localhost
 44     char* pSource = "rpcap://XXX.XXX.XXX.XXX:2002";  //remote PC
 45 
 46     struct pcap_rmtauth stAuth = {0};
 47     stAuth.type = RPCAP_RMTAUTH_PWD;     
 48     stAuth.username = "xxxxx";
 49     stAuth.password = "xxxxxxxxxxx";
 50 
 51     pcap_if_t* pPcapIft = NULL;
 52     char chBuffer[PCAP_BUF_SIZE] = {0};
 53 
 54     
 55     int nCount = 0;
 56 
 57     if (0 == pcap_findalldevs_ex(pSource, &stAuth, &pPcapIft, chBuffer))
 58     {
 59         for (pcap_if_t* pcap = pPcapIft; pcap != NULL; pcap = pcap->next)
 60         {
 61             cout << endl << "-----------  device "
 62                  << nCount ++
 63                  << " -------------" << endl;
 64 
 65             cout << pcap->name 
 66                  << endl
 67                  << pcap->description
 68                  << endl
 69                  << pcap->flags
 70                  << endl;
 71 
 72             cout << "-------- Output details below -----" << endl;
 73 
 74             for (struct pcap_addr* pAddr = pcap->addresses;
 75                 pAddr != NULL; pAddr = pAddr->next)
 76             {
 77                 
 78                 struct sockaddr_in* psockAddr = (struct sockaddr_in*)(pAddr->addr);
 79                 if (NULL != psockAddr)
 80                 {
 81                     cout << "IP is " << inet_ntoa(psockAddr->sin_addr) << endl;
 82                     cout << "Port is " << ntohs(psockAddr->sin_port) << endl;
 83                     cout << "Family is " << psockAddr->sin_family << endl;
 84 
 85                     cout << "-------" << endl;
 86                 }
 87                 
 88 
 89                 psockAddr = (struct sockaddr_in*)(pAddr->dstaddr);
 90                 if (NULL != psockAddr)
 91                 {
 92                     cout << "Mask IP is " << inet_ntoa(psockAddr->sin_addr) << endl;
 93                     cout << "Mask Port is " << ntohs(psockAddr->sin_port) << endl;
 94                     cout << "Mask Family is " << psockAddr->sin_family << endl;
 95 
 96                     cout << "-------" << endl;
 97                 }
 98 
 99                 
100 
101 
102                 psockAddr = (struct sockaddr_in*)(pAddr->broadaddr);
103                 if (NULL != psockAddr)
104                 {
105                     cout << "Broadcast IP is " << inet_ntoa(psockAddr->sin_addr) << endl;
106                     cout << "Broadcast Port is " << ntohs(psockAddr->sin_port) << endl;
107                     cout << "Broadcast Family is " << psockAddr->sin_family << endl;
108 
109                 }
110 
111 
112                 psockAddr = (struct sockaddr_in*)(pAddr->dstaddr);
113                 if (NULL != psockAddr)
114                 {
115                     cout << "P2P IP is " << inet_ntoa(psockAddr->sin_addr) << endl;
116                     cout << "P2P Port is " << ntohs(psockAddr->sin_port) << endl;
117                     cout << "P2P Family is " << psockAddr->sin_family << endl;
118                 }
119 
120                 cout << "---------------------------------------" << endl << endl << endl;
121                 
122             } //for
123 
124 
125         } //for
126 
127 
128         pcap_freealldevs(pPcapIft);
129 
130     } //if
131     else
132     {
133         cerr << endl << "Last error is " << GetLastError() << endl
134              << chBuffer << endl;
135     }
136 
137     system("pause");
138 
139     return 0;
140 }

5、运行结果

     本机测试

  远程机器测试

标签:XXX,Windows,配置,char,include,WinPcap,NULL,pcap,sin
From: https://www.cnblogs.com/ybqjymy/p/18121069

相关文章

  • 经常忘记路由器/交换机/防火墙配置命令的,收藏起来,随时查看
    如果说工具是网络工程师的趁手兵器,那么命令就是网络工程师的武功秘籍。给大家推荐一个文档,经常会忘记交换机、路由器、防火墙配置命令的朋友,那么你一定不要错过。这个文档不仅可以查到所有的命令,还有详细的命令案例和配置教程,从交换机的原理到实战案例,讲的非常详细。就......
  • 运维系列(创建windows服务,亲测有效):Windows 安装Redis(图文详解)
    Windows安装Redis(图文详解)Windows安装Redis(图文详解)一、Redis是什么数据库?二、安装Redis1、下载地址2、安装过程2.1将下载的压缩包解压到一个文件夹中:2.2打开cmd指令窗口,进入到解压的那个文件夹里:2.3输入redis-serverredis.windows.conf:2.4部署Redis在windows下的......
  • 配置VM开机自启动
    1.在此电脑-右键选择“管理”-服务和应用程序-服务中找到VMwareWorkstationServer服务(新版名称也可能是VMware自启动服务,自己找一下,服务属性里有描述信息的),将其启用并选择开机自动启动新版参考官方文档(为Windows主机上的本地虚拟机启用自动启动(vmware.com))2.打开VMw......
  • 全栈的自我修养 ———— react router6默认二级路由配置?嵌套时候如何实现默认导航
    在组件嵌套时候小编定义了一个共同组件于/public地址下,小编发现如果直接访问public是只有外部组件的页面,小编目标是访问public时候直接访问index页面,小编找了很多资料最终自己使出来了一个办法如下!!小编自己发现的后来查找到的小编自己发现的即把{pat......
  • MPLS——实验配置实例
    MPLS——实验发送端PE:VPN实例路由--->导入到VPNv4路由。接收端PE:VPNV4路由经过RT的过滤,导入到VPN实例中。IPV4单播路由——建立BGPIPv4单播邻居;VPNv4路由——建立BGPVPNv4邻居。[Huawei]displaybgpvpnv4allpeer//查看邻居的建立[AR3]displayiprouting-tablev......
  • Elasticsearch 配置与测试分析器 (2)
    一.配置文本分析器(Configuretextanalysis) 默认情况下,Elasticsearch使用standard分析器来进行文本分析,如果使用该分析器,则不用额外的配置。如果不满足,可以使用其它内置分析器,也可以创建自定义的分析器更好的控制,通常在生产实战中都是自定义分析器,方便更好扩展。 ......
  • node.js 安装及配置环境变量只看此文
    转发:https://blog.csdn.net/u014212540/article/details/1302606791.node.js安装2.Node.js环境变量配置3.国内镜像网站配置4.npm、yarn、pnpm、nrm常用命令4.1nrm常用命令:4.2npm常用指令:4.3yarn常用命令:5.常规上传至npm公共注册表方法(npmpublish/yarnpublish)......
  • 在Linux中,如何配置SSH以确保远程连接的安全?
    在Linux中,可以通过以下步骤配置SSH以确保远程连接的安全:更新SSH软件包:首先,确保已安装最新版本的OpenSSH软件包。在终端中运行以下命令来更新软件包:sudoapt-getupdatesudoapt-getupgradeopenssh-server修改SSH端口:默认情况下,SSH服务器使用端口22。为了......
  • Windows系统如何做端口映射?
    在网络通信中,端口映射是一项关键技术,允许将公共网络上的端口映射到私有网络上的特定设备或服务。对于Windows用户而言,端口映射为实现远程访问提供了便利。本文将探讨Windows端口映射及其应用。天联组网的优势天联组网是一项功能强大的服务,具有以下优势:无网络限制:天联组网......
  • Windows编程系列:图形编程基础2
    通过函数BeginPaint画图1、创建一个Windows桌面应用程序 2、找到WM_PAINT消息的处理函数,添加代码如下:1caseWM_PAINT:2{3PAINTSTRUCTps;4HDChdc=BeginPaint(hWnd,&ps);5TextOut(hdc,10,20,L"HelloWorld",10);//绘制文本......