摘要 腾兴网为您分享:C语言根据MAC地址查找网卡并修改IP地址,余额宝,一点开,虚拟机,小熊到家等软件知识,以及秀色秀场,死神无级别混战,金葫芦,汇浦,qq经典头像98个,赛优教育教师资格证,autolite,酷安,智能云镜,上海苹果家园,英语音标发音规则表,二哈表情,绝地求生所有枪,mcedit,甘肃省广播电视总台等软件it资讯,欢迎关注腾兴网。下面给各位整理一个C语言根据MAC地址查找网卡并修改IP地址的例子,希望这个例子可以帮助到各位朋友. #include winsock2.h #include iphlpapi.h #include stdio.h #include stdlib.h #include iostream #include...

下面给各位整理一个C语言根据MAC地址查找网卡并修改IP地址的例子,希望这个例子可以帮助到各位朋友.

#include

#include

#include

#include

#include

#include "setupapi.h"

#include

#pragma comment(lib, "IPHLPAPI.lib")

#pragma comment(lib, "setupapi.lib")

#define MALLOC(x) HeapAlloc(GetProcessHeap(), 0, (x))

#define FREE(x) HeapFree(GetProcessHeap(), 0, (x))

/* Note: could also use malloc() and free() */

BOOL GetAdapterInfo(LPCTSTR lpszAdapterName, PIP_ADAPTER_INFO pAdapterInfo);

BOOL SetIP(LPCTSTR lpszAdapterName, int nIndex, LPCTSTR pIPAddress, LPCTSTR pNetMask, LPCTSTR pNetGate);

BOOL RestartNetwork(LPCTSTR lpszAdapterName);

int __cdecl main()

{

LPCTSTR lpszMAC = "DE-AD-DE-ED-9A-05";

LPCTSTR lpszIP = "10.3.3.145";

LPCTSTR lpszMask = "255.255.252.0";

LPCTSTR lpszGateway = "10.3.0.5";

IP_ADAPTER_INFO AdapterInfo;

BOOL bResult = GetAdapterInfo(lpszMAC, &AdapterInfo);

if (bResult) {

printf("Get adapter information successfuly!\nAdapterName:%s\nnDescription:%s\nIndex:%d\n", AdapterInfo.AdapterName, AdapterInfo.Description, AdapterInfo.Index);

BOOL bResult = SetIP(AdapterInfo.AdapterName, AdapterInfo.Index, lpszIP, lpszMask, lpszGateway);

printf("result:%d", bResult);

}

return 0;

}

BOOL GetAdapterInfo(LPCTSTR lpszMAC, PIP_ADAPTER_INFO pRetAdapterInfo)

{

PIP_ADAPTER_INFO pAdapterInfo;

PIP_ADAPTER_INFO pAdapter = NULL;

DWORD dwRetVal = 0;

UINT i;

ULONG ulOutBufLen = sizeof (IP_ADAPTER_INFO);

pAdapterInfo = (IP_ADAPTER_INFO *)MALLOC(sizeof (IP_ADAPTER_INFO));

if (pAdapterInfo == NULL) {

printf("Error allocating memory needed to call GetAdaptersinfo\n");

return 1;

}

// Make an initial call to GetAdaptersInfo to get

// the necessary size into the ulOutBufLen variable

if (GetAdaptersInfo(pAdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW) {

FREE(pAdapterInfo);

pAdapterInfo = (IP_ADAPTER_INFO *)MALLOC(ulOutBufLen);

if (pAdapterInfo == NULL) {

printf("Error allocating memory needed to call GetAdaptersinfo\n");

return 1;

}

}

if ((dwRetVal = GetAdaptersInfo(pAdapterInfo, &ulOutBufLen)) == NO_ERROR) {

pAdapter = pAdapterInfo;

while (pAdapter) {

CHAR szMAC[18] = { 0 };

for (i = 0; i < pAdapter->AddressLength; i) {

if (i == (pAdapter->AddressLength - 1))

sprintf(szMAC i * 3, "%.2X", (int)pAdapter->Address[i]);

else

sprintf(szMAC i * 3, "%.2X-", (int)pAdapter->Address[i]);

}

if (strcmp(szMAC, lpszMAC) == 0) {

memcpy(pRetAdapterInfo, pAdapter, sizeof(IP_ADAPTER_INFO));

if (pAdapterInfo)

FREE(pAdapterInfo);

return TRUE;

}

pAdapter = pAdapter->Next;

}

}

else {

printf("GetAdaptersInfo failed with error: %d\n", dwRetVal);

return FALSE;

}

if (pAdapterInfo)

FREE(pAdapterInfo);

return FALSE;

}

BOOL RestartNetwork(LPCTSTR lpszAdapterName)

{

LPCTSTR lpszNetworkName = "本地连接";

// 获取网络连接名称用于netsh命令

HKEY hKey;

std::string strKeyName = "SYSTEM\\CurrentControlSet\\Control\\Network\\{4D36E972-E325-11CE-BFC1-08002BE10318}\\";

strKeyName= lpszAdapterName;

strKeyName= "\\Connection";

if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,

strKeyName.c_str(),

0,

KEY_QUERY_VALUE,

&hKey) != ERROR_SUCCESS)

