zoukankan      html  css  js  c++  java
  • C/C++获取本机名+本机IP+本机MAC

    本机名、IP、MAC都是一些比较常用网络参数,怎么用C/C++获取呢?

    研究了两三个小时...

    需要说明的都在代码注释里

      1 #include <stdio.h>
      2 #include <Windows.h>
      3 #include <IPHlpApi.h>
      4 
      5 #pragma comment(lib,"ws2_32.lib")    // Socket静态库,取本机IP用
      6 #pragma comment(lib,"IPHlpApi.lib")    // 发送ARP报文要用的静态库,取MAC用
      7 
      8 /*
      9     取主机名
     10     成功返回主机名,失败返回NULL.
     11 */
     12 char *MyGetHostName(void);
     13 
     14 /*
     15     取本机IP
     16     成功返回本机IP,失败返回NULL.
     17 */
     18 char *MyGetHostIp(void);
     19 
     20 /*
     21     取本机MAC
     22     成功返回本机MAC,失败返回NULL.
     23 */
     24 char *MyGetHostMac(void);
     25 
     26 int main(void)
     27 {
     28     char *lpName = NULL;
     29     char *lpIp = NULL;
     30     char *lpMac = NULL;
     31 
     32     lpName = MyGetHostName();
     33     lpIp = MyGetHostIp();
     34     lpMac = MyGetHostMac();
     35     printf("PCName : %s
    ", lpName);
     36     printf("IPAddr : %s
    ", lpIp);
     37     printf("M A C  : %s
    ", lpMac);
     38     
     39     free(lpName);
     40     free(lpIp);
     41     free(lpMac);
     42     system("pause");
     43     return 0;
     44 }
     45 
     46 char *MyGetHostName(void)
     47 {
     48     char *lpName = NULL;
     49     DWORD dwLen = 0;
     50 
     51     GetComputerName(NULL, &dwLen);
     52     lpName = (char *)malloc(dwLen);
     53     memset(lpName, 0, dwLen);
     54     GetComputerName(lpName, &dwLen);
     55     return (lpName ? lpName : NULL);
     56 }
     57 
     58 char *MyGetHostIp(void)
     59 {
     60     char *ip = NULL;
     61     WSADATA wsaData = { 0 };
     62     struct hostent *phostinfo = NULL;
     63     
     64     ip = (char *)malloc(sizeof(char)* 16);
     65     memset(ip, 0, 16);
     66     WSAStartup(MAKEWORD(2, 2), &wsaData);
     67     phostinfo = gethostbyname("");
     68     lstrcpyn(ip, inet_ntoa(*(struct in_addr *)(*phostinfo->h_addr_list)), 16);
     69     WSACleanup();
     70     if (ip)
     71     {
     72         return ip;
     73     }
     74     else {
     75         free(ip);
     76         return NULL;
     77     }
     78 }
     79 
     80 char *MyGetHostMac(void)
     81 {
     82     IPAddr ip = inet_addr(MyGetHostIp());
     83     PVOID *pMac = NULL;
     84     ULONG MacAddr[2] = { 0 };    // Mac地址长度6字节
     85     ULONG uMacSize = 6;
     86     
     87     // 通过ARP报文响应获取MAC地址
     88     DWORD dwRet = SendARP(ip, 0, &MacAddr, &uMacSize);
     89     if (dwRet == NO_ERROR)
     90     {
     91         BYTE *bPhyAddr = (BYTE *)MacAddr;
     92         
     93         if (uMacSize)
     94         {
     95             char *sMac = (char *)malloc(sizeof(char)* 18);
     96             int n = 0;
     97 
     98             memset(sMac, 0, 18);
     99             sprintf_s(sMac, (size_t)18, "%.2X-%.2X-%.2X-%.2X-%.2X-%.2X", (int)bPhyAddr[0], (int)bPhyAddr[1], (int)bPhyAddr[2], (int)bPhyAddr[3], (int)bPhyAddr[4], (int)bPhyAddr[5]);
    100             return sMac;
    101         }
    102         else
    103         {
    104             printf("Mac地址获取失败!
    ");
    105         }
    106     }
    107     else
    108     {
    109         printf("ARP报文发送失败:%d
    ",dwRet);
    110     }
    111     return NULL;
    112 }

    效果图:

  • 相关阅读:
    Linux 配置 nginx + php
    Laravel 网站项目目录结构规划
    配置服务器 Ubuntu 记录+踩坑
    JavaScript 单例,Hash,抛异常
    易理解版八皇后
    获取bing每日图片
    OpenGL 学习笔记 01 环境配置
    [瞎JB写] C++多态
    c++ initialize_list
    最长上升子序列的二分优化
  • 原文地址:https://www.cnblogs.com/biaoge140/p/9327047.html
Copyright © 2011-2022 走看看