前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >C# 在指定的IP地址中获得一个设备的MAC(物理)地址

C# 在指定的IP地址中获得一个设备的MAC(物理)地址

原创
作者头像
用户8671053
修改于 2021-11-02 07:58:26
修改于 2021-11-02 07:58:26
1.4K00
代码可运行
举报
文章被收录于专栏:码农的生活码农的生活
运行总次数:0
代码可运行
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using System.Net;
using System.Net.NetworkInformation;
/// <summary>
/// Holds utilities for working with networks, Ethernet, etc.
/// </summary>
public static class NetworkUtils
{
    //

http://www.codeproject.com/KB/IP/host_info_within_network.aspx
    [System.Runtime.InteropServices.DllImport("iphlpapi.dll",

ExactSpelling = true)]
    static extern int SendARP(int DestIP, int SrcIP, byte[]

pMacAddr, ref int PhyAddrLen);

/// <summary>
/// Gets the MAC address (<see cref="PhysicalAddress"/>)  

associated with the specified IP.
    /// </summary>
    /// <param name="ipAddress">The remote IP address.</param>
    /// <returns>The remote machine's MAC address.</returns>
    public static PhysicalAddress GetMacAddress(IPAddress

ipAddress)
    {
        const int MacAddressLength = 6;
        int length = MacAddressLength;
        var macBytes = new byte[MacAddressLength];
        SendARP(BitConverter.ToInt32(ipAddress.GetAddressBytes(),

0), 0, macBytes, ref length);
        return new PhysicalAddress(macBytes);
    }
}
[TestClass()]
public class NetworkUtilsTests
{
    [TestMethod()]
    public void GetMacAddress_BroadcastIP_NonzeroMac()
    {
        IPAddress ipAddress = IPAddress.Broadcast;

    PhysicalAddress actual = NetworkUtils.GetMacAddress 

(ipAddress);
        Console.WriteLine(actual.ToString());

    Assert.AreNotEqual(PhysicalAddress.None, actual);
}

}</pre> 

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Csharp实例:武汉智能安检闸机数据接收和解析
项目介绍: 本实例主要是接收安检闸机的数据解析并显示到界面上,只做功能实现,不做界面美化 硬件:闸机一个、网线一根、电脑主机 开发环境:vs2017 系统:win10 涵盖知识点:tcp通讯、文件写入、多线程,委托、类型转换等
zls365
2020/08/19
6300
Csharp实例:武汉智能安检闸机数据接收和解析
dotnet core 获取 MacAddress 地址方法
因为在 dotnetcore 是没有直接和硬件相关的,所以无法通过 WMI 的方法获取当前设备的 Mac 地址
林德熙
2019/03/13
2.1K0
C/C++ 获取 MAC 地址的几种方法
Netbios #include <windows.h> #pragma comment(lib, "Netapi32.lib") namespace { bool GetAdapterInfo(int adapterNum, std::string& macOUT) { NCB Ncb; memset(&Ncb, 0, sizeof(Ncb)); Ncb.ncb_command = NCBRESET; // 重置网卡,以便我们可以查询 Ncb.ncb_lana_num = adapterNum
王瑞MVP
2022/12/28
1.4K0
实用代码-C#获取本机网络适配器信息及MAC地址
System.Net.NetworkInformation空间提供对网络流量数据、网络地址信息和本地计算机的地址更改通知的访问。该命名空间还包含实现 Ping 实用工具的类。可以使用Ping和相关的类检查是否可通过网络连接到计算机。在查MSDN时无意间翻到这了,发现挺好玩的,MSDN还给了具体例子,暂且记下来,说不定以后就用到了. 1 public static void ShowNetwork() 2 { 3 NetworkInterface[] networkInterface = 4
blackheart
2018/01/19
1.5K0
C# EPL USB 指令打印
private void btnPrinter_Click(object sender, EventArgs e) { #region ESC 热敏图像点阵像素点读取打印 //Bitmap bitmap = new Bitmap(@"D:\450X100.bmp"); //NetPOSPrinter netPOSPrinter = new NetPOSPrinter(); //n
跟着阿笨一起玩NET
2018/09/20
2.1K0
android获取Mac地址和IP地址
(1)设备开通Wifi连接,获取到网卡的MAC地址(但是不开通wifi,这种方法获取不到Mac地址,这种方法也是网络上使用的最多的方法)
程思扬
2022/01/10
9.3K0
如何在ASP.NET MVC中获取客户端的IP地址?
大家好,又见面了,我是你们的朋友全栈君。 本文翻译自:How can I get the client’s IP address in ASP.NET MVC? I’m totally new to
全栈程序员站长
2022/09/15
7.7K0
C#百万对象序列化深度剖析:如何在网络传输中实现速度与体积的完美平衡
在网络通信中,数据序列化是将对象状态转换为可存储或可传输的形式的过程,这对于TCP网络传输尤为关键。在项目中,当需要处理几十万条数据的传输时,传统的Json序列化方式由于其冗余的字段名和字符串格式,导致了二进制包体积庞大,且序列化与反序列化的效率低下。为了解决这些问题,我考虑采用更加高效的序列化方法,以减少包大小并提升处理速度。本文将探讨自定义二进制序列化、BinaryWriter/BinaryReader、MessagePack[1]和ProtoBuf[2]等4种序列化方法,并通过比较它们的性能,为大家提供我目前认为的最佳实践指南。
沙漠尽头的狼
2023/12/13
5220
C#百万对象序列化深度剖析:如何在网络传输中实现速度与体积的完美平衡
C/C++ 获取主机网卡MAC地址
MAC地址(Media Access Control address),又称为物理地址或硬件地址,是网络适配器(网卡)在制造时被分配的全球唯一的48位地址。这个地址是数据链路层(OSI模型的第二层)的一部分,用于在局域网(LAN)中唯一标识网络设备。获取网卡地址主要用于网络标识和身份验证的目的。MAC地址是一个唯一的硬件地址,通常由网卡的制造商在制造过程中分配。通过获取MAC地址可以判断当前主机的唯一性可以与IP地址绑定并实现网络准入控制。
王瑞MVP
2023/11/20
7470
C/C++ 获取主机网卡MAC地址
C# 通过ARP技术来观察目标主机数据包
由于之前写的C# 实现Arp欺诈的文章属于网络攻击,不能够被展示《.NET 6 制作让同事不能上网的arp欺骗工具》,所以这边我们稍微说一下C#调用ARP包以及查看其他电脑上网数据包的技术,委婉的说一下ARP在局域网之中的应用。
郑子铭
2024/04/29
2140
C# 通过ARP技术来观察目标主机数据包
扫描仪对接(C#)
源代码地址:http://www.codeproject.com/Articles/171666/Twain-for-WPF-Applications-Look-Ma-No-Handles
码客说
2022/09/19
4.7K0
扫描仪对接(C#)
c#简单的socket通讯demo
代码中注释比较多 如果仍旧看不懂请看JimmyZhang的这篇文章 http://www.cnblogs.com/JimmyZhang/archive/2008/09/07/1286300.html 讲的很细很基础
liulun
2022/05/09
3180
获取本机IP MAC地址
1 #include <windows.h> 2 #include <stdio.h> 3 #include "Iphlpapi.h" //包含对IP帮助函数的定义 4 #pragma comment(lib,"Iphlpapi.lib") 5 #pragma comment(lib,"WS2_32.lib")//全局数据 6 u_char g_ucLocalMac[6]; 7 DWORD g_dwGatewayIP; 8 DWORD g_dwLocalIP; 9 DWORD g_dwMa
用户1154259
2018/01/17
8.9K0
获取本机IP MAC地址
NopCommerce开源项目中很基础但是很实用的C# Helper方法
刚过了个五一,在杭州到处看房子,不知道杭州最近怎么了,杭州买房的人这么多,房价涨得太厉害,这几年翻倍翻倍地涨,刚过G20,又要亚运会,让我这样的刚需用户买不起,也买不到房子,搞得人心惶惶,太恐怖了,心好累。
码农阿宇
2018/05/03
8220
C#中通过API实现的打印类---修改自泥人张版本
using System; using System.Collections; using System.Text; using System.Runtime.InteropServices; using System.Security; using System.ComponentModel; using System.Drawing.Printing; namespace PrinterAPI {  public class Printer  {   private Printer()   {   }  ///泥人张版本加强版   #region API声明   [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]    internal struct structPrinterDefaults   {    [MarshalAs(UnmanagedType.LPTStr)]    public String pDatatype;    public IntPtr pDevMode;    [MarshalAs(UnmanagedType.I4)]    public int DesiredAccess;   };   [DllImport("winspool.Drv", EntryPoint = "OpenPrinter", SetLastError = true,     CharSet = CharSet.Unicode, ExactSpelling = false, CallingConvention = CallingConvention.StdCall),   SuppressUnmanagedCodeSecurityAttribute()]   internal static extern bool OpenPrinter([MarshalAs(UnmanagedType.LPTStr)]    string printerName,    out IntPtr phPrinter,    ref structPrinterDefaults pd);   [DllImport("winspool.Drv", EntryPoint = "ClosePrinter", SetLastError = true,     CharSet = CharSet.Unicode, ExactSpelling = false,     CallingConvention = CallingConvention.StdCall), SuppressUnmanagedCodeSecurityAttribute()]   internal static extern bool ClosePrinter(IntPtr phPrinter);   [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]    internal struct structSize   {    public Int32 width;    public Int32 height;   }   [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]    internal struct structRect   {    public Int32 left;    public Int32 top;    public Int32 right;    public Int32 bottom;   }   [StructLayout(LayoutKind.Explicit, CharSet = CharSet.Unicode)]    internal struct FormInfo1   {    [FieldOffset(0), MarshalAs(UnmanagedType.I4)]    public uint Flags;    [FieldOffset(4), MarshalAs(UnmanagedType.LPWStr)]    public String pName;    [FieldOffset(8)]    public structSize Size;    [FieldOffset(16)]    public structRect ImageableArea;   };   [StructLayout(LayoutKind.Sequential, CharSet = CharSet
jack.yang
2025/04/05
390
局域网通过端口通讯
使用DatagramSocket代表UDP协议的Socket,DatagramSocket本身只是码头,不维护状态,不能产生IO流,它的唯一作用就是接收和发送数据报,Java使用DatagramPacket来代表数据报,DatagramSocket接收和发送的数据都是通过DatagramPacket对象完成的。
码客说
2023/02/10
1.9K0
局域网通过端口通讯
C#常用操作类库五(电脑操作类)
/// <summary>     /// Computer Information     /// </summary>     public class ComputerHelper     {         public string CpuID;         public string MacAddress;         public string DiskID;         public string IpAddress;         public string LoginUse
跟着阿笨一起玩NET
2018/09/18
8620
通过主机名得到对应ip地址_如何查看电脑主机名或Ip地址
由于SILVERLIGHT是基于纯客户端的机制实现的,想在SL中获取客户端计算机信息暂时还没有效的解决方案。
全栈程序员站长
2022/11/07
4.9K0
dotnet6 C# 一个国内还能用的 NTP 时间校准客户端的实现
核心方法是在国内使用 腾讯 和 阿里 提供的 NTP 时间服务器来获取网络时间,如果连接不上,再依次换成 国家服务器 和 中国授时 服务,如果再连不上,那就换成微软自带的 time.windows.com 服务
林德熙
2023/04/07
1.9K0
C# 通过VMI接口获取硬件ID
添加引用:using System.Management; 实现代码: class HardWareInfo { /// <summary> /// 获取 CPUID , 更多 cpu 信息参考 /// </summary> /// <returns> cpuid </returns> public static string GetCpuId() { string cpuid = ""; try { ManagementObjectSearcher searcher =
王瑞MVP
2022/12/28
1.5K0
相关推荐
Csharp实例:武汉智能安检闸机数据接收和解析
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文