精华内容
下载资源
问答
  • 通常意义上来说,app 可以读取 mac 地址,但仅限于用户已经阅读了隐私内容,并且隐私内容中也告知了用户,app 会运行期间采集 wlan mac 地址等信息。所以如果没等用户同意隐私政策中的内容,就开始提前读取 mac 地址...

    通常意义上来说,app 可以读取 mac 地址,但仅限于用户已经阅读了隐私内容,并且隐私内容中也告知了用户,app 会运行期间采集 wlan mac 地址等信息。所以如果没等用户同意隐私政策中的内容,就开始提前读取 mac 地址,这是不合法的行为。工信部抽查中如果发现此类行为,app 会被通告整改,整改不力的将强制从应用市场下架,后果还是很严重的。

    但这里忽略一个问题,如果我们的 app 本身代码没有读取 mac 地址,那如何是好?自己的代码心中有数,实在不行可以全局搜索,如果第三方库偷偷摸摸的读取 mac 地址,这问题解决起来就有点棘手了。首先我们要复现出来确实存在读取 mac 地址的行为,这里最好的办法就是直接在 android framework 和 Linux kernel 层面截获读取 mac 地址的信息。当然还可以通过安装 VirtualXposed 的方法来定位。

    我这里使用 NanoPC-T4 单板搭载 Android 8.0 系统进行实验,对于有android源码来说才能这样定位问题,如果只是 app 开发者,建议参考使用VirtualXposed的方法。

    一、获取 mac 地址

    你要截获获取 mac 地址信息,当然先要知道哪些接口可以读取 mac 地址,可以在调用接口处加入 log 输出。

    1.方法一

    先拿到 WifiManager,接着获取到 WifiInfo,通过 WifiInfo 对象的 getMacAddress() 方法得到 mac 地址。

    WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
    WifiInfo winfo = wifi.getConnectionInfo();
    String mac =  winfo.getMacAddress();
    

    2.方法二

    使用 cat 命令,或者其他方式读取 /sys/class/net/wlan0/address 节点或 /sys/class/net/eth0/address 下的 mac 地址信息。

    cat /sys/class/net/wlan0/address
    cat /sys/class/net/eth0/address
    

    二、截获获取 mac 地址方法

    以下代码中+号表示需要增加的代码。

    1. WifiInfo getMacAddress()

    对于通过 WifiInfo 对象的 getMacAddress() 方法得到 mac 地址的方法,在 framework java 类 WifiInfo 中直接写入 log,可以清楚的知道那个 app 调用了此接口。

    /frameworks/base/wifi/java/android/net/wifi/WifiInfo.java

    ...
    + import android.util.Log;
    ...
        public String getMacAddress() {
    +        Log.d(TAG, "getMacAddress mac=" + mMacAddress, new RuntimeException("lhw"));
            return mMacAddress;
        }
    

    这会直接打印出调用堆栈的。比如下面是系统进程在调用(system_process) getMacAddress 方法。

    2020-12-08 10:56:13.166 490-810/system_process D/WifiInfo: getMacAddress mac=d4:12:43:86:69:88
        java.lang.RuntimeException: lhw
            at android.net.wifi.WifiInfo.getMacAddress(WifiInfo.java:478)
            at com.android.server.wifi.WifiStateMachine.syncRequestConnectionInfo(WifiStateMachine.java:1781)
            at com.android.server.wifi.WifiServiceImpl.getConnectionInfo(WifiServiceImpl.java:1752)
            at android.net.wifi.IWifiManager$Stub.onTransact(IWifiManager.java:320)
            at android.os.Binder.execTransact(Binder.java:697)
    

    2. cat 节点

    这要花一些功夫,要到 Linux 内核中找到供读取节点实现的方法。最后可以查到要在 net-sysfs.c 中相应修改。

    kernel/net/core/net-sysfs.c

    /* use same locking rules as GIFHWADDR ioctl's */
    static ssize_t address_show(struct device *dev, struct device_attribute *attr,
    			    char *buf)
    {
    	struct net_device *ndev = to_net_dev(dev);
    	ssize_t ret = -EINVAL;
    
    	read_lock(&dev_base_lock);
    	if (dev_isalive(ndev))
    		ret = sysfs_format_mac(buf, ndev->dev_addr, ndev->addr_len);
    	read_unlock(&dev_base_lock);
    +    printk(KERN_ALERT "mac address_show");
    	return ret;
    }
    

    编译系统整体烧写一下,再来运行app查看是否存在读取 mac 地址违规的问题。下面 mac address_show 这句 log 就表示有 app 读取了获取 mac 地址的节点了。下面的 Log 是通过串口读取的。
    在这里插入图片描述

    三、总结

    真实排查过程中发现,经过 360 加固后,首次运行 app 必现读取 mac 地址,当然这是违规行为了!最后更换为腾讯加固再试,问题得以解决。

    另外,我们使用的第三方sdk一定要注意,比如友盟在它的开发文档中有提到如何使用才能合规,我们需要参照 sdk 的指导去使用。

    最后,保护个人隐私任重而道远,需要开发者和监管部门共同努力!

    参考资料:

    1.https://blog.csdn.net/chaozhung_no_l/article/details/78329371

    2.https://www.jianshu.com/p/84127032d15a

    展开全文
  • 在嵌入式linux学习中无可避免也会遇到MAC,本文主要描述了如何通过操作OTP来读取嵌入式linux设备网卡中的MAC地址  1.1 适用范围  这里主要介绍读取网卡MAC地址的方法,适用于EasyARM-i.MX287A...
  • linux读取mac地址方法

    千次阅读 2018-03-16 20:55:25
    // 如果此网络接口被激活并且正在运行并且不是回环地址,则就是我们需要找的Mac地址 if(nets[i].flags().testFlag(QNetworkInterface::IsUp) && nets[i].flags().testFlag(QNetworkInterface::IsRunning) && !nets...
    QString getHostMacAddress()
    {
        QList<QNetworkInterface> nets = QNetworkInterface::allInterfaces();// 获取所有网络接口列表
        int nCnt = nets.count();
        QString strMacAddr = "";
        for(int i = 0; i < nCnt; i ++)
        {
            // 如果此网络接口被激活并且正在运行并且不是回环地址,则就是我们需要找的Mac地址
            if(nets[i].flags().testFlag(QNetworkInterface::IsUp) && nets[i].flags().testFlag(QNetworkInterface::IsRunning) && !nets[i].flags().testFlag(QNetworkInterface::IsLoopBack))
            {
                strMacAddr = nets[i].hardwareAddress();
                break;
            }
        }
        return strMacAddr;
    }
    

    展开全文
  • vc6.0读取MAC地址

    2017-11-14 11:05:23
    vc6.0实现MAC地址读取,保证软件在唯一电脑中运行。
  • 几种C#程序读取MAC地址的方法

    千次阅读 2017-09-18 14:22:02
    以下是收集的几种C#程序读取MAC地址的方法,示例中是读取所有网卡的MAC地址,如果仅需要读取其中一个,稍作修改即可。 1 通过IPConfig命令读取MAC地址 /// /// 根据截取ipconfig /all命令的输出流获取网卡...

    转自http://www.cnblogs.com/diulela/archive/2012/04/07/2436111.html

    以下是收集的几种C#程序读取MAC地址的方法,示例中是读取所有网卡的MAC地址,如果仅需要读取其中一个,稍作修改即可。

    1 通过IPConfig命令读取MAC地址

    /// <summary>
    ///  根据截取ipconfig /all命令的输出流获取网卡Mac
    /// </summary>
    /// <returns></returns>
    public  static  List < string >  GetMacByIPConfig()
    {
      List
    < string >  macs  = new  List < string > ();
      ProcessStartInfo startInfo = new ProcessStartInfo("ipconfig""/all");
      startInfo.UseShellExecute = false;
      startInfo.RedirectStandardInput = true;
      startInfo.RedirectStandardOutput = true;
      startInfo.RedirectStandardError = true;
      startInfo.CreateNoWindow = true;

      Process p 
    =  Process.Start(startInfo);
      // 截取输出流
      StreamReader reader  =  p.StandardOutput;
      string  line  =  reader.ReadLine();

      while  ( ! reader.EndOfStream)
      {
        if  ( ! string .IsNullOrEmpty(line))
        {
          line 
    =  line.Trim();

          if  (line.StartsWith( " Physical Address " ))
          {
            macs.Add(line);
          }
        }

        line 
    =  reader.ReadLine();
      }

      // 等待程序执行完退出进程
      p.WaitForExit();
      p.Close();
      reader.Close();
     
      return  macs;
    }

    2 通过WMI读取MAC地址

        1)该方法依赖WMI的系统服务,该服务一般不会被关闭;但如果系统服务缺失或者出现问题,该方法无法取得MAC地址。
     
    /// <summary>
    ///  通过WMI读取系统信息里的网卡MAC
    /// </summary>
    /// <returns></returns>
    public static  List < string >  GetMacByWMI()
    {
      List
    < string >  macs  = new  List < string > ();
      try
      {
        string  mac  = "" ;
        ManagementClass mc 
    = new  ManagementClass( " Win32_NetworkAdapterConfiguration " );
        ManagementObjectCollection moc 
    =  mc.GetInstances();
        foreach  (ManagementObject mo  in  moc)
        {
          if  (( bool )mo[ " IPEnabled " ])
          {
            mac 
    =  mo[ " MacAddress " ].ToString();
            macs.Add(mac
    );
          }
        }
        moc 
    = null ;
        mc 
    = null ;
      }
      catch
      {

      }

      return  macs;
    }

    3 通过NetworkInterface读取MAC地址

        1)如果当前的网卡是禁用状态(硬件处于硬关闭状态),取不到该网卡的MAC地址,(您可以通过禁用网卡进行试验)。
        2)如果当前启用了多个网卡,最先返回的地址是最近启用的网络连接的信息
     
    // 返回描述本地计算机上的网络接口的对象(网络接口也称为网络适配器)。
    public static  NetworkInterface[] NetCardInfo()
    {
      return  NetworkInterface.GetAllNetworkInterfaces();
    }

    /// <summary>
    ///  通过NetworkInterface读取网卡Mac
    /// </summary>
    /// <returns></returns>
    public static  List < string >  GetMacByNetworkInterface()
    {
      List
    < string >  macs  = new  List < string > ();
      NetworkInterface[] interfaces 
    =  NetworkInterface.GetAllNetworkInterfaces();
      foreach  (NetworkInterface ni  in  interfaces)
      {

        macs.Add(ni.GetPhysicalAddress().ToString());
      }
      return  macs;
    }

    4 通过SendARP读取MAC地址

    /// <summary>
    ///  通过SendARP获取网卡Mac
    ///  网络被禁用或未接入网络(如没插网线)时此方法失灵
    /// </summary>
    /// <param name="remoteIP"></param>
    /// <returns></returns>
    public static string  GetMacBySendARP( string  remoteIP)
    {
      StringBuilder macAddress 
    = new  StringBuilder();

      try
      {
        Int32 remote 
    =  inet_addr(remoteIP);

        Int64 macInfo 
    = new  Int64();
        Int32 length 
    = 6 ;
        SendARP(remote, 
    0 ref  macInfo,  ref  length);

        string  temp  =  Convert.ToString(macInfo,  16 ).PadLeft( 12 ' 0 ' ).ToUpper();

        int  x  = 12 ;
        for  ( int  i  = 0 ; i  < 6 ; i ++ )
        {
          if  (i  == 5 )
          {
            macAddress.Append(temp.Substring(x 
    - 2 2 ));
          }
          else
          {
            macAddress.Append(temp.Substring(x 
    - 2 2 + " - " );
          }
          x 
    -= 2 ;
        }

        return  macAddress.ToString();
      }
      catch
      {
        return  macAddress.ToString();
      }
    }

    [DllImport(
    " Iphlpapi.dll " )]
    private static extern int  SendARP(Int32 dest, Int32 host,  ref  Int64 mac,  ref  Int32 length);
    [DllImport(
    " Ws2_32.dll " )]
    private static extern  Int32 inet_addr( string  ip);

    5 从注册表读取MAC地址

        常规用户可通过读取注册表项Windows Genuine Advantage获取到物理网卡地址。

        1)如果注册表项被修改,则无法取得该MAC地址

     

    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows Genuine Advantage
    展开全文
  • 用纯JAVA语言编程读取MAC地址的实现

    千次阅读 2016-08-15 16:21:24
    本文介绍如何在WindowXP/NT/2000环境中,编写纯Java程序,执行外部命令IPCONFIG,并通过分析该命令的输入流而获得本机的MAC地址的编程方法。  1 引言  用Java编写的程序,可以很方便地运行在各种平台的环境...

      本文介绍如何在WindowXP/NT/2000环境中,编写纯Java程序,执行外部命令IPCONFIG,并通过分析该命令的输入流而获得本机的MAC地址的编程方法。

      1 引言

      用Java编写的程序,可以很方便地运行在各种平台的环境。但在实际的开发过程中,有时不得不涉及一些底层的编程。比如为了防止软件盗用,我们 希望软件只能在指定计算机上运行,所以需要程序读取该机区分于其它计算机的硬件特征,如MAC地址等。作为一种跨平台语言,给Java语言提出了挑战。本 文正是针对该问题,提出一种直接用纯Java语言,读去MAC地址的编程方法。

      我们知道,在每一个Java应用程序中都存在着一个与其运行环境相联系的Runtime对象。该对象可执行外部命令、查可用内存等。而多数操作 系统都提供有查询该机MAC地址的命令。如在Microsoft的操作系统中,命令IPCONFIG等。本文的思路是在程序中运行一个外部命令,将该命令 的运行结果作为一个流(Stream),读取并分析之,进而实现获取MAC地址的目的。

      2 Runtime类

      在每一个Java 应用程序里面,都有惟一的一个Runtime 对象。通过这个Runtime 对象,应用程序可以与其运行环境发生相互作用。

      一般不实例化一个Runtime对象。但是可以通过调用静态方法Runtime.getRuntime( )而获得对当前Runtime对象的引用。Runtime 类的大多数方法是实例方法。

      Runtime 对象的作用主要有:执行外部命令;返回空闲内存;运行垃圾回收器;加载动态库等。

      Applets和其他不可信赖的程序由于没有引起一个安全异常(SecurityException)而不能调用任何的Runtime方法。

      下面的例子演示了怎样使用Runtime 对象运行一个外部命令。

    以下是引用片段:
    : 
      Process process = Runtime.getRuntime().exec("cmd.exe /c dir"); 
      process.waitFor(); 
      :

      Runtime.getRuntime()返回当前应用程序的Runtime对象,该对象的exec()方法指示Java虚拟机创建一个子进程 执行指定的可执行程序,并返回与该子进程对应的Process对象实例。通过Process可以控制该子进程的执行或获取该子进程的信息。第二条语句的目 的是等待子进程完成后再往下执行。

      上面的程序在运行时会执行dir命令。如果在Windows95/98下,命令格式可以写成"command.exe /c dir"。开关/C指明后面跟随的字符串是命令,并在执行命令后关闭DOS 窗口。

      方法exec还可以打开一个不可执行的程序,但该文件存在关联的应用程序。以打开一个word文档Mydoc.doc文件为例,Java中可以有以下两种写法:

    以下是引用片段:
     exec(""cmd /E:ON /c start MyDoc.doc""); 
      exec(" c:Program FilesMicrosoft Officeofficewinword.exe .mydoc.doc");

      在第一种方式中,被执行的命令是start Mydoc.doc,开关E:ON 指定DOS 命令处理器允许命令扩展,而start 命令会开启一个单独的窗口执行所提供的命令。

      执行一个有标准输出的DOS命令,程序执行完后往往不会自动关闭,从而导致Java应用程序阻塞在waitfor( )。导致该现象的原因可能是该命令的输出比较多,而运行窗口的输出缓冲区不够大。解决的办法是,利用Java的Process类提供的方法让Java虚拟 机截获DOS运行的标准输出,在waitfor()命令之前读出该缓冲区的内容。以运行命令dir为例,典型的程序如下:

    以下是引用片段:
     : 
      String line; 
      Process process = Runtime.getRuntime().exec("cmd /c dir"); 
      BufferedReader bufferedReader = new BufferedReader ( new InputStreamReader(process.getInputStream()));
      while ( (line = bufferedReader.readLine()) != -1) System. out.println(line); 
      process.waitFor( ); 
      :3 Process

      Runtime.exec方法创建一个本机进程,并返回 Process 子类的一个实例,该实例可用来控制进程并获取相关信息。

      抽象类Process封装了一个进程(process),一个正在执行的程序。它主要被当作由Runtime类中的exec( )方法所创建的对象的类型的超类。在抽象类Process中,主要包含了如下一些抽象方法。

      InputStream getInputStream( ):返回一个从进程的out输出流中读输入的输入流。

      OutputStream getOutputStream( ):返回一个从进程的in输入流中写输出的输出流。

      int waitFor( ) throws InterruptedException:返回由进程返回的退出码。这个方法直到调用它的进程中止,才会返回。

      4 程序编写

      我们先来分析ipconfig/all的输出格式:

      图1
    点击放大此图片

      从图1中我们看到MAC地址包含的行为:“ Physical Address. . . . . . . . . : 00-10-DC-A9-0B-2C”。为了找到MAC地址,我们一行一行读取字符,只要找到字符串“ Physical Address. . . . . . . . . :”,就可以找到MAC地址了。下面是实现的程序片段:

    以下是引用片段:
    : 
      Process process = Runtime.getRuntime().exec("cmd /c ipconfig /all"); 
      BufferedReader bufferedReader = 
      new BufferedReader(new InputStreamReader (process.getInputStream())); 
      while ( (line=bufferedReader.readLine()) != null){ 
      if(line.indexOf("Physical Address. . . . . . . . . :") != -1){ 
      if(line.indexOf(":") != -1){ 
      physicalAddress = line.substring(line.indexOf(":")+2); 
      :

     

      在上面的程序中,为了读取命令输出的字符,利用子进程process生成了一个数据流缓冲区。

      依据上面的代码,我们编写了一个类ReadMAC,见下面程序的源代码:

    以下是引用片段:
    import java.io.*; 
      public class ReadMAC { 
      public static String physicalAddress = "read MAC error!"; 
      public ReadMAC() { 
      } 
      public static String checkPhysicalAddress(){ 
      try{ 
      String line; 
      Process process = Runtime.getRuntime().exec("cmd /c ipconfig /all"); 
      BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
      while ( (line=bufferedReader.readLine()) != null){ 
      if(line.indexOf("Physical Address. . . . . . . . . :") != -1){ 
      if(line.indexOf(":") != -1){ 
      physicalAddress = line.substring(line.indexOf(":")+2); 
      break; //找到MAC,推出循环 
      } 
      } 
      } 
      process.waitFor(); 
      }catch(Exception e){ 
      e.printStackTrace(); 
      } 
      return physicalAddress; 
      } 
      public static void main(String[] args) { 
      System.out.println("本机的MAC地址是: "+ ReadMAC.checkPhysicalAddress()); 
      } 
      }

      编译运行该程序的输出结果如图2所示。

      图2

      由于每一台计算机的MAC地址都不同,所以该程序在不同计算机上运行结果都会不一样。

      5 结束语

      作为一个跨平台语言,编写的JAVA程序一般都与硬件无关,因而能运行在不同的操作系统环境。但这给编写底层相关的程序时带来不便。

      Java的应用程序都存在着一个与其运行环境相联系的Runtime对象,利用该对象可执行外部命令,在WindowsXP/NT/2000环 境中的命令IPCONFIG的输出包含有MAC地址。本文编写的Java程序,执行外部命令IPCONFIG,并通过分析该命令的输入流而获得本机的 MAC地址。由于IPCONFIG命令是操作系统命令,所以该方法既方便又可靠。

      以上讨论的程序适合于Windows XP/NT/2000操作系统,因为它是基于该操作系统的命令IPCONFIG格式的。由于不同操作系统读取MAC地址的命令、以及命令输出格式的不同, 所以该程序不能直接运用到其它系统。要移植到其它系统只需针对命令的输出格式稍作修改。

    展开全文
  • 有些软件还要根据Mac地址来判定当前用户以前是否登录过。下面将一一介绍获取这些手机状态信息的方法。 1 通过build获取手机硬件信息 运用反射获取Build信息,然后从build中得到对应字段的值。这种情况适用于获取...
  • .net / C#程序读取MAC地址的几种方法

    千次阅读 2016-04-14 15:06:43
    1 通过IPConfig命令读取MAC地址   /// /// 根据截取ipconfig /all命令的输出流获取网卡Mac /// /// publicstatic Liststring> GetMacByIPConfig() {  Liststring> macs =new Liststring>();  ProcessStartInfo...
  • 通过ADB口,实现设置和读取MAC地址

    千次阅读 2015-06-04 14:09:14
    read and write MAC through ADB @echo designed by Herman.Xu color 0A echo===========Start to modify MAC address=...设置MAC地址输入w,读取MAC地址输入r set /p choice=输入开启的版本(w r): if "%choice%"==
  • labview查询电脑MAC地址

    2018-09-16 22:52:06
    labview获取mac地址
  • Delphi获取MAC地址

    2018-11-21 08:35:09
    Delphi获取MAC地址
  • JS获取计算机mac地址以及IP和用户名的实现方法,只适用于IE且activeX开启
  • eeprom分区, 读取MAC地址

    千次阅读 2014-08-26 17:11:28
    #include int main(void) {  int fd;  int ret;  char mac[6]={0};  char buf[16]={0};  int i;    fd = open(FACT_NAME, O_RDWR, 0666);  if (fd  {
  • C#读取MAC地址方式

    千次阅读 2015-05-13 01:41:58
    1 通过IPConfig命令读取MAC地址 /// /// 根据截取ipconfig /all命令的输出流获取网卡Mac /// /// publicstatic Liststring> GetMacByIPConfig() {  Liststring> macs =new Liststring>();  Proc
  • VB6 获取mac地址

    2017-03-10 11:40:27
    VB6 获取mac地址,仅供学习使用
  • 每个网卡都有一个独一无二的mac地址,一般这个地址就存放在一个e2prom中,这里就是分析一个网卡初始化过程中,怎么从这个e2prom中读取mac地址。 首先这里的e2prom和cpu的i2c控制器相连接,也就是说最后访问这个...
  • 获取利用android标准API获取mac地址,注意加权限, /**   * 读取文件内容   */   private void readFileMac() {   File usbFile = new File("mnt/sda/sda1/kvUpdateMac/usbUpdateMac.txt...
  • labview获取MAC地址

    热门讨论 2013-02-01 21:18:45
    labview获取MAC地址,可以用于注册软件
  • WinCE 读取Mac地址实践测试

    千次阅读 2014-02-13 17:02:18
    由于错误的理解WinCE 读取Mac地址就是在注册表中所以怎么读都读不到数据,在此记录测试过程。1、通过注册表中读取Mac地址 ; 2、通过SendARP获取MAC地址。
  • 1,待研究 有相同问题的同学,可私信我,我们一起交流。
  • Delphi获取网卡mac地址的pas文件,关键部分函数全在里面,方便使用和调试,xp系统下有点bug,可能获取不到mac地址,原因我没细研究
  • 在嵌入式linux学习中无可避免也会遇到MAC,本文主要描述了如何通过操作OTP来读取嵌入式linux设备网卡中的MAC地址  1.1 适用范围  这里主要介绍读取网卡MAC地址的方法,适用于EasyARM-i.MX287A...
  • 一键查询MAC地址

    2013-01-19 22:50:54
    MAC地址,这是一个自己写的批处理,大家一起分享学习。
  • labview获取MAC

    2018-10-31 16:05:22
    基于labview,可以获取中英文系统mac,达到软件和硬件绑定,初级保护软件版权
  • vs2010获取网卡mac

    2018-08-22 14:20:23
    通过代码获取网卡信息,可以用来参考的,亲测试过,可以用。
  • Linux下读取默认MAC地址

    千次阅读 2016-07-04 07:27:46
    MAC(Media Access Control,介质访问控制)计算机通过它来定义并识别网络设备的位置。在嵌入式linux学习中不可避免也会遇到MAC,本文主要描述了如何通过操作OTP来读取嵌入式linux设备网卡中的MAC地址
  • 使用 ESP32 ,设置(读取)设备默认的 Wi-Fi 的 MAC 地址有多种方式,如下: 1、使用 AT 指令来设置(读取) Wi-Fi 的 MAC 地址 通过 AT+CIPSTAMAC=“22:33:44:55:66:77” 来设置 Wi-Fi Station 的 MAC 地址。 ...
  • Linux下读取网卡默认MAC地址的方法,修改和配置网卡地址用途等
  • 读取MAC地址

    千次阅读 2006-07-19 16:15:00
    读取MAC地址 对主机惟一标识,最简单的方法就是利用MAC地址。这个地址是全球惟一的,并且是固化到网卡上的,所以可以放心的使用。下面就是一段读取MAC地址的简单c代码(在xp sp2 + vc++ 7.0下调试通过):#include #...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 82,288
精华内容 32,915
关键字:

怎么读取mac地址