获取系统完整版本号/本机ip/系统开机时间/当前时间/本机mac/网关mac

//获取系统版本号
//10.0.19041.1788
#define SystemVersionUrb "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion"
typedef ULONG(__stdcall* fRtlGetVersion)(PRTL_OSVERSIONINFOW lpVersionInfo);

VOID SetSystemVersionInfo(char* SystemVersionInfo)
{
    char tmp[0x10] = { 0 };
    ULONG ret = 0;
    ULONG UrbType = 0;
    ULONG UrbData = 0;
    LONG UrbDataSize = sizeof(REG_DWORD);
    HKEY hSubKey;
    fRtlGetVersion pRtlGetVersion = NULL;
    HMODULE hNtdll;
    RTL_OSVERSIONINFOW VersionInfo = { 0 };


    hNtdll = GetModuleHandleA("ntdll.dll");
    if (hNtdll)
    {
        pRtlGetVersion = (fRtlGetVersion)GetProcAddress(hNtdll, "RtlGetVersion");
        if (pRtlGetVersion)
        {
            VersionInfo.dwOSVersionInfoSize = sizeof(RTL_OSVERSIONINFOW);
            if (0 == pRtlGetVersion(&VersionInfo))
            {
                ret = RegOpenKeyA(HKEY_LOCAL_MACHINE,
                    SystemVersionUrb,
                    &hSubKey);


                if (hSubKey)
                {
                    //RegQueryValueA 在64位系统上,失效
                    ret = RegQueryValueExA(hSubKey,
                        "UBR",
                        NULL,
                        &UrbType,
                        (LPBYTE)&UrbData,
                        (LPDWORD)&UrbDataSize);
                    if (ret != ERROR_SUCCESS)
                    {
                        LogInfo("RegQueryValueA falis,error:%d\n", GetLastError());
                    }
#ifdef _DEBUG_
                    //
                    itoa(VersionInfo.dwMajorVersion, tmp, 10);
                    strcpy_s(SystemVersionInfo, MAX_PATH, tmp);
                    strcat_s(SystemVersionInfo, MAX_PATH, ".");
                    //
                    memset(tmp, 0, 0x10);
                    itoa(VersionInfo.dwMinorVersion, tmp, 10);
                    strcat_s(SystemVersionInfo, MAX_PATH, tmp);
                    strcat_s(SystemVersionInfo, MAX_PATH, ".");
                    //
                    memset(tmp, 0, 0x10);
                    itoa(VersionInfo.dwBuildNumber, tmp, 10);
                    strcat_s(SystemVersionInfo, MAX_PATH, tmp);
                    strcat_s(SystemVersionInfo, MAX_PATH, ".");
                    //                   
                    memset(tmp, 0, 0x10);
                    itoa(UrbData, tmp, 10);
                    strcat_s(SystemVersionInfo, MAX_PATH, tmp);
#endif
                }
            }
        }
    }
}

//获取本机ip
VOID SetLocalIp(char* LocalIp)
{
    WSADATA WSAData;
    PHOSTENT host;
    char* tmp = NULL;
    char hostname[MAX_PATH] = { 0 };
    if (!WSAStartup(MAKEWORD(2, 0), &WSAData))
    {
        if (!gethostname(hostname, sizeof(hostname)))
        {
            host = (PHOSTENT)gethostbyname(hostname);
            if (host)
            {
                tmp = inet_ntoa(*(struct in_addr*)*host->h_addr_list);
                if (tmp)
                {
                    strcpy(LocalIp, tmp);
                }
            }
        }
    }
}

//获取系统当前时间
VOID SetSystemCurrentTime(char* SystemCurrentTime)
{
    int num1 = 1000;
    int num2 = 1900;
    time_t nowTime;

    time(&nowTime);

    struct tm* timeInfo;
    timeInfo = localtime(&nowTime);

    sprintf(SystemCurrentTime, "%d/%d/%d %02d:%02d:%02d", timeInfo->tm_year + num2,
        timeInfo->tm_mon + 1, timeInfo->tm_mday, timeInfo->tm_hour,
        timeInfo->tm_min, timeInfo->tm_sec);
}

//获取系统启动时间
VOID SetSystemStartTime(char* SystemStartTime)
{
    ULONGLONG iRunTime = GetTickCount64();
    int num1 = 1000;
    int num2 = 1900;
    time_t nowTime;

    time(&nowTime);
    time_t SystemUpTime = nowTime - (iRunTime / num1);

    struct tm* timeInfo;
    timeInfo = localtime(&SystemUpTime);

    sprintf(SystemStartTime, "%d/%d/%d %02d:%02d:%02d", timeInfo->tm_year + num2,
        timeInfo->tm_mon + 1, timeInfo->tm_mday, timeInfo->tm_hour,
        timeInfo->tm_min, timeInfo->tm_sec);
}

