asp.net core 获取 MacAddress 地址方法示例

本文告诉大家如何在 dotnet core 获取 Mac 地址

因为在 dotnetcore 是没有直接和硬件相关的,所以无法通过 WMI 的方法获取当前设备的 Mac 地址

但是在 dotnet core 可以使用下面的代码拿到本机所有的网卡地址,包括物理网卡和虚拟网卡

IPGlobalProperties computerProperties = IPGlobalProperties.GetIPGlobalProperties();
   NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();

   Console.WriteLine("Interface information for {0}.{1}  ",
    computerProperties.HostName, computerProperties.DomainName);
   if (nics == null || nics.Length < 1)
   {
    Console.WriteLine(" No network interfaces found.");
    return;
   }

   Console.WriteLine(" Number of interfaces .................... : {0}", nics.Length);
   foreach (NetworkInterface adapter in nics)
   {
    Console.WriteLine();
    Console.WriteLine(adapter.Name + "," + adapter.Description);
    Console.WriteLine(String.Empty.PadLeft(adapter.Description.Length, '='));
    Console.WriteLine(" Interface type .......................... : {0}", adapter.NetworkInterfaceType);
    Console.Write(" Physical address ........................ : ");
    PhysicalAddress address = adapter.GetPhysicalAddress();
    byte[] bytes = address.GetAddressBytes();
    for (int i = 0; i < bytes.Length; i++)
    {
     // Display the physical address in hexadecimal.
     Console.Write("{0}", bytes[i].ToString("X2"));
     // Insert a hyphen after each byte, unless we are at the end of the
     // address.
     if (i != bytes.Length - 1)
     {
      Console.Write("-");
     }
    }

    Console.WriteLine();
   }

运行代码,下面是控制台

Interface information for lindexi.github
    Number of interfaces .................... : 6

    Hyper-V Virtual Ethernet Adapter #4
    ===================================
    Interface type .......................... : Ethernet
    Physical address ........................ : 00-15-5D-96-39-03

    Hyper-V Virtual Ethernet Adapter #3
    ===================================
    Interface type .......................... : Ethernet
    Physical address ........................ : 1C-1B-0D-3C-47-91

    Software Loopback Interface 1
    =============================
    Interface type .......................... : Loopback
    Physical address ........................ :

    Microsoft Teredo Tunneling Adapter
    ==================================
    Interface type .......................... : Tunnel
    Physical address ........................ : 00-00-00-00-00-00-00-E0

    Hyper-V Virtual Ethernet Adapter
    ================================
    Interface type .......................... : Ethernet
    Physical address ........................ : 5A-15-31-73-B0-9F

    Hyper-V Virtual Ethernet Adapter #2
    ===================================
    Interface type .......................... : Ethernet
    Physical address ........................ : 5A-15-31-08-13-B1

但是可以看到里面有很多不需要使用的网卡,从 堆栈 网找到的方法获取当前有活跃的 ip 的网卡可以通过先判断是不是本地巡回网络等,然后判断有没有网络

foreach (NetworkInterface adapter in nics.Where(c =>
    c.NetworkInterfaceType != NetworkInterfaceType.Loopback && c.OperationalStatus == OperationalStatus.Up))

获取当前的网卡有没 ip 有 ip 才是需要的

IPInterfaceProperties properties = adapter.GetIPProperties();

    var unicastAddresses = properties.UnicastAddresses;
    foreach (var temp in unicastAddresses.Where(temp =>
     temp.Address.AddressFamily == AddressFamily.InterNetwork))
    {
     // 这个才是需要的网卡
    }

简单输出网卡使用 adapter.GetPhysicalAddress().ToString() 输出,如果需要输出带连接的请使用 GetAddressBytes 然后自己输出

下面的代码是我抽出来的,可以直接使用

