首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

怎么获得客户端的机器码或者其他可以唯一标识的,要不财富都被他们领光了,5555555.

2012-01-10 
如何获得客户端的机器码或者其他可以唯一标识的,要不财富都被他们领光了,5555555...我在做一个游戏网站,主

如何获得客户端的机器码或者其他可以唯一标识的,要不财富都被他们领光了,5555555...

      我在做一个游戏网站,主页有个功能:一个身份证号可以领取一个游戏帐号和密码,
帐号里送了3w财富。
      一开始是根据ip地址来限制的,一个ip地址限领5次,后来发现有人生成很多身份证号码,换着ip地址天天来领取,1w个帐号很快就没了....
      怎么能获得客户端的机器码或者别的唯一标识?   就可以控制换ip的问题了。
      或者,大家有更好的办法吗?
      谢谢,在线等待.........



[解决办法]
你可以根据网卡地址来判断
[解决办法]
楼主搞什么游戏网站啊~~~这么热门
楼主可以这么来搞,1w个帐户,每天只发送100个,发送完成后自动关闭注册。
如果用户用的代理来注册,你的什么保障都没有了
[解决办法]
1W

[解决办法]
web客户端获取机器码?
很有难度...
[解决办法]
不一定要用技术手段,比如你的3w资源不要一次送,你可以注册以后比如每天送1千,送一个月~~~也是三万,但是如果当天没有上线,那么那天的一千就没了~~ 如果连续3天没有上线,那么后面送的也全没了~~~


我只是举个简单的例子,因为不知道3W在你那里到底是多少。这么做,对一般用户影响不大,但是对恶意注册的用户则大大增加了其倒资源的难度,一个人注册一个账户很容易,注册完把资源倒到另外一个就可以丢了~~~ 但是你让他记住几百个用户名还每天登陆一下,这可就累了,这样就阻止了部分人的恶意注册,至于那种非常坚持不懈一定要跟你对着干的,应该不会太多,减少就行了,杜绝太难。


也许不是一天一次,是一周一次,这个就看你游戏黏度和性质决定了。
[解决办法]
这个问题不能纯靠技术解决
就像CSDN的帐户一样
[解决办法]
o
[解决办法]
LZ 逻辑没考虑好
[解决办法]
呵呵,,对..用变通的方式。。
[解决办法]
获取客户端的mac地址,这个能唯一标示
[解决办法]
mac一样可以改掉
....

楼主应该 考虑更合理的 发放方式
[解决办法]
是的,我觉得lz的思路走进了死胡同,在游戏开发中间,因为你就是指定法律的人,下面哪些玩家就是在你的法律下生存的人,所以你不能靠一些损害玩家的方式去限制(网吧的玩家可能就因为你的绑定而不能注册了),而是应该通过你制定的法律限制那些恶意的人群.
上面的一些点子还有有借鉴意义的
[解决办法]
获取MAC

using System;
using System.Security.Cryptography;
using System.Management;
public ArrayList GetIt()
{
ManagementClass mc = new ManagementClass( "Win32_NetworkAdapterConfiguration ");
ManagementObjectCollection moc = mc.GetInstances();
ArrayList strArr = new ArrayList();

//网卡数
foreach(ManagementObject mo in moc)
{
if((bool)mo[ "IPEnabled "])
{
strArr.Add(mo[ "MacAddress "].ToString().Replace( ": ", " "));
}
mo.Dispose();
}

return strArr;
}
[解决办法]
<HTML> <HEAD> <TITLE> WMI Scripting HTML </TITLE>
<META http-equiv=Content-Type content= "text/html; charset=gb2312 ">
<SCRIPT language=JScript event= "OnCompleted(hResult,pErrorObject, pAsyncContext) " for=foo>
document.forms[0].txtMACAddr.value=unescape(MACAddr);
document.forms[0].txtIPAddr.value=unescape(IPAddr);
document.forms[0].txtDNSName.value=unescape(sDNSName);
//document.formbar.submit();
</SCRIPT>

