2019-10-5-dotnet-core-获取-MacAddress-地址方法
| title | author | date | CreateTime | categories |
|---|---|---|---|---|
|
dotnet core 获取 MacAddress 地址方法
|
lindexi
|
2019-10-05 10:44:10 +0800
|
2019-02-15 14:38:55 +0800
|
dotnet
|
本文告诉大家如何在 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 然后自己输出
我将代码作为 SourceYard 的包发布到 Nuget 通过在 Nuget 搜 lindexi.src.MacAddress.Source 就可以下载,因为这是一个源代码包,不会多引用一个程序集,也就是这个库会编译到相同的一个 dll 或 exe 这样可以提高运行性能。
下面的代码是我抽出来的,可以直接使用,建议使用 Nuget 包,而不是复制代码,因为我可能发现下面的代码需要修改,但是如果小伙伴复制了我的代码,我不知道有哪些小伙伴复制了,修改了也无法告诉他
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 同时输出是一个网卡
分开虚拟网卡和物理网卡方法请看 如何利用c#找到物理网卡的Mac地址 - huangtengxiao
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
2019-10-5-dotnet-core-获取-MacAddress-地址方法的更多相关文章
- dotnet core 获取 MacAddress 地址方法
本文告诉大家如何在 dotnet core 获取 Mac 地址 因为在 dotnetcore 是没有直接和硬件相关的,所以无法通过 WMI 的方法获取当前设备的 Mac 地址 但是在 dotnet c ...
- 【转载】获取MAC地址方法大全
From:http://blog.csdn.net/han2814675/article/details/6223617 Windows平台下用C++代码取得机器的MAC地址并不是一件简单直接的事情. ...
- dotnet core的下载地址 以及sdk和runtime的 version 简单说明
1. dotnet core 2.1 的下载地址 https://dotnet.microsoft.com/download/dotnet-core/2.1 2. dotnet core 2.2 的下 ...
- js获取IP地址方法总结_转
js代码获取IP地址的方法,如何在js中取得客户端的IP地址.原文地址:js获取IP地址的三种方法 http://www.jbxue.com/article/11338.html 1,js取得IP地址 ...
- js获取IP地址方法总结
js代码获取IP地址的方法,如何在js中取得客户端的IP地址.原文地址:js获取IP地址的三种方法 http://www.jbxue.com/article/11338.html 1,js取得IP地址 ...
- 获取mac地址方法之一 GetAdaptersInfo()
GetAdaptersInfo -20151116 防止返回的mac出现null 20151116 From:http://blog.csdn.net/weiyumingwww/article/det ...
- 使用C#获取IP地址方法
C#中如何获取IP地址?,看到问题的时候我也很纠结,纠结的不是这个问题是如何的难回答,而是纠结的是这些问题都是比较基本的常识,也是大家会经常用到的.但是却不断的有人问起,追根究底的原因估计就是没有好好 ...
- 获取IP地址方法
function getip() { static $ip = ''; $ip = $_SERVER['REMOTE_ADDR']; if(isset($_SERVER['HT ...
- 生产中常用的获取IP地址方法的总结
从ifconfig命令的结果中筛选出除了lo网卡之外的所有IPv4地址 centos7 (1)ifconfig | awk '/inet / && !($2 ~ /^127/){pri ...
- android获取mac地址方法
http://www.cnblogs.com/xioapingguo/p/4037513.html 网上找的,记录一下 public static String getMacAdress(){ Wif ...
随机推荐
- web前端学习(三)css学习笔记部分(2)-- css定位+盒子操作
3.CSS定位 3.1定位 1.CSS定位: 改变元素在页面上的位置 2.CSS定位机制 普通流:元素按照其在HTML中的位置顺序决定排布的过程 浮动 绝对布局 属性 描述 position 把元素放 ...
- Linux常用命令操作详解
https://mp.weixin.qq.com/s/IR4yy7Q0mOA_XV16R21CdQ 一:Linux下tomcat服务的启动.关闭与错误跟踪 使用PuTTy远程连接到服务器以后,通常通过 ...
- KMLLayer
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- 【JZOJ5088】【GDOI2017第四轮模拟day2】最小边权和 排序+动态规划
题面 有一张n个点m条边的有向图,每条边有一个互不相同的边权w,有q个询问,要求你从点a经过不超过c条边到点b,要求经过的边权递增并和尽量小,求出最小的边权和,如果没有合法方案则输出-1. 对于100 ...
- Python数据分析与展示[第三周](pandas数据类型操作)
数据类型操作 如何改变Series/ DataFrame 对象 增加或重排:重新索引 删除:drop 重新索引 .reindex() reindex() 能够改变或重排Series和DataFrame ...
- 【花般绽放】balibali
先放项目地址:https://github.com/1067011734/balibali 感谢无私的程序员们分享 我们边看效果边看代码 项目运行出来的效果 先看Home页面 轮播 //src\pag ...
- LintCode刷题笔记-- O(1) Check Power of 2
标签: 位运算 题目: Using O(1) time to check whether an integer n is a power of 2. 解题思路: 这道题是利用位运算判断一个数是不是2 ...
- SQLServer —— 变量的使用
一.局部变量的定义与赋值 定义语法: -- 声明一个局部变量 DECLARE @变量名 数据类型 -- 声明多个局部变量 DECLARE @变量名1 数据类型1, @变量名2 数据类型2 赋值语法: ...
- 报错OPTION SQL_SELECT_LIMIT=
org.quartz.JobPersistenceException: Couldn't acquire next trigger: You have an error in your SQL syn ...
- fedora 安装 pidgin-lwqq
因为 腾讯自带的linux for qq 已经无法登陆,于是详尽各种办法在fedora 上安装 qq ,但均以失败高中.于是使用了几天web qq 但最终无法忍受,于是有研究起来了 pidgin-l ...