删除除指定网卡上除设置以外的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;
}

 

posted @ 2011-12-23 14:29  哆啦无梦  阅读(823)  评论(0编辑  收藏  举报