Bobby

聚沙成塔 集腋成裘
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

获得客户端的MAC

Posted on 2006-02-23 16:33  Bobby  阅读(313)  评论(0编辑  收藏  举报
要想获得客户端的MAC,WEB服务器必须在同一局域网网段下,既然已经在同网一网段下,子网掩码、网关都是一样的了哈;所以只能是获取客户端IP到MAC的转换过程,如果局域网MAC有登记信息的话就可以确定用户的访问记录了。
<%@Page language="C#" Debug="True"%>
<%@Import Namespace="System.Data"%>
<%@Import Namespace="System.Data.SqlClient"%>
<%@Import Namespace="System.Runtime.InteropServices"%>
<Script Language="C#" runat="server">
[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);
void Page_Load(Object sender,EventArgs e)
{
try
{
string userip=Request.UserHostAddress;
Int32 ldest= inet_addr(userip); //目的地的ip 
Int32 lhost= inet_addr(""); //本地服务器的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")
userinfo.Text="正在访问Localhost!";
else
userinfo.Text="欢迎来自IP为"+userip+"的朋友!";
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))
mac_dest=mac_dest.Insert(0,mac_src.Substring(i,2));
}
userinfo.Text="欢迎来自IP为"+userip+",MAC地址为"+mac_dest+"的朋友!";
 }
 catch(Exception err) 
 { 
Response.Write(err.Message);
 }
}
</Script>
<htm>
<body>
<center>
<asp:Label ID="userinfo" Runat=server></asp:Label>
</center>
</body>
</htm>