当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > asp.net 获取客户端IP与mac

ASP.NET
ASP.NET开发:简化应用程序的开发支持Web标准
asp.net XMLHttpRequest实现用户注册前的验证
asp.net 页面间传值方法小结
asp.net url重写浅谈
asp.net 验证码生成和刷新及验证
C#精髓 GridView72大绝技 学习gridview的朋友必看
实例说明asp.net中的简单角色权限控制
asp.net网站开发包wq.dll打包下载
js与ASP.NET 中文乱码问题
asp.net checkbox 动态绑定id GridView删除提示
asp.net TextBox回车触发事件 图片在img显示
asp.net 脏字典过滤问题 用正则表达式来过滤脏数据
asp.NET 脏字过滤算法
asp.NET 脏字过滤算法 修改版
asp.net sql 数据库处理函数命令
asp.net Javascript 的几种写法与提示
ASP.NET MVC学习笔记
asp.net 中国身份证号码验证代码 非正则
Asp.net中使用Sqlite数据库的方法
asp.net 中文字符串提交乱码的解决方法

ASP.NET 中的 asp.net 获取客户端IP与mac


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-23   浏览: 316 ::
收藏到网摘: n/a

获取客户端IP:

以下为引用的内容:

private string GetClientIP()
  {
   string result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
   if (null == result || result == String.Empty)
   {
    result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
   }

   if (null == result || result == String.Empty)
   {
    result = HttpContext.Current.Request.UserHostAddress;
   }
   return result;
  }

获取MAC地址:

以下为引用的内容:

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
    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")
      Response.Write ("正在访问Localhost!");
     else
      Response.Write ("欢迎来自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))
     {
      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));
      }
     }
    }
 
//方法二
using 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,}(?((.)*?)) __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地址方法以DNS法较为简单实用,如下:
  using System.Net;
 
 private void ButtonIP_Click(object sender, System.EventArgs e)
  { 
     System.Net.IPAddress[] addressList = Dns.GetHostByName(Dns.GetHostName()).AddressList;
     if ( addressList.Length>1)
     {   TextLIP.Text = addressList[0].ToString();
          TextSIP.Text = addressList[1].ToString();
     }
     else
     {
          TextLIP.Text = addressList[0].ToString();
          TextSIP.Text = "没有可用的连接";
     }
  }

获取服务器的IP地址与MAC地址另一方法如下:

以下为引用的内容:

   using System.Management;
 
   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();
     TextMAC.Text = stringMAC.ToString();
     string[] IPAddresses = (string[]) MO["IPAddress"];
     if(IPAddresses.Length > 0)
     stringIP = IPAddresses[0];
     TextIP.Text = stringIP.ToString();
    }
   } 

获取客户端本机的IP地址相当简易,方法如下:

以下为引用的内容:

using System.Net;
 
TextIP.Text=Page.Request.UserHostAddress;

如要获取客户端本机的MAC地址就相对复杂些,得导入调用两个API,用ARP协议获取,但这样只能获取到同网段机器的MAC,对于跨网段的得利用IP扫描或cmd中nbtstat命令获取MAC地址。也可通过读取系统注册表值或WMI的数据库来获取。