windows配置与管理_win7卡在配置windows

windows配置与管理_win7卡在配置windows0、前提windows:win7x64WinPcap版本:4.1.3WinPcap开发包:4.1.2目标:在VS2010中配置使用winpcap获取目标计算机中安装的网卡列表1、下载h

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

 

 0、前提

     windows: win7 x64

     WinPcap版本:4.1.3

     WinPcap开发包:4.1.2

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

 

 1、下载

    http://www.winpcap.org/

 

    windows配置与管理_win7卡在配置windows

 

 

    下载winpcap安装包 和 开发包

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

    windows配置与管理_win7卡在配置windows

 

 

 3、在VS2010中配置

 

    配置头文件 和 库文件

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

    windows配置与管理_win7卡在配置windows

    

 

 

 

 4、Demo

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

    

/*******************************
函数成功返回 0
失败返回      -1
*******************************/
int 
pcap_findalldevs_ex(
char *source,                //本机/远程机器/文件
struct pcap_rmtauth *auth,   //目标机器用户名 密码
pcap_if_t **alldevs,         //输出参数,详细信息
char *errbuf                 //缓冲区 大小为PCAP_BUF_SIZE,函数失败时保存错误信息
);

  

pcap_findalldevs_ex函数指定本机时指定参数"rpcap://" 或 预定义宏PCAP_SRC_IF_STRING
当指定远程机器时需要按照"rpcap://host:port"的格式,默认端口号为2002
远程机器有密码时需要指定用户名和密码。

struct pcap_rmtauth
{
    
    int type;   //#define RPCAP_RMTAUTH_NULL 0  或   用户名密码验证 #define RPCAP_RMTAUTH_PWD 1
    

    char *username;  //用户名
    

    char *password;  //密码
};

 

    

