転送:asp.netクライアント登録者macアドレスを取得します.
5108 ワード
asp.netクライアント登録者のmacアドレスを取得するには、2つの方法があります.
1,win 32の特性によって得られます.
利点:クライアントに設定する必要はありません.短所:サーバのmacを取得できませんでした.(テストでは合計0です.サーバのmacを取得する必要はないと思いますので、欠点ではありません.)
2,javascriptがActiveXをロードすることによって実現される:
特典:任意でmacアドレスを取得します.短所:クライアントブラウザでactiveXのオプションを全部開く必要があります.そうでないと入手できないので、あまり安定していません.
win 32の特性によって得られます.
javascriptによってActiveXをロードすることによって実現される:
javascriptコードは以下の通りです.
1,win 32の特性によって得られます.
利点:クライアントに設定する必要はありません.短所:サーバのmacを取得できませんでした.(テストでは合計0です.サーバのmacを取得する必要はないと思いますので、欠点ではありません.)
2,javascriptがActiveXをロードすることによって実現される:
特典:任意でmacアドレスを取得します.短所:クライアントブラウザでactiveXのオプションを全部開く必要があります.そうでないと入手できないので、あまり安定していません.
win 32の特性によって得られます.
[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 void Page_Load(object sender, System.EventArgs e)
{
try
{
string userip=Request.UserHostAddress;
string strClientIP = Request.UserHostAddress.ToString().Trim();
Int32 ldest = inet_addr(strClientIP); // ip
Int64 macinfo = new Int64();
Int32 len = 6;
int res = SendARP(ldest,0, ref macinfo, ref len);
string mac_src=macinfo.ToString("X");
if(mac_src == "0")
{
if (userip == "127.0.0.1")
{
Response.Write(" Localhost!");
}
else
{
Response.Write(" IP " + userip + " !" + "<br>");
}
return;
}
while(mac_src.Length<12)
{
mac_src = mac_src.Insert(0,"0");
}
string mac_dest="";
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));
}
}
}
Response.Write (" IP "+userip+ "<br>" + ",MAC "+mac_dest+" !"
+ "<br>");
}
catch(Exception err)
{
Response.Write(err.Message);
}
}
以上のコードでクライアントのmacを取得できます.クライアントの上で効果が見られます.javascriptによってActiveXをロードすることによって実現される:
javascriptコードは以下の通りです.
// JScript
document.write("<OBJECT id='locator' classid='CLSID:76A64158-CB41-11D1-8B02-00600806D9B6' VIEWASTEXT></OBJECT>");
document.write("<OBJECT id=foo classid=CLSID:75718C9A-F029-11d1-A1AC-00C04FB6C223></OBJECT>");
var MACAddr, IPAddr, sDNSName
function getObject(objObject,objAsyncContext){
try{
if(MACAddr==null && objObject.IPEnabled)
{
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;
}
}
catch(err)
{ }
}
function setValue(hResult,pErrorObject, pAsyncContext){
createTxt("txtMAC", MACAddr);
createTxt("txtIp", IPAddr);
createTxt("txtPCName", sDNSName);
}
function createTxt(txtName, txtValue){
var macTxt = document.createElement("INPUT");
macTxt.name = txtName;
macTxt.value = txtValue;
macTxt.type = "hidden";
try
{
document.forms[0].appendChild(macTxt);
}
catch(err)
{
//
}
}
document.getElementById("foo").attachEvent("OnObjectReady", getObject);
document.getElementById("foo").attachEvent("OnCompleted", setValue);
try
{
var service = locator.ConnectServer();
var MACAddr ;
var IPAddr ;
var DomainAddr;
var sDNSName;
service.Security_.ImpersonationLevel=3;
service.InstancesOfAsync(foo, 'Win32_NetworkAdapterConfiguration');
}
catch(err)
{
//
}
取得するaspxページで上記のjsを参照すると、このページでmaxアドレスを取得できます. /// <summary>
/// mac
/// </summary>
/// <returns></returns>
public string GetMACs()
{
try
{
return Request.Form["txtMAC"].ToString();
}
catch
{
return "";
}
}