读书人

[100分]怎么:asp.net下读取客户端mac

发布时间: 2011-12-21 23:56:01 作者: rapoo

[100分]如何:asp.net下读取客户端mac地址(注:为b/s结构,非c/s结构)
如题!!

[解决办法]
试一试如下代码,一个类文件:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.Runtime.InteropServices;
using System.IO;

namespace BobomouseComponent
{
/// <summary>
/// MAC 的摘要说明。
/// </summary>
public class Mac : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Label Label1;
[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);
static TimeSpan waitTime=new TimeSpan(0,0,0,3);

public string GetMacAddress(string ipAddress) // 得到指定IP的MAC地址
{
Int32 ldest=inet_addr(ipAddress);
Int64 macinfo=new Int64();
Int32 len=6;
try
{
int res=SendARP(ldest,0,ref macinfo,ref len);
}
catch(Exception err)
{
throw new Exception( "在解析MAC地址过程发生了错误! ");
}
string originalMACAddress=macinfo.ToString( "X4 ");
return originalMACAddress;
}
}
}
======================
或者试一试下面的代码,用ASP.Net获取客户端网卡的MAC 和IP

uisng System.Text.RegularExpressions;
using System.Diagnostics;

public class test
{
public test
{}
public static string GetCustomerMac(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 " ";
}
}
}
}

//IP Response.Write( " <br> IP= "+Request.UserHostAddress.ToString());



[解决办法]
比较难的哦,呵呵。
服务端脚本和客户端脚本是执行在不同的地方了。


[解决办法]
只好使用ActiveX
[解决办法]
<HTML> <HEAD> <TITLE> 获取客户端MAC和用户名 </TITLE>
<META http-equiv=Content-Type content= "text/html; charset=gb2312 ">
<SCRIPT language=JScript event= "OnCompleted(hResult,pErrorObject, pAsyncContext) " for=foo>
document.forms[0].txtMACAddr.value=unescape(MACAddr);
document.forms[0].txtIPAddr.value=unescape(IPAddr);
document.forms[0].txtDNSName.value=unescape(sDNSName);
//document.formbar.submit();
</SCRIPT>

<SCRIPT language=JScript event=OnObjectReady(objObject,objAsyncContext) for=foo>
if(objObject.IPEnabled != null && objObject.IPEnabled != "undefined " && objObject.IPEnabled == true)
{
if(objObject.MACAddress != null && objObject.MACAddress != "undefined ")
MACAddr = objObject.MACAddress;
if(objObject.IPEnabled && objObject.IPAddress(0) != null && objObject.IPAddress(0) != "undefined ")
IPAddr = objObject.IPAddress(0);
if(objObject.DNSHostName != null && objObject.DNSHostName != "undefined ")
sDNSName = objObject.DNSHostName;
}
</SCRIPT>

<META content= "MSHTML 6.00.2800.1106 " name=GENERATOR> </HEAD>
<BODY>
<OBJECT id=locator classid=CLSID:76A64158-CB41-11D1-8B02-00600806D9B6 VIEWASTEXT> </OBJECT>
<OBJECT id=foo classid=CLSID:75718C9A-F029-11d1-A1AC-00C04FB6C223> </OBJECT>
<SCRIPT language=JScript>
var service = locator.ConnectServer();
var MACAddr ;
var IPAddr ;
var DomainAddr;
var sDNSName;
service.Security_.ImpersonationLevel=3;
service.InstancesOfAsync(foo, 'Win32_NetworkAdapterConfiguration ');
</SCRIPT>

<FORM id= "formfoo " name= "formbar " action= "index.do " method= "post "> <INPUT value= "00-11-11-B4-52-EF " name= "txtMACAddr "> <INPUT value= "210.42.38.50 " name= "txtIPAddr "> <INPUT value= "zhupan " name= "txtDNSName "> </FORM> </BODY> </HTML>
[解决办法]
一般来说用javascript需要降低ie的安全设置,用服务器端代码只能得到同一网段的mac地址
bobomouse(波波) 的方法还没有试过,lz可以试试

最好的办法就是用activex
[解决办法]
没有办法。
原因在于没有读取客户端Mac的权限。
Acticex解决了权限问题。
服务端的代码感觉有点自欺欺人。

读书人网 >asp.net

热点推荐