// demo1.cpp : 定义控制台应用程序的入口点。 //  #include "stdafx.h" #include <iostream> #include <WinSock2.h> #include <Windows.h> //the macro HAVE_REMOTE must define before #ifndef HAVE_REMOTE #define HAVE_REMOTE #endif #include <pcap.h> #include <remote-ext.h> #pragma comment(lib, "ws2_32.lib") #pragma comment(lib, "packet.lib") #pragma comment(lib, "wpcap.lib") using namespace std; /************************************************************************/ /* platfor win7 x64 * version of winpcap: 4.1.3 * version of developping tool: 4.1.2 * notes: The local/remote machine must install the Winpcap and Start the server(go to the install path and double click rpcapd.exe). You must look out that the DEFAULT PORT is 2002. If you use another port, the pcap_findalldevs_ex function return -1 and the erro information in errbuf is [Is the server properly installed on XXX.XXX.XXX.XXX? connect() failed: 由于目标计算机积极拒绝,无法连接。 (code 10061) ] /************************************************************************/ int _tmain(int argc, _TCHAR* argv[]) { //char* pSource = "rpcap://"; //localhost char* pSource = "rpcap://XXX.XXX.XXX.XXX:2002"; //remote PC struct pcap_rmtauth stAuth = {0}; stAuth.type = RPCAP_RMTAUTH_PWD; stAuth.username = "xxxxx"; stAuth.password = "xxxxxxxxxxx"; pcap_if_t* pPcapIft = NULL; char chBuffer[PCAP_BUF_SIZE] = {0}; int nCount = 0; if (0 == pcap_findalldevs_ex(pSource, &stAuth, &pPcapIft, chBuffer)) { for (pcap_if_t* pcap = pPcapIft; pcap != NULL; pcap = pcap->next) { cout << endl << "----------- device " << nCount ++ << " -------------" << endl; cout << pcap->name << endl << pcap->description << endl << pcap->flags << endl; cout << "-------- Output details below -----" << endl; for (struct pcap_addr* pAddr = pcap->addresses; pAddr != NULL; pAddr = pAddr->next) { struct sockaddr_in* psockAddr = (struct sockaddr_in*)(pAddr->addr); if (NULL != psockAddr) { cout << "IP is " << inet_ntoa(psockAddr->sin_addr) << endl; cout << "Port is " << ntohs(psockAddr->sin_port) << endl; cout << "Family is " << psockAddr->sin_family << endl; cout << "-------" << endl; } psockAddr = (struct sockaddr_in*)(pAddr->dstaddr); if (NULL != psockAddr) { cout << "Mask IP is " << inet_ntoa(psockAddr->sin_addr) << endl; cout << "Mask Port is " << ntohs(psockAddr->sin_port) << endl; cout << "Mask Family is " << psockAddr->sin_family << endl; cout << "-------" << endl; } psockAddr = (struct sockaddr_in*)(pAddr->broadaddr); if (NULL != psockAddr) { cout << "Broadcast IP is " << inet_ntoa(psockAddr->sin_addr) << endl; cout << "Broadcast Port is " << ntohs(psockAddr->sin_port) << endl; cout << "Broadcast Family is " << psockAddr->sin_family << endl; } psockAddr = (struct sockaddr_in*)(pAddr->dstaddr); if (NULL != psockAddr) { cout << "P2P IP is " << inet_ntoa(psockAddr->sin_addr) << endl; cout << "P2P Port is " << ntohs(psockAddr->sin_port) << endl; cout << "P2P Family is " << psockAddr->sin_family << endl; } cout << "---------------------------------------" << endl << endl << endl; } //for  } //for  pcap_freealldevs(pPcapIft); } //if else { cerr << endl << "Last error is " << GetLastError() << endl << chBuffer << endl; } system("pause"); return 0; }

 

    

 

 5、运行结果

     

     本机测试

     windows配置与管理_win7卡在配置windows

 

 

    远程机器测试

    windows配置与管理_win7卡在配置windows

 

  

  

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/166601.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • PHP二维数组(或任意维数组)转换成一维数组的方法汇总(实用)

    PHP二维数组(或任意维数组)转换成一维数组的方法汇总(实用)

  • 表示一个ASCⅡ字符与一个汉字分别要使用几个字节_字,字节

    表示一个ASCⅡ字符与一个汉字分别要使用几个字节_字,字节“一个字等于多少个字节?”是一个不严谨的问法直接回答一个字等于多少个字节,也是不严谨的答法。相关概念:1、位(bit)来自英文bit,音译为“比特”,表示二进制位。位是计算机内部数据储存的最小单位。2、字节(byte)字节来自英文Byte,音译为“拜特”,习惯上用大写的“B”表示。字节是计算机中数据处理的基本单位。3、字(word)计算机进行数据处理时,一次存取、加工和…

  • 解决Mac笔记本电脑自带录屏软件没有声音问题「建议收藏」

    解决Mac笔记本电脑自带录屏软件没有声音问题「建议收藏」Mac自带录屏功能,通过快捷键⌘-Shift-5即可唤醒该功能,点击录制即可开始录制,录制之前还能调整录制的框选区域。但是这个录屏功能有个缺点,不能录下声音(不管是外置的还是内置的),但是我们可以通过Loopback软件来让Mac的录屏功能同时把声音也录进去。Loopback借助这个软件可以把内置声音录进去,且音质很顶,且录屏的时候,你可以听得到声音。下载地址:loopback官网…

  • windows批处理命令大全「建议收藏」

    windows批处理命令大全「建议收藏」系统控制Shutdown-s-t600:表示600秒后自动关机shutdown-a:可取消定时关机Shutdown-r-t600:表示600秒后自动重启desk.cpl:屏幕分辨率logoff:注销命令explorer:打开资源管理器perfmon:计算机性能监测器PowerShell:提供强大远程处理能力secpol.msc:本地安全策略services.msc:本地服务设置shrpubw:创建共享文件夹taskschd.msc:任务计划

  • 缓存穿透,缓存击穿,缓存雪崩解决方案分析

    缓存穿透,缓存击穿,缓存雪崩解决方案分析前言设计一个缓存系统,不得不要考虑的问题就是:缓存穿透、缓存击穿与失效时的雪崩效应。缓存穿透缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个存在的数据每次请求都要到存储层去查询,失去了缓存的意义。在流量大时,可能DB就挂掉了,要是有人利用不存在的key频繁攻击我们的应用,这就是漏洞。解决方案

  • Java多线程系列—线程通信机制wait notify notifyAll(03)

    Java多线程系列—线程通信机制wait notify notifyAll(03)线程通信机制waitnotifynotifyAll本课时我们主要学习wait/notify/notifyAll方法的使用注意事项。我们主要从三个问题入手:为什么wait方法必须在synchronized保护的同步代码中使用?为什么wait/notify/notifyAll被定义在Object类中,而sleep定义在Thread类中?wait/notify和sleep方法的异同?wait必须在synchronized保护的同步代码中使用为什么wai

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号