#region
|
|
using System.Collections.Generic;
|
using System.Net;
|
using System.Net.NetworkInformation;
|
using System.Net.Sockets;
|
using System.Runtime.InteropServices;
|
using System.Text;
|
using System.Text.RegularExpressions;
|
|
#endregion
|
|
namespace CSFrameworkV5.Common
|
{
|
/// <summary>
|
/// C#网络工具类,获取IP/MAC地址
|
/// </summary>
|
public class NetTools
|
{
|
/// <summary>
|
/// 获取本机IP
|
/// </summary>
|
/// <returns></returns>
|
public static string GetLocalIP()
|
{
|
var ipe = Dns.GetHostEntry(Dns.GetHostName());
|
foreach (var IP in ipe.AddressList)
|
if (IP.AddressFamily == AddressFamily.InterNetwork)
|
return IP.ToStringEx();
|
|
return "";
|
}
|
|
/// <summary>
|
/// 获取第一个MAC地址
|
/// </summary>
|
/// <returns></returns>
|
public static string GetLocalMac()
|
{
|
var macs = GetMacByNetworkInterface();
|
if (macs.Count > 0) return macs[0];
|
|
return "";
|
}
|
|
/// <summary>
|
/// 通过NetworkInterface读取网卡Mac
|
/// </summary>
|
/// <returns></returns>
|
public static List<string> GetMacByNetworkInterface()
|
{
|
var macs = new List<string>();
|
var interfaces = NetworkInterface.GetAllNetworkInterfaces();
|
foreach (var ni in interfaces)
|
macs.Add(ni.GetPhysicalAddress().ToStringEx());
|
|
return macs;
|
}
|
|
/// <summary>
|
/// 根据本地IP地址获取MAC地址(Windows API函数方式)
|
/// </summary>
|
/// <param name="IP"></param>
|
/// <returns></returns>
|
public static string GetMACFromIP(string IP)
|
{
|
var strRet = "Unknown";
|
|
var strIPPattern = @"^\d+\.\d+\.\d+\.\d+$";
|
|
var objRex = new Regex(strIPPattern);
|
|
if (objRex.IsMatch(IP))
|
{
|
var intDest = inet_addr(IP);
|
var arrMAC = new int[2];
|
var intLen = 6;
|
|
var intResult = SendARP(intDest, 0, ref arrMAC[0], ref intLen);
|
|
if (intResult == 0)
|
{
|
var arrbyte = new byte[8];
|
arrbyte[5] = (byte)(arrMAC[1] >> 8);
|
arrbyte[4] = (byte)arrMAC[1];
|
arrbyte[3] = (byte)(arrMAC[0] >> 24);
|
arrbyte[2] = (byte)(arrMAC[0] >> 16);
|
arrbyte[1] = (byte)(arrMAC[0] >> 8);
|
arrbyte[0] = (byte)arrMAC[0];
|
|
var strbMAC = new StringBuilder();
|
|
for (var intIndex = 0; intIndex < 6; intIndex++)
|
{
|
if (intIndex > 0) strbMAC.Append("-");
|
|
strbMAC.Append(arrbyte[intIndex].ToString("X2"));
|
}
|
|
strRet = strbMAC.ToString();
|
}
|
}
|
|
return strRet;
|
}
|
|
[DllImport("Ws2_32.dll")]
|
private static extern int inet_addr(string ip);
|
|
[DllImport("Iphlpapi.dll")]
|
private static extern int SendARP(int dest, int host, ref int mac,
|
ref int length);
|
}
|
}
|