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

ASP.NET
不同映射模式下的直线输出的效果问题
ASP.NET开发下的MVC设计模式的实现
ASP.NET编写应用程序的十大技巧
ASP.NET中使用AJAX的简单方法
ASP.NET MVC实现自己的视图引擎
认识asp.net会话状态
ASP.NET实现页面传值的几种方法
.NET中容易混淆的几组重要概念
详解.NET中的动态编译技术
如何使用ASP.Net加密Cookie
ASP.NET 2.0跨网页提交的三种方法
ASP.NET 2.0创建母版页引来的麻烦
.Net整合其他平台的一些探讨
ASP.NET编程经验技巧10则
最佳实践 ADO.NET实用经验无保留曝光
在.NET上执行多线程操作要考虑的两大因素
.Net开发 细说Visual Basic.Net
ASP.NET网络编程中经常用到的27个函数集
ASP.NET防止用户多次登录的方法
对ASP.NET MVC项目中的视图做单元测试

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-23   浏览: 92 ::
收藏到网摘: 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的数据库来获取。