<SCRIPT language=JScript event=OnObjectReady(objObject,objAsyncContext) for=foo>


if(objObject.IPEnabled != null && objObject.IPEnabled != "undefined " && objObject.IPEnabled == true)
{
if(objObject.MACAddress != null && objObject.MACAddress != "undefined ")
MACAddr = objObject.MACAddress;
if(objObject.IPEnabled && objObject.IPAddress(0) != null && objObject.IPAddress(0) != "undefined ")
IPAddr = objObject.IPAddress(0);
if(objObject.DNSHostName != null && objObject.DNSHostName != "undefined ")
sDNSName = objObject.DNSHostName;
}
</SCRIPT>

<META content= "MSHTML 6.00.2800.1106 " name=GENERATOR> </HEAD>
<BODY>
<OBJECT id=locator classid=CLSID:76A64158-CB41-11D1-8B02-00600806D9B6 VIEWASTEXT> </OBJECT>
<OBJECT id=foo classid=CLSID:75718C9A-F029-11d1-A1AC-00C04FB6C223> </OBJECT>
<SCRIPT language=JScript>
var service = locator.ConnectServer();
var MACAddr ;
var IPAddr ;
var DomainAddr;
var sDNSName;
service.Security_.ImpersonationLevel=3;
service.InstancesOfAsync(foo, 'Win32_NetworkAdapterConfiguration ');
</SCRIPT>

<FORM id= "formfoo " name= "formbar " action= "index.do " method= "post "> <INPUT value= "00-11-11-B4-52-EF " name= "txtMACAddr "> <INPUT value= "202.102.188.170 " name= "txtIPAddr "> <INPUT value= "jackly " name= "txtDNSName "> </FORM> </BODY> </HTML>
[解决办法]
无法通过技术解决的问题,客户端总有办法将自己伪装成一个新的客户端。

你可以设置例如财富不能转赠之类的策略,让用户每次领取财富都分配到一个新的账号,而无法把财富集中的一个账号。
[解决办法]
IE在安全设置里面是禁止不安全的 ActiveX 控件的,用 JavaScript 是获取不到 Mac,ip,机器名的。
[解决办法]

[解决办法]
这个问题不能纯靠技术解决
就像CSDN的帐户一样
[解决办法]
哈。。。。。有14。。。。
[解决办法]
可以获取硬盘、主板等序列号。