return FALSE;

CHAR szNetworkName[32] = { 0 };

DWORD dwSize = 32;

DWORD dwResult = RegQueryValueEx(hKey, "Name", NULL, NULL, (LPBYTE)szNetworkName, &dwSize);

printf("Name:%s", szNetworkName);

CHAR szCommand[128] = { 0 };

sprintf(szCommand, "netsh interface set interface name=\"%s\" admin=DISABLED", lpszNetworkName);

system(szCommand);

sprintf(szCommand, "netsh interface set interface name=\"%s\" admin=ENABLED", lpszNetworkName);

system(szCommand);

RegCloseKey(hKey);

return TRUE;

}

#if 1

BOOL SetIP(LPCTSTR lpszAdapterName, int nIndex, LPCTSTR pIPAddress, LPCTSTR pNetMask, LPCTSTR pNetGate)

{

HKEY hKey;

std::string strKeyName = "SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\";

strKeyName= lpszAdapterName;

if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,

strKeyName.c_str(),

0,

KEY_WRITE,

&hKey) != ERROR_SUCCESS)

return FALSE;

char mszIPAddress[100];

char mszNetMask[100];

char mszNetGate[100];

strncpy(mszIPAddress, pIPAddress, 98);

strncpy(mszNetMask, pNetMask, 98);

strncpy(mszNetGate, pNetGate, 98);

int nIP, nMask, nGate;

nIP = strlen(mszIPAddress);

nMask = strlen(mszNetMask);

nGate = strlen(mszNetGate);

*(mszIPAddress nIP 1) = 0x00;

nIP= 2;

*(mszNetMask nMask 1) = 0x00;

nMask= 2;

*(mszNetGate nGate 1) = 0x00;

nGate= 2;

DWORD dwLastError = 0;

RegSetValueEx(hKey, "EnableDHCP", 0, REG_DWORD, (LPBYTE)&dwLastError, sizeof(DWORD));

RegSetValueEx(hKey, "IPAddress", 0, REG_MULTI_SZ, (unsigned char*)mszIPAddress, nIP);

RegSetValueEx(hKey, "SubnetMask", 0, REG_MULTI_SZ, (unsigned char*)mszNetMask, nMask);

RegSetValueEx(hKey, "DefaultGateway", 0, REG_MULTI_SZ, (unsigned char*)mszNetGate, nGate);

RegCloseKey(hKey);

RestartNetwork(lpszAdapterName);

return TRUE;

}

#endif

相关推荐

