就是如何定位到电脑上~我试过通过MAC地址和计算机名~但遗憾的是都需要用插件才能获取到这些信息,有没有什么办法是可以不用插件~就能够判断到不同的电脑~~~比如网站同一个IP访问了多次~但是是不同电脑访问的~需要把他们区分开来~

解决方案 »

  1.   

    这个有点难度吧。如果单纯获得IP还好点。获取电脑的信息难啊。
    比方人家是ADSL拨号上网的,用一个路由器对外就是一个IP并且MAC地址也是一样的,你怎么判断呢?
    纯属个人想想的啊。没有做过此类开发,关注学习下!~~
      

  2.   

    Framework提供了获取方法的啊
    插件指的是什么啊ActiveX?       string strHostName = Dns.GetHostName(); //得到本机的主机名
                IPHostEntry ipEntry = Dns.GetHostByName(strHostName); //取得本机IP
                string strAddr = ipEntry.AddressList[0].ToString(); //假设本地主机为单网卡            Console.WriteLine(strHostName);
                Console.WriteLine(strAddr);
      

  3.   

    9楼那位~这个代码我试过了~在局域网可以获取~~放到服务器上~Dns.GetHostName()获取出来的就成了IP了~没有计算机名~继续继续~还有没有好意见
      

  4.   

    插件就是ActiveX控件撒~回一楼~获取IP当然容易~所以我想如果能获取计算机名就最好了~不管什么网络都应该不会计算机名一样吧~~但我也试了很多办法~计算机名不好获取~~~所以看论坛里面有没有大大有其他好的办法~~
      

  5.   

    获取IP,activex控件
    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 (String.IsNullOrEmpty(result))
      result = HttpContext.Current.Request.UserHostAddress;
      return result;
      }
      

  6.   

    不能用session和cookie~这些都是会释放的~我需要一个一直不变的~~长期的辨别参数
      

  7.   

    ip
    浏览器名称
    浏览器版本cookies如果版本重复, cookies经常清空. 这些也不能完全判断. 但基本可以达到lz要求的精度了吧.
      

  8.   

    不用ActiveX,根本无法取到客户端的MAC地址。光靠Asp.net没有权限。还可以考虑用SliverLight,倒是可以。
      

  9.   

    http://www.51bcw.com/thread-html-3343.htm   获取局域网内的ip地址和MAC地址
    http://www.51bcw.com/article-html-1588.htm   ASP.NET获取IP地址和MAC地址的方法接分
      

  10.   

    楼上的~我不是要局域网内的啊~需要获取外网的~~如果没办法获取也可以考虑用其他参数来判断~只要能唯一表示一台电脑就可以了~22楼:用IP+浏览器+版本+cookie~感觉还是不够精确吧~~可能一个公司的外网IP都是一样的~机器都是同时装的~那就可能那几个参数都一样了~就判断不出来了~
      

  11.   

    用IP+机器名来区分是否是不同的电脑System.Net.IPAddress ip = System.Net.IPAddress.Parse(HttpContext.Current.Request.UserHostAddress.ToString());
    System.Net.IPHostEntry ihe = Dns.GetHostEntry(ip)
     //机器名
    string clientname = ihe.HostName;
      

  12.   

    web的本来就是在服务器上的,如果让你随便可以获取电脑的信息,那谁还敢上网
      

  13.   

    如果非要做,只能用ActiveX,可能可以,没试过
      

  14.   

    ARP命令那个IP可以返回同IP的机器的MAC地址等信息
      

  15.   

    好像跑题了~没说必须要mac地址·或者计算机名~~只要能判断不同的电脑就行~~IP,COOKIE,SESSION那些肯定是不考虑了~
      

  16.   

       也不想想, 怎么可能的事情. 哼哼哼.路过.
    浏览器发的 只是HTTP协议的东西.
     HTTP里有什么 识别电脑的东西吗? 除了cookie session之类的 显然 就没有了.
    问的  是一个 无米之炊的问题.
      不动用activeX, flash这样的本地性质的程序 是别指望什么高级功能的.
      

  17.   

      //找出此IP是否登录过
            public bool QueyUserIP(string strIP)
            {
                StringBuilder sbselect = new StringBuilder();
                sbselect.Append("select Ws_Id from Tab_WebStat where Ws_WebIp=@Ws_WebIp");
                SqlParameter sqlapr = dl.GetParam("@Ws_WebIp", SqlDbType.VarChar, strIP, 50);
                  DataSet ds = dl.GetSelect(sbselect.ToString(), CommandType.Text, sqlapr);
                if (ds.Tables[0].Rows.Count > 0)
                {
                    return false;
                }
                return true;
            }
            //找出此IP是否今天登录过
            public int QueyUserIP(string strIP,string strDateTime)
            {
                StringBuilder sbselect = new StringBuilder();
                sbselect.Append("select Ws_WebAverage from Tab_WebStat where Ws_WebIp=@Ws_WebIp and Ws_StatDate=@Ws_StatDate");
                List<SqlParameter> list = new List<SqlParameter>();
                list.Add(dl.GetParam("@Ws_WebIp", SqlDbType.VarChar, strIP, 50));
                list.Add(dl.GetParam("@Ws_StatDate", SqlDbType.VarChar, DateTime.Now.ToString("yyyy-MM-dd"), 50));
                DataSet ds = dl.GetSelect(sbselect.ToString(), CommandType.Text, list.ToArray());
                if (ds.Tables[0].Rows.Count > 0)
                {
                    //返回的是浏览次数
                    return int.Parse(ds.Tables[0].Rows[0][0].ToString());
                }
                return 0;
            }        //添加新的IP浏览信息(iTpye为状态 0的时候为IP是新的今天刚登录 1的时候IP为旧的今天刚登录)
            public bool AddUserIP(string strIP,int iType)
            {
                StringBuilder sbselect = new StringBuilder();
                sbselect.Append("insert into Tab_WebStat(Ws_WebIp,Ws_WebAverage,Ws_IsNew,Ws_StatDate)values(@Ws_WebIp,@Ws_WebAverage,@Ws_IsNew,@Ws_StatDate)");
                List<SqlParameter> list = new List<SqlParameter>();
                list.Add(dl.GetParam("@Ws_WebIp", SqlDbType.VarChar, strIP, 50));
                list.Add(dl.GetParam("@Ws_WebAverage", SqlDbType.Int,1));
                if (iType == 0)
                {
                    list.Add(dl.GetParam("@Ws_IsNew", SqlDbType.Bit, true));
                }
                else
                {
                    list.Add(dl.GetParam("@Ws_IsNew", SqlDbType.Bit, false));
                }
                list.Add(dl.GetParam("@Ws_StatDate", SqlDbType.VarChar, DateTime.Now.ToString("yyyy-MM-dd"), 50));
                int intQuery = dl.GetInUpDel(sbselect.ToString(), CommandType.Text, list.ToArray());
                if (intQuery > 0)
                {
                    return true;
                }
                return false;
            }        //如果今天是同一IP多次浏览则更新 浏览次数
            public bool UpDataUserIP(string strIP, int iNumber)
            {
                StringBuilder sbselect = new StringBuilder();
                sbselect.Append("update Tab_WebStat set Ws_WebAverage=@Ws_WebAverage where Ws_WebIp=@Ws_WebIp and Ws_StatDate=@Ws_StatDate");
                List<SqlParameter> list = new List<SqlParameter>();
                list.Add(dl.GetParam("@Ws_WebIp", SqlDbType.VarChar, strIP, 50));
                list.Add(dl.GetParam("@Ws_WebAverage", SqlDbType.Int, iNumber + 1));
                list.Add(dl.GetParam("@Ws_StatDate", SqlDbType.VarChar, DateTime.Now.ToString("yyyy-MM-dd"), 50));
                int intQuery = dl.GetInUpDel(sbselect.ToString(), CommandType.Text, list.ToArray());
                if (intQuery > 0)
                {
                    return true;
                }
                return false;
            }
      

  18.   

    没有理想的办法只能从cookie/session、浏览器名称/版本来作一些粗糙的判断
    但都不是很有效的。
    同一个电脑,换一个浏览器。以上就无效了。
      

  19.   


    //获取服务器的MAC地址
    using System.Management; 
    string stringMAC = ""; 
    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(); 
        }
    }
      

  20.   

    获取客户端电脑名:Page.Request.UserHostName 
    获取客户端电脑IP:Page.Request.UserHostAddress 
      

  21.   

    想在服务器端获取客户端的mac离不开客户端插件。还是使用ActiveX吧
      

  22.   

    先获取别人的外网IP然后在获取他的本机IP,要知道同一个局域网下的内网IP是不能相同的
      

  23.   

    楼上的错了,要知道内网的IP信息根本就不发到服务器上,又怎么能获取判断呢。我觉得,从原理上来说,对于用同一路由器的内网用户,不用控件只用提交的IP(肯定是路由器的公网IP)是没办法判断的。
      

  24.   

    必须用控件,wmi可以取到计算机所有信息,但是需要客户端设置
      

  25.   

    开着防火墙的话arp是没有用的