public static void GetActiveMacAddress(string separator = "-")
  {
   NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();

   //Debug.WriteLine("Interface information for {0}.{1}  ",
   // computerProperties.HostName, computerProperties.DomainName);
   if (nics == null || nics.Length < 1)
   {
    Debug.WriteLine(" No network interfaces found.");
    return;
   }

   var macAddress = new List<string>();

   //Debug.WriteLine(" Number of interfaces .................... : {0}", nics.Length);
   foreach (NetworkInterface adapter in nics.Where(c =>
    c.NetworkInterfaceType != NetworkInterfaceType.Loopback && c.OperationalStatus == OperationalStatus.Up))
   {
    //Debug.WriteLine("");
    //Debug.WriteLine(adapter.Name + "," + adapter.Description);
    //Debug.WriteLine(string.Empty.PadLeft(adapter.Description.Length, '='));
    //Debug.WriteLine(" Interface type .......................... : {0}", adapter.NetworkInterfaceType);
    //Debug.Write(" Physical address ........................ : ");
    //PhysicalAddress address = adapter.GetPhysicalAddress();
    //byte[] bytes = address.GetAddressBytes();
    //for (int i = 0; i < bytes.Length; i++)
    //{
    // // Display the physical address in hexadecimal.
    // Debug.Write($"{bytes[i]:X2}");
    // // Insert a hyphen after each byte, unless we are at the end of the
    // // address.
    // if (i != bytes.Length - 1)
    // {
    //  Debug.Write("-");
    // }
    //}

    //Debug.WriteLine("");

    //Debug.WriteLine(address.ToString());

    IPInterfaceProperties properties = adapter.GetIPProperties();

    var unicastAddresses = properties.UnicastAddresses;
    if (unicastAddresses.Any(temp => temp.Address.AddressFamily == AddressFamily.InterNetwork))
    {
     var address = adapter.GetPhysicalAddress();
     if (string.IsNullOrEmpty(separator))
     {
      macAddress.Add(address.ToString());
     }
     else
     {
      macAddress.Add(string.Join(separator, address.GetAddressBytes()));
     }
    }
   }
  }

上面的方法不仅是在 dotnet core 可以使用,在 dotnet framework 程序同样调用,但是在 dotnet framework 还可以通过 WMI 获取

在 dotnet framework 使用 WMI 获取 MAC 地址方法

var managementClass = new ManagementClass("Win32_NetworkAdapterConfiguration");
     var managementObjectCollection = managementClass.GetInstances();
     foreach (var managementObject in managementObjectCollection.OfType<ManagementObject>())
     {
      using (managementObject)
      {
       if ((bool) managementObject["IPEnabled"])
       {
        if (managementObject["MacAddress"] == null)
        {
         return string.Empty;
        }

        return managementObject["MacAddress"].ToString().ToUpper();
       }
      }
     }

输出的格式是 5A:15:31:73:B0:9F 同时输出是一个网卡

NetworkInterface.GetPhysicalAddress Method (System.Net.NetworkInformation)

PhysicalAddress Class (System.Net.NetworkInformation)