linux c语言 修改mac地址,C语言根据MAC地址查找网卡并修改IP地址相关推荐

  1. linux查看ip地址特定信息,grep正则表达式实现查找某个特定的IP地址

    下面会举几个在grep命令中使用正则表达式从一个文件中匹配到特定的IP地址.下面的正则表达式将会匹配IPV4的地址. 正则表达式匹配IP地址: 使用下面的正则表达式来匹配IPV4的地址,先来匹配从0. ...

  2. linux ssh ip地址命令,关于Linux:在ssh会话中查找客户机的IP地址

    我有一个脚本,由使用ssh登录到服务器的人运行. 有没有办法自动找出用户连接的IP地址? 当然,我可以问用户(这是一个程序员的工具,所以没问题),但如果我刚刚发现的话,会更酷. 建议转到服务器故障,不 ...

  3. linux网卡永久生效命令,Linux/CentOS服务器 一个网卡绑定多IP地址(永久设置)

    Linux/CentOS服务器 一个网卡绑定多IP地址(永久设置) 有时我们在使用 Linux 服务器时需要配置多个IP地址.如果要配置多个IP地址是否需要多块网卡呢?答案是否定的.以 CentOS ...

  4. linux双网卡绑定同一IP步骤,linux系统双网卡绑定单个IP地址

    双网卡绑定单个IP地址为了提供网络的高可用性,我们可能需要将多块网卡绑定成一块虚拟网卡对外提供服务,这样即使其中的一块物理网卡出现故障,也不会导致连接中断.多网卡绑. 为了提供网络的高可用性,我们可能 ...

  5. linux如何使用eth0网卡,Linux运维学习之如何取出网卡eth0的ip地址?

    Linux运维基础学习中,关于awk了解多少呢?咱们今天就来简单了解下如何取出网卡eth0的ip地址. hostname -I awk处理: 方法一: [root@oldboy files]# ifc ...

  6. C++ 获取本机所有的网卡配置、IP地址和Mac地址

    一台机器上可能不只有一个网卡,但每一个网卡只有一个MAC地址,而每一个网卡可能配置有多个IP地址:如平常的笔记本电脑中,就会有无线网卡和有线网卡(网线接口)两种:因此,如果要获得本机所有网卡的IP和M ...

  7. linux主ip地址 网络信息不可用,win10 安装虚拟机提示 主IP地址显示网络信息不可用...

    问题:在虚拟机详情下面显示 主ip地址:网络信息不可用 解决办法: 先root用户[root@dfhf~]#cd .. [root@dfhf/]#cd /etc/sysconfig/network-s ...

  8. Mac连Wi-Fi时显示:“wifi有自分配的ip地址将无法接入互联网”解决方法

    Mac连Wi-Fi时显示:"wifi有自分配的ip地址将无法接入互联网" 解决方法: 打开网络偏好设置 选择高级模式 点击[Wi-Fi],找到现在连接的无法上网的Wi-Fi,点击[ ...

  9. hp服务器修改ip地址,如何使用命令行更改hp 500x打印服务器的ip地址

    如何使用命令行更改hp 500x打印服务器的ip地址 1 恢复出厂设置 2 web方式无法打开 3 telnet ip(打印服务器默认地址192.0.0.192) 4 Telnet 配置示例 下面的示 ...

  10. Linux网卡配置虚拟IP地址

    虚拟ip作用: 配置虚拟ip也就是说一个网卡有多个ip地址,更方便多个网段之间进行测试使用! 缺点是当网卡坏掉之后 基于这个网卡的所有虚拟网卡都会失效!!! 步骤如下: 1.查看内网ip地址 [roo ...

最新文章

  1. (DML触发器)如何正确理解触发器的deleted表和inserted表(转)
  2. seaborn系列 (15) | 双变量关系图jointplot()
  3. Python__数据结构与算法——表、栈、队列
  4. ORACLE 将SQL的执行脚本返回值传给SHELL
  5. c语言的class,Objective-C中Class的本质
  6. 配置phoenix连接hbase_使用 Phoenix-4.11.0连接 Hbase 集群 ,并使用 JDBC 查询测试
  7. 移除List中的元素,你的姿势对了吗?
  8. 皮尔逊系数皮尔逊系数---K近算法之皮尔逊系数
  9. rapidxml解析类
  10. Android 模拟器安装及使用教程
  11. 【渝粤教育】电大中专药理学基础作业 题库
  12. 定向灰盒fuzzing工具BEACON
  13. 五阶魔方公式java_五阶魔方降阶法公式是什么?
  14. Codeforces - DZY Loves Sequences
  15. 3dsmax展UV,制作UV贴图,将物体的贴图放到一张图片上,贴图优化方式,UVW贴图制作全流程
  16. 转转转转转转转转转转转转转转转转转转转转转转转转转
  17. 优秀成绩标记—— 小王是班级干部,对于即将到来的三好学生评选,负责统计平均成绩超过85分的同学
  18. eclipse“随变”,随机变换eclipse启动界面
  19. CentOS 使用ifconfig没有显示ip
  20. WebSphere MQ 程序设计

热门文章

  1. 个推消息推送SDK通知栏铃声功能解析及使用攻略
  2. JAVA + Socket + Swing实现QQ聊天软件
  3. 基于SSM的酒店客房预订管理系统
  4. ipa文件生成扫码安装二维码的方法
  5. 以太网结构框架的学习
  6. 一维码二维码的生成及打印
  7. Windows10打印机共享无法连接到打印机:0x0000011b
  8. 陈强教授 计量经济学及机器学习等数据集、程序等相关资源
  9. 木木早教机器人说明书_机器人操作说明VS小孩使用指南
  10. java讲师助理面试题_面试Java开发师常问到的5个问题(附答案)