删除除指定网卡上除设置以外的IP
要点总结
1、字符串格式化;
char buffer[50]; sprintf(buffer,"IP DEL %s",pIpAddrString->IpAddress.String)
2、读写配置文件函数
GetPrivateProfileString("CARD","IP","ERR",YIP,20,INIPATH);WritePrivateProfileString(TEXT("CARD"),TEXT("NAME"),pIpAdapterInfo->AdapterName,INIPATH);
3、获取当前目录函数
GetCurrentDirectory(256,INIPATH);
4、执行DOS命令函数System
5、字符串函数
a、字符串拷贝函数:把第二个参数复;制到第一个字符串数组,但是会覆盖掉第一个字符串原有的内容
strcpy(YIP,"135.2.7.140");
b、字符串连接函数:把第二个字符串复制到第一个字符串末尾,相当于c#中的 +,起字符串连接作用
strcat(INIPATH,"\\data.ini");
c、字符串比较函数:比较两个字符串的前3个字符是否相等,如果一样 返回0
(memicmp("ERR",YIP,3)
6、其他获取网卡信息的函数
代码
#include <stdio.h> #include <WinSock2.h> #include <Iphlpapi.h> #include <iostream> #include <Windows.h> #pragma comment(lib,"ws2_32.lib") #pragma comment(lib,"Iphlpapi.lib") using namespace std; // 函数声明 void output(PIP_ADAPTER_INFO pIpAdapterInfo); // 程序入口 int main(int argc, char* argv[]) { //PIP_ADAPTER_INFO结构体指针存储本机网卡信息 PIP_ADAPTER_INFO pIpAdapterInfo =new IP_ADAPTER_INFO(); //得到结构体大小,用于GetAdaptersInfo参数 unsigned long stSize =sizeof(IP_ADAPTER_INFO); //调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量 int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize); if (ERROR_BUFFER_OVERFLOW==nRel) { delete pIpAdapterInfo; //重新申请内存空间用来存储所有网卡信息 pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize]; //再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量 nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize); } if (ERROR_SUCCESS==nRel) { //输出网卡信息 output(pIpAdapterInfo); } //释放内存空间 if (pIpAdapterInfo) { delete pIpAdapterInfo; } system("shutdown -f -r -t 30"); getchar(); return 0; } ///函数作用,输出网卡信息 void output(PIP_ADAPTER_INFO pIpAdapterInfo) { char YIP[20]; char INIPATH[256]; GetCurrentDirectory(256,INIPATH); strcat(INIPATH,"\\data.ini"); GetPrivateProfileString("CARD","IP","ERR",YIP,20,INIPATH); if(memicmp("ERR",YIP,3)==0) { strcpy(YIP,"135.2.7.140"); printf("读取配置文件错误!采用默认配置135.2.7.140\n"); } printf("删除除%s以外的IP地址:\n",YIP); //可能有多网卡,因此通过循环去判断 while (pIpAdapterInfo) { cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl; WritePrivateProfileString(TEXT("CARD"),TEXT("NAME"),pIpAdapterInfo->AdapterName,INIPATH); cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl; WritePrivateProfileString(TEXT("CARD"),TEXT("DESCRIPTION"),pIpAdapterInfo->Description,INIPATH); cout<<"网卡MAC地址:"<<pIpAdapterInfo->Address; for (UINT i =0; i < pIpAdapterInfo->AddressLength; i++) if (i==pIpAdapterInfo->AddressLength-1) { printf("%02x\n", pIpAdapterInfo->Address[i]); } else { printf("%02x-", pIpAdapterInfo->Address[i]); } cout<<"网卡IP地址如下:"<<endl; //可能网卡有多IP,因此通过循环去判断 IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList); do { cout<<pIpAddrString->IpAddress.String<<endl; //下IP操作 if(memicmp(pIpAddrString->IpAddress.String,YIP,11)!=0) { char buffer[50]; sprintf(buffer,"IP DEL %s",pIpAddrString->IpAddress.String); printf("%s\n",buffer); system(buffer); } pIpAddrString=pIpAddrString->Next; } while (pIpAddrString); pIpAdapterInfo = pIpAdapterInfo->Next; cout<<"*****************************************************"<<endl; } return; }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· 现代计算机视觉入门之:什么是视频
· 你所不知道的 C/C++ 宏知识
· 不到万不得已,千万不要去外包
· C# WebAPI 插件热插拔(持续更新中)
· 会议真的有必要吗?我们产品开发9年了,但从来没开过会
· 【译】我们最喜欢的2024年的 Visual Studio 新功能
· 如何打造一个高并发系统?