c# - .NET Core 2.x how to get the current active local network IPv4 address? - Stack Overflow

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Mac中体验ASP.NET 5 beta2的K gen代码生成

    ASP.NET 5 beta2中增加了一个新特性,可以通过K命令生成MVC的代码,比如:k gen controller -name HomeController. 如果你用的是Visual Studio,自然对这个功能不以为然,因为Visual Studio帮你干了. 如果你用的是Mac,没有Visual Studio,也没有K Studio,不想自虐手写本可以通过模板生成的MVC代码,这个特性就值得关注了. 由于对Mac下写ASP.NET代码垂涎已久,一发现这个特性,就立马想尝试一下.但网上

  • asp.net 虚拟主机时常出现MAC验证失败错误之解决方法

    出现错误: "/"应用程序中的服务器错误. -------------------------------------------------------------------------------- 验证视图状态 MAC 失败.如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 validationKey 和验证算法.不能在群集中使用 AutoGenerate. 说明: 执行当前 Web 请求期间,出现未处理的异常.请检查堆栈跟踪信息

  • ASP.Net获取客户端网卡MAC的小例子

    复制代码 代码如下: using System.Text.RegularExpressions;using System.Diagnostics;public class test{        public test        {}        public static string GetCustomerMac(string IP) //para IP is the clients IP         {                string dirResults="&qu

  • asp.net根据计算机MAC地址限定每台机子只能领取一次账号

    下面开始吧: 首先写一个简单的前台代码: 复制代码 代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "

  • 详解Asp.Net Core 发布和部署( MacOS + Linux + Nginx )

    前言 在上篇文章中,主要介绍了 Dotnet Core Run 命令,这篇文章主要是讲解如何在Linux中,对 Asp.Net Core 的程序进行发布和部署. 目录 新建一个 WebApp 项目 发布到 Linux,Mac OS 使用 Nginx 进行反向代理 新建一个 WebApp 项目 在 Asp.Net Core 项目中,我们使用 dotnet new -t WebApp 命令和创建一个新的空的 Web 应用程序. 以下是我在 Mac 中的截图: 主要是用以下几个命令: mkdir He

  • asp.net core 获取 MacAddress 地址方法示例

    本文告诉大家如何在 dotnet core 获取 Mac 地址 因为在 dotnetcore 是没有直接和硬件相关的,所以无法通过 WMI 的方法获取当前设备的 Mac 地址 但是在 dotnet core 可以使用下面的代码拿到本机所有的网卡地址,包括物理网卡和虚拟网卡 IPGlobalProperties computerProperties = IPGlobalProperties.GetIPGlobalProperties(); NetworkInterface[] nics = Net

  • ASP.NET Core获取正确查询字符串参数示例

    目录 前言 表单域 解决方案 可空类型 [BindRequired] 属性 前言 有网友在交流群中询问,如何获取查询字符串参数: 默认情况下,ASP.NET Core 的模型绑定以键值对的形式从 HTTP 请求中的以下列表中指示的顺序扫描源并获取数据: 表单域 请求正文 路由数据 查询字符串参数 上传的文件 因此,不需要任何配置,即可在 Action 中获取到查询字符串参数: [HttpGet] public string Demo(int id, int price) { return $"i

  • 如何在ASP.NET Core中使用Session的示例代码

    ASP.NET Core 是一个跨平台,开源的,轻量级,高性能 并且 高度模块化的web框架,Session 可以实现用户信息存储从而可以在同一个客户端的多次请求之间实现用户追踪,在 ASP.Net Core 中可以使用 Microsoft.AspNetCore.Session 中间件来启用 Session 机制. 中间件的价值在于可以在 request -> response 的过程中做一些定制化的操作,比如说:监视数据,切换路由,修改流转过程中的消息体,通常来说:中间件是以链式的方式灌入到

  • ASP.NET Core托管模型CreateDefaultBuilder()方法

    让我们讨论一下 CreateDefaultBuilder() 方法究竟对配置和设置 Web 服务器的作用.从托管的角度来看,一个ASP.NET Web 应用程序可以通过两种方式托管,即进程托管(InProcess)或进程外托管(OutOfProcess). 注:当我们使用任何模板创建新 ASP.NET Core Web 应用程序时,默认情况下,使用InProcess 托管创建项目文件,该托管用于在 IIS 或 IIS Express 方案中托管应用程序. 如何验证是否在进程内? 为了验证上面的观

  • ASP.NET Core中的Controller使用示例

    ASP.NET CORE出现之前我们实现的Controller,MVC都继承自Controller基类,WebApi的话继承自ApiController.现在ASP.NET CORE把MVC跟WebApi合并了,已经不再区分MVC或者WebApi.ASP.NET CORE的Controller继承结构也发生了变化.我们看其他示例的时候会发现有些继承自Controller有些继承自ControllerBase.事实上ControllerBase是Controller的基类.也就是说如果你继承自Co

  • ASP.NET Core Authentication认证实现方法

    追本溯源,从使用开始 首先看一下我们通常是如何使用微软自带的认证,一般在Startup里面配置我们所需的依赖认证服务,这里通过JWT的认证方式讲解 public void ConfigureServices(IServiceCollection services) { services.AddAuthentication(authOpt => { authOpt.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;

  • ASP.NET编程获取网站根目录方法小结

    本文实例讲述了ASP.NET编程获取网站根目录方法.分享给大家供大家参考,具体如下: 获取网站根目录的方法有几种如: Server.MapPath(Request.ServerVariables["PATH_INFO"]) Server.MapPath("/") Server.MapPath("")//当前代码文件所在的目录路劲 Server.MapPath(".") Server.MapPath("../"

  • ASP.NET Core 实现基本认证的示例代码

    HTTP基本认证 在HTTP中,HTTP基本认证(Basic Authentication)是一种允许网页浏览器或其他客户端程序以(用户名:口令) 请求资源的身份验证方式,不要求cookie,session identifier.login page等标记或载体. - 所有浏览器据支持HTTP基本认证方式 - 基本身证原理不保证传输凭证的安全性,仅被based64编码,并没有encrypted或者hashed,一般部署在客户端和服务端互信的网络,在公网中应用BA认证通常与https结合 http

  • 在IIS上部署ASP.NET Core Web API的方法步骤

    对于本文,我想与您分享有关如何在IIS上部署ASP.NET Core Web API的指南.我将指导您安装Visual Studio 2019,.NET Core Runtime 3.0.我还确保我逐步引导您在服务器(Web IIS)中启用它,使用no受管代码选项创建新的应用程序池,创建ASP.NET Core Web API项目以及发布ASP.NET Core Web API. 了解并遵循正确的步骤来准备开发和部署环境后,在IIS上部署ASP.NET Core Web API就是一件容易的事.

  • ASP.NET Core基础之Main方法讲解

    为什么ASP.NET Core采用Main方法? 需要记住的最重要的一点是,ASP.NET Core Web 应用程序最初作为控制台应用程序启动,Main() 方法是应用程序的入口点.因此,当我们执行ASP.NET Core Web应用程序时,首先它寻找 Main() 方法,这是执行开始的方法.然后,Main()方法将ASP.NET配置并启动它.此时,应用程序将成为ASP.NET Core Web应用程序. 如果进一步查看 Main() 方法的正文,则会发现它通过将命令行参数 args 作为参数

随机推荐