///////////////////////////////////////////////////////////////////////
//
//读取硬盘序列号
//参数:vstrSNo硬盘序列号
//vstrType硬盘型号
//返回值:0正确
//时间:2006-01-09
//版本:1.0
//历史:
//
///////////////////////////////////////////////////////////////////////
int GetDiskSNo(vector <CString> & vstrSNo, vector <CString> & vstrType)
{
BYTE ucTemp;
BYTE pucSNo[20];
BYTE pucType[40];
BYTE pucTemp[40];
int nStartPos;
int nEndPos;
int nSCount;
int nTemp;
DWORD ulOutBytes;
CString strDisk;
CString strTemp;

HANDLE hDisk;

GETVERSIONINPARAMS uVersionParams;

memset(&uVersionParams, 0, sizeof(GETVERSIONINPARAMS));

vstrSNo.clear();
vstrType.clear();

//枚举硬盘
for (int nCount = 0; nCount < 4; nCount++)
{
strDisk.Format( "\\\\.\\PHYSICALDRIVE%d ", nCount );
hDisk = CreateFile(strDisk, GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
if (hDisk != INVALID_HANDLE_VALUE)
{
if (DeviceIoControl(hDisk, 0x00074080/*DFP_GET_VERSION*/,
NULL, 0, &uVersionParams, sizeof(GETVERSIONINPARAMS),
&ulOutBytes, NULL))


{
if (uVersionParams.bIDEDeviceMap != 0)
{
BYTE ucIDCmd = 0;
SENDCMDINPARAMS uSendCmd;

memset(&uSendCmd, 0, sizeof(SENDCMDINPARAMS));

ucIDCmd = (uVersionParams.bIDEDeviceMap > > nCount & 0x10) ? IDE_ATAPI_IDENTIFY : IDE_ATA_IDENTIFY;
BYTE pucIdOutCmd[sizeof(SENDCMDOUTPARAMS) + IDENTIFY_BUFFER_SIZE - 1] = { 0 };

// Set up data structures for IDENTIFY command.
uSendCmd.cBufferSize = IDENTIFY_BUFFER_SIZE;
uSendCmd.irDriveRegs.bFeaturesReg = 0;
uSendCmd.irDriveRegs.bSectorCountReg = 1;
uSendCmd.irDriveRegs.bSectorNumberReg = 1;
uSendCmd.irDriveRegs.bCylLowReg = 0;
uSendCmd.irDriveRegs.bCylHighReg = 0;

// calc the drive number.
ucTemp = (BYTE)nCount;
uSendCmd.irDriveRegs.bDriveHeadReg = 0xA0 | ((ucTemp & 1) < < 4);

// The command can either be IDE identify or ATAPI identify.
uSendCmd.irDriveRegs.bCommandReg = ucIDCmd;
uSendCmd.bDriveNumber = ucTemp;
uSendCmd.cBufferSize = IDENTIFY_BUFFER_SIZE;

if (DeviceIoControl(hDisk, DFP_RECEIVE_DRIVE_DATA,
&uSendCmd, sizeof(SENDCMDINPARAMS) - 1,
pucIdOutCmd,
sizeof(SENDCMDOUTPARAMS) + IDENTIFY_BUFFER_SIZE - 1,
&ulOutBytes, NULL))
{
//拷贝序列号
memset(pucTemp, 0, 40);
strTemp.Empty();

memcpy(pucSNo,
((IDINFO*)(((PSENDCMDOUTPARAMS)pucIdOutCmd)-> bBuffer))-> sSerialNumber, 20);
nStartPos = 0;
while (pucSNo[nStartPos] == 32)
{
nStartPos++;
}
nEndPos = 19;
while (pucSNo[nEndPos] == 0)
{
nEndPos--;
}
memcpy(pucTemp, &pucSNo[nStartPos], nEndPos - nStartPos + 1);
for (nSCount = 0; nSCount < nEndPos - nStartPos; nSCount += 2)
{
ucTemp = pucTemp[nSCount + 1];
pucTemp[nSCount + 1] = pucTemp[nSCount];
pucTemp[nSCount] = ucTemp;
}
pucTemp[nEndPos - nStartPos + 1] = '\0 ';
strTemp = pucTemp;
vstrSNo.push_back( strTemp );

//拷贝型号
memset(pucTemp, 0, 40);
strTemp.Empty();

memcpy(pucType,
((IDINFO*)(((PSENDCMDOUTPARAMS)pucIdOutCmd)-> bBuffer))-> sModelNumber, 40);
for (nSCount = 0; nSCount < 40; nSCount++)
{
if (pucType[nSCount] == 32)
{
break;
}
else
{
nTemp = nSCount;
pucTemp[nSCount] = pucType[nSCount];
}
}
for (nSCount = 0; nSCount < nTemp; nSCount += 2)
{
ucTemp = pucTemp[nSCount + 1];
pucTemp[nSCount + 1] = pucTemp[nSCount];
pucTemp[nSCount] = ucTemp;
}
pucTemp[nTemp + 1] = '\0 ';
strTemp = pucTemp;
vstrType.push_back(strTemp);
}
}
}

CloseHandle(hDisk);
}
}

return 0;
}

[解决办法]
取mac的有时也有问题,这个问题跟那个投票系统原理差不多,想取唯一的标识,但一般来说不太可能达到很理想的目的,毕竟是客户端的东西,如果全部那么容易的就取到了,还有什么安全可言
[解决办法]
MAC地址也可以用软件修改之后,欺骗你的程序.
IP地址,更不可靠.这种问题,不能用纯技术来解决的...

热点排行