跨网段,如何获取客户端的MAC地址!求助!
在登录系统时,希望可以获取到客户端的MAC地址,保留到数据库中。 同网段的MAC地址可以获取到,但一旦跨网段或走一下路由就无法获取到MAC地址。郁闷中。。小弟新手,求解。。。。。 --------------------编程问答-------------------- 去收一下,网上有很多现成的方法。 --------------------编程问答-------------------- 这个够详细吧--------------------编程问答--------------------
protected void Page_Load(object sender, EventArgs e)
{
//ReadMSG();
if (!IsPostBack)
{
Label1.Text =
"//客户端ip:" +
Request.ServerVariables.Get("Remote_Addr").ToString() + "<br>" +
" //客户端主机名:" +
Request.ServerVariables.Get("Remote_Host").ToString() + "<br>" +
"//客户端浏览器IE:" +
Request.Browser.Browser + "<br>" +
"//客户端浏览器 版本号:" +
Request.Browser.MajorVersion + "<br>" +
"//客户端操作系统:" +
Request.Browser.Platform + "<br>" +
"//服务器ip:" +
Request.ServerVariables.Get("Local_Addr").ToString() + "<br>" +
"//服务器名:" +
Request.ServerVariables.Get("Server_Name").ToString() + "<br>";
string stringMAC = "";
string stringIP = "";
ManagementClass MC = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection MOC = MC.GetInstances();
foreach (ManagementObject MO in MOC)
{
if ((bool)MO["IPEnabled"] == true)
{
stringMAC += MO["MACAddress"].ToString(); //获取网卡的地址
string[] IPAddresses = (string[])MO["IPAddress"]; //获取本地的IP地址
if (IPAddresses.Length > 0)
stringIP = IPAddresses[0];
Label1.Text += "<br>MAC:" + stringMAC + "/ IP:" + stringIP;
if (stringIP == "192.168.1.45")
Label1.Text += "<br>I get you :192.168.1.45<br>";
}
}
//在页面上打印出客户端的网卡物理地址(MAC)
//Response.Write(this.GetMac(Request.UserHostAddress.ToString())+"<br>");
GetInfo();
}
}
//获取cpu序列号,硬盘ID,网卡MAC地址
private void GetInfo()
{
string cpuInfo = "";//cpu序列号
ManagementClass cimobject = new ManagementClass("Win32_Processor");
ManagementObjectCollection moc = cimobject.GetInstances();
foreach (ManagementObject mo in moc)
{
cpuInfo = mo.Properties["ProcessorId"].Value.ToString();
Label1.Text += "cpu序列号:" + cpuInfo.ToString();
}
//获取硬盘ID
String HDid;
ManagementClass cimobject1 = new ManagementClass("Win32_DiskDrive");
ManagementObjectCollection moc1 = cimobject1.GetInstances();
foreach (ManagementObject mo in moc1)
{
HDid = (string)mo.Properties["Model"].Value;
Label1.Text += "硬盘序列号:" + HDid.ToString();
}
}
//protected void Button1_Click(object sender, EventArgs e)
//{
// try
// {
// File.Delete(@"D:\html.html");
// }
// catch (Exception e2)
// {
// Response.Write(e2.Message);
// }
// Response.Write("Delete Successed!");
//}
//获取远程客户端的网卡物理地址(MAC)
public string GetMac(string IP) //para IP is the client's IP
{
string dirResults = "";
ProcessStartInfo psi = new ProcessStartInfo();
Process proc = new Process();
psi.FileName = "nbtstat";
psi.RedirectStandardInput = false;
psi.RedirectStandardOutput = true;
psi.Arguments = "-A " + IP;
psi.UseShellExecute = false;
proc = Process.Start(psi);
dirResults = proc.StandardOutput.ReadToEnd();
proc.WaitForExit();
dirResults = dirResults.Replace("\r", "").Replace("\n", "").Replace("\t", "");
Regex reg = new Regex("Mac[ ]{0,}Address[ ]{0,}=[ ]{0,}(?<key>((.)*?))__MAC", RegexOptions.IgnoreCase | RegexOptions.Compiled);
Match mc = reg.Match(dirResults + "__MAC");
if (mc.Success)
{
return mc.Groups["key"].Value;
}
else
{
reg = new Regex("Host not found", RegexOptions.IgnoreCase | RegexOptions.Compiled);
mc = reg.Match(dirResults);
if (mc.Success)
{
return "Host not found!";
}
else
{
return "";
}
}
}
这个返回的是空值呀。我原先就是用这个方法。比如说服务器是在172.*.*.* ;但客户端是通过路由连接的,他的IP是192.*.*.* 这样就取不到了。
网上的那些代码是只能去的本网段的MAC地址。跨网段就不行了。 --------------------编程问答-------------------- 读取网卡地址
using System.Management;
string strMac = string.Empty;
ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject mo in moc)
{
if ((bool)mo["IPEnabled"] == true)
{
strMac += mo["MacAddress"].ToString() + "";
}
}
Label1.Text = strMac; --------------------编程问答--------------------
问下 ManagementClass 这个类是???
没找到。 --------------------编程问答-------------------- 我也是遇到同样问题,楼主解决了,记得分享下啊 --------------------编程问答-------------------- 学习了 --------------------编程问答-------------------- 有点黑客味道 --------------------编程问答-------------------- --------------------编程问答--------------------
不用问。取本地MAC地址,跟你的毫无关系。 --------------------编程问答-------------------- 取不到浏览者的mac地址吧.
要么通过flash看看能实现不? --------------------编程问答-------------------- internet是不传递MAC的,只传递IP。即使是IP,也只是NAT路由器映射的地址和(临时)端口,而不是内网客户机的。
除非客户机部署有你的本地程序。 --------------------编程问答--------------------
按理说,如果flash有这个功能,那么这就是个漏洞。对于silverlight也是一样。
当然这要看具体怎样实现。例如silverlight当切换为桌面应用程序模式时,客户端要弹出严重的警告,而且也要客户确认了才可以切换。 --------------------编程问答-------------------- 有解决的办法吗?现在正在找这解决方案,楼主解决的话,记得分享下啊!谢谢! --------------------编程问答-------------------- 大家解决了没有,我也正需要获取跨网段的MAC,不知有什么好的方法?
补充:.NET技术 , ASP.NET