//获取本机mac
VOID SetLocalMac(char* LocalMac)
{
    PIP_ADAPTER_INFO ipAdapterInfo = NULL;
    DWORD dwRetval = 0;
    ULONG ulOutBuffer = sizeof(IP_ADAPTER_INFO);

    ipAdapterInfo = (PIP_ADAPTER_INFO)malloc(sizeof(IP_ADAPTER_INFO));
    dwRetval = GetAdaptersInfo(ipAdapterInfo, &ulOutBuffer);

    if (dwRetval == ERROR_BUFFER_OVERFLOW)
    {
        free(ipAdapterInfo);
        ipAdapterInfo = (PIP_ADAPTER_INFO)malloc(ulOutBuffer);
        dwRetval = GetAdaptersInfo(ipAdapterInfo, &ulOutBuffer);
    }
    if (dwRetval == NO_ERROR)
    {
        sprintf(LocalMac, "%02X-%02X-%02X-%02X-%02X-%02X",
            ipAdapterInfo->Address[0],
            ipAdapterInfo->Address[1],
            ipAdapterInfo->Address[2],
            ipAdapterInfo->Address[3],
            ipAdapterInfo->Address[4],
            ipAdapterInfo->Address[5]);
    }

    if (ipAdapterInfo)
    {
        free(ipAdapterInfo);
    }
}

//通过ip获取对应的mac
VOID GetMacByIp(char* ip, char* mac)
{
    {
        ULONG uSize = 0;
        PMIB_IPNETTABLE pIpNetTable = nullptr;
        DWORD dwRet = GetIpNetTable(pIpNetTable, &uSize, false);
        if (dwRet == ERROR_INSUFFICIENT_BUFFER)
        {
            pIpNetTable = (PMIB_IPNETTABLE)malloc(uSize);
            if (NO_ERROR == GetIpNetTable(pIpNetTable, &uSize, false))
            {
                PMIB_IPNETROW pIpNetRow = pIpNetTable->table;
                in_addr inaddr;
                for (int k = 0; k < pIpNetTable->dwNumEntries; ++k)
                {

                    char szIp[32] = "", szMac[64] = "";
                    //IP地址
                    inaddr.S_un.S_addr = pIpNetRow[k].dwAddr;
                    strcpy(szIp, inet_ntoa(inaddr));

                    if (0 == strcmp(szIp, ip))
                    {
                        //过滤Mac为空的
                        if (pIpNetRow[k].dwPhysAddrLen <= 0) continue;
                        UCHAR bPhysAddr[MAXLEN_PHYSADDR] = { 0 };
                        if (0 == memcmp(pIpNetRow[k].bPhysAddr, bPhysAddr, pIpNetRow[k].dwPhysAddrLen)) continue;
                        //MAC地址
                        for (int j = 0; j < pIpNetRow[k].dwPhysAddrLen; j++)
                        {
                            if (lstrcmpA(szMac, "") == 0)
                                sprintf(szMac, "%02x", pIpNetRow[k].bPhysAddr[j]);
                            else
                                sprintf(szMac, "%s-%02x", szMac, pIpNetRow[k].bPhysAddr[j]);
                        }

                        sprintf(mac, "%s", szMac);
                        break;
                    }
                }
            }
        }
    }
}

//获取网关mac 
VOID SetGatewayMac(char* GatewayMac)
{
    PIP_ADAPTER_INFO ipAdapterInfo = NULL;
    DWORD dwRetval = 0;
    ULONG ulOutBuffer = sizeof(IP_ADAPTER_INFO);

    ipAdapterInfo = (PIP_ADAPTER_INFO)malloc(sizeof(IP_ADAPTER_INFO));
    dwRetval = GetAdaptersInfo(ipAdapterInfo, &ulOutBuffer);

    if (dwRetval == ERROR_BUFFER_OVERFLOW)
    {
        free(ipAdapterInfo);
        ipAdapterInfo = (PIP_ADAPTER_INFO)malloc(ulOutBuffer);
        dwRetval = GetAdaptersInfo(ipAdapterInfo, &ulOutBuffer);
    }
    if (dwRetval == NO_ERROR)
    {
        //gateway ip
        GetMacByIp(ipAdapterInfo->GatewayList.IpAddress.String, GatewayMac);
    }

    if (ipAdapterInfo)
    {
        free(ipAdapterInfo);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值