web server to fetch client's machine mac address

一曲冷凌霜 提交于 2019-12-01 11:58:51

No, there's no easy way to do that.

The MAC address is only resolvable on the same subnet - assuming this isn't a fairly small intranet app, you would not be on the same subnet as your clients.

In theory, querying the client with remote WMI would work - but the firewall and permission issues are non-trivial. Again, unless you can control all clients - you're not likely to have success here.

About the only thing you could do is a downloadable app - possibly Flash, Silverlight or ActiveX - that interrogated the local machine for you. I'm not sure if that info would be sandboxed by the browser though.

My guess is there's an easier way to do what you're trying to do - but you'd need to provide more details on why you want the MAC address.

You can't get any of that information from a web server, and you should not try. Consider that machines may have multiple IP addresses and multiple MAC addresses, and may be behind a proxy server or Network Address Translation device, or worse.

IP addresses belong to the network layer, and should generally not be used by the Application layer. If nothing else, it's unlikely that the Network Administrators will consult the Developers when making changes to the network that will invalidate your assumptions.

As the other responses suggest, getting the IP address may not do what you need. What are you trying to use this information for?

You might want to try and use the System.Management.ManagementObjectSearcher object to query for this kind of info. I know this can be used to grab the MAC address of each connected network adaptor. This logic would have to be on the client side that could then pass whatever info you needed up to the server.

It looks like this Google Groups post might do what you are after. Here is the interesting bit:

using System.Management;

ObjectQuery query = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration"); 
ManagementObjectCollection queryCollection = query.Get();
foreach( ManagementObject mo in queryCollection )
{
     foreach(string s in addresses)
     { 
            Console.WriteLine( "IP Address ‘{0}’", s); 
     }
     foreach(string s in subnets)
     { 
            Console.WriteLine( "IP Subnet ‘{0}’", s); 
     }
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!