日期:2014-05-18  浏览次数:20431 次

|M| 第二贴:有没有什么办法可以得到客户端的唯一标示啊,也就是存访问当前服务器的所有客户端电脑标示
是要记录访问了服务器的计算机,然后下一次这台电脑访问的时候告诉他上一次访问的时间(我做的是一个安全问题,但程序的逻辑和这个相同)
也就是控件只能在哪一台机子访问系统网站
如给某个用户访问网站的权限,然后限定他在哪一台电脑上访问,首先他用这台电脑登录后我们就记录他这台电脑的唯一标示,保存起来后,以后就只能用这一台电脑访问。

1:
本来想用Cookies的做客户端清除了就没有了
2:
后来想用IP,但会出现如果用同一路由器上网,整个公司都是同一IP
而且如果是拨号上网或别的会动态分IP
所以这个以不能做为客户端电脑的唯一标示
3:
后来想如果得到客户端的硬盘号的话这就是唯一标示了
但好像取不到,要是取得到也得用Actiove控件,这个不合要示
4:
看到网上说用MAC但我找了几个取MAC都取不到,还有这个好像也会出现像上面取IP的一样
会不会取到的是路由器的而不是当前的计算机呢

谢谢

------解决方案--------------------
up
------解决方案--------------------
只有cookies或session的方式
------解决方案--------------------
网卡的MAC地址是全球唯一的
通过mac地址识别 相当准确
mac是和网卡绑定的 只有2个机器换网卡 你才有可能识别错误
------解决方案--------------------
类似与游戏帐号 与 计算机硬件的绑定!
帮顶
------解决方案--------------------
mac地址会受到保护 
所以不是很容易获取吧
------解决方案--------------------
客户端的mac地址在b/s中不通过控件的话你是获取不到的...
------解决方案--------------------
cookies吧,其它的很难,都有安全提示
------解决方案--------------------
mark
------解决方案--------------------
获取MAC地址(LAN内的机器能获得)
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 ", " ");

return dirResults;
}

string str=GetCustomerMac( "172.19.18.16 ");
int index = str.IndexOf( "MAC ");
str = str.Substring(index, str.Length - index);
Label1.Text = str;
------解决方案--------------------
用全局变量
------解决方案--------------------
用插件吧,否则很难
------解决方案--------------------
网上看的,不知道是否可行~~

ManagementObjectSearcher query =new ManagementObjectSearcher( "SELECT * FROM Win32_NetworkAdapterConfiguration ") ;
ManagementObjectCollection queryCollection = query.Get();
foreach( ManagementObject mo in queryCollection )
{
if(mo[ "IPEnabled "].ToString() == "True ")
MessageBox.Show(mo[ "MacAddress "].ToString());
}
------解决方案--------------------
activex控件。
------解决方案--------------------
总的来说很难,除非你不用b/s模式
------解决方案--------------------



session ID 不行么?