2012-04-29 100 views
2

我想获取登录到系统(Web应用程序)的用户的IP地址和MAC地址。 我用这些来规范如何使用ASP.NET C#获取Mac和IP地址登录用户

NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces(); 

的线,我用这个方法来获取MAC地址,但问题是我得到了计算机的所有适配器的MAC地址。

如何知道哪一个是正确的?如何获得连接到我的网站的设备的正确MAC地址?

以及如何获得适配器的IP地址。

当我尝试它在我的电脑给它8个适配器与8 MAC地址

我想在我的电脑,我已经连接到内网有线连接,并连接到互联网无线。

+2

5标签和没有人告诉你使用什么语言? – geoffspear 2012-04-29 13:08:29

+0

OP可能认为C#是默认语言http://msdn.microsoft.com/en-us/library/system.net.networkinformation.networkinterface.getallnetworkinterfaces.aspx – 2012-04-29 13:10:28

+0

我正在使用C#我将编辑标题和内容和标签现在,谢谢你的NOTE :) – msytNadeem 2012-04-29 13:10:47

回答

2

当目标(您的网站的服务器)和源(客户端的计算机)之间发生套接字连接时,您只能获取源IP地址,您永远无法获得连接到您网站的用户的MAC地址MAC地址是从来没有过的套接字连接(客户端< - >服务器)发送,以获取用户的IP地址:

using System.Net; 

Private string GetIP() 
{ 
string strHostName = ""; 
strHostName = System.Net.Dns.GetHostName(); 

IPHostEntry ipEntry = System.Net.Dns.GetHostEntry(strHostName); 

IPAddress[] addr = ipEntry.AddressList; 

return addr[addr.Length-1].ToString(); 

} 

来源:Here

+0

MAC地址是不需要的,thi与链接中的代码相同:) – msytNadeem 2012-04-29 14:09:54

0

首先,将是不错要知道为什么你想要你的客户(用户)的MAC地址为Mac地址不是唯一的

您只能使用.NET Framework获取SERVER连接,并且永远不会为User获得客户端MAC地址,因此您只能依靠javascript和ActiveX控件,只能使用作为Firefox的Internet Explorer几年前已经不赞成ActiveX控件的支持。

关于此问题的更多内容请参阅this article

+0

非常感谢你这个词是NOT UNIQUE从不使用它而得到帮助:)并获得IP地址正在工作,thakn你:) – msytNadeem 2012-04-29 14:09:18

+1

从定义上来看它有多么独特。更多的可能性是什么? 281,474,976,710,656中的1个。 **“以太网MAC地址是一个48位数字,对于一个特定的以太网接口是唯一的”** [IEEE标准](http://grouper.ieee.org/groups/msc/MSCRacInfo/FAQ%20Registration%20Authority% 20Revised。htm)(ps博客不是有效的参考) – LokizFenrir 2014-10-20 08:01:18

1
using System.Runtime.InteropServices; 

[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); 

private static string GetClientMAC(string strClientIP) { 
    string mac_dest = ""; 
    try { 
     Int32 ldest = inet_addr(strClientIP); 
     Int32 lhost = inet_addr(""); 
     Int64 macinfo = new Int64(); 
     Int32 len = 6; 
     int res = SendARP(ldest, 0, ref macinfo, ref len); 
     string mac_src = macinfo.ToString("X"); 

     while (mac_src.Length < 12) { 
      mac_src = mac_src.Insert(0, "0"); 
     } 

     for (int i = 0; i < 11; i++) { 
      if (0 == (i % 2)) { 
       if (i == 10) { 
        mac_dest = mac_dest.Insert(0, mac_src.Substring(i, 2)); 
       } else { 
        mac_dest = "-" + mac_dest.Insert(0, mac_src.Substring(i, 2)); 
       } 
      } 
     } 
    } catch (Exception err) { 
     throw new Exception("Lỗi " + err.Message); 
    } 
    return mac_dest; 
} 

此代码将帮助你:)

+0

通常最好是解释一个解决方案,而不是只发布一些匿名代码行。你可以阅读[我如何写一个好的答案](https://stackoverflow.com/help/how-to-answer),还有[完全解释基于代码的答案](https://meta.stackexchange.com/questions/114762/explain-entire-%E2%80%8C%E2%80%基于8Bcode的答案) – 2017-09-21 04:00:22

+1

我认为程序员需要解决他的问题。一个好的程序员会理解代码的作用。 – 2017-09-22 02:56:02