zoukankan      html  css  js  c++  java
  • 删除除指定网卡上除设置以外的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;
    }
  • 相关阅读:
    零基础入门深度学习(1)
    RxJava 复杂场景 Schedulers调度
    Kotlin 学习
    Cordova CrossWalk
    Android Studio工程导入另一个工程作为lib
    Android 数据存储相关
    Android Activity 生命周期中onStart()和onResume()的区别
    反省与规划
    Android 依赖注入 ButterKnife 基本使用
    Android Socket 相关
  • 原文地址:https://www.cnblogs.com/shya/p/2299385.html
Copyright © 2011-2022 走看看