我希望统计同一台机器用户访问系统的次数,本来可以通过IP地址识别,但是由于拨号用户IP地址是变化的、遇到代理也有问题,所以不准确.另外,恶意用户可以通过改变IP地址做出欺诈行为。请问有没有比较好的办法解决这个问题?

解决方案 »

  1.   

    需要获取对方MAC然后记录到数据库中比对下。
    获取对方MAC参见
    <% 
    dim remoteaddr 
    if Request.ServerVariables("HTTP_X_FORWARDED_FOR")=empty then 
    remoteaddr=Request.ServerVariables("REMOTE_ADDR") 
    else 
    remoteaddr=Request.ServerVariables("HTTP_X_FORWARDED_FOR") 
    end if Response.Write(GetMac(remoteaddr)) 
    '由于读取某IP的网卡MAC地址 
    '本程序通过调用arp命令通过查询本机arp表读取特定IP的MAC地址 
    '使用本程序需注意以下事项: 
    ' 本程序需要“WSCRIPT.SHELL”和“Scripting.FileSystemObject”两个组件,请确保您的服务器可以正常使用这两个组件 
    ' 本程序需要调用cmd.exe程序,请确保IIS来宾帐号对程序有访问权限。 
    ' 本程序需要临时文件保存结果,请确保IIS来宾帐号对临时目录有写权限。 

    function GetMac(IP) 
    On Error Resume Next 
    Dim oScript 
    Dim oFileSys, oFile 
    Dim All, szTempFile,ipc,phyc,typec 
    Dim TempPath 
    Set oScript = Server.CreateObject("WSCRIPT.SHELL") 
    Set oFileSys = Server.CreateObject("Scripting.FileSystemObject") 
    TempPath="d:\temp\" '临时目录 
    szTempFile = TempPath & oFileSys.GetTempName() ' 获取临时文件名 
    Call oScript.Run ("cmd.exe /c ping -n 2 " & IP, 0, True) '保证arp表中有此IP 
    Call oScript.Run ("cmd.exe /c arp -a " & IP & " > " & szTempFile, 0, True) 
    Set oFile = oFileSys.OpenTextFile (szTempFile, 1, False, 0) 
    All=oFile.ReadAll() 
    oFile.Close 
    If (IsObject(oFile)) Then 
    Call oFileSys.DeleteFile(szTempFile, True) 
    End If 
    arr = Split(All, vbCrLf) 
    If UBound(arr) = 4 Then 
    ipc = InStr(1, arr(2), "Internet Address") 
    phyc = InStr(1, arr(2), "Physical Address") 
    typec = InStr(1, arr(2), "Type") 
    If typec > phyc And phyc > ipc And ipc > 0 Then 
    GetMac=Ucase(Trim(CStr(Mid(arr(3), phyc, typec - phyc)))) 
    End If 
    End If 
    End function 
    %>
      

  2.   

    zeusvenus(清柳) :有c#的代码吗?谢谢。
      

  3.   

    http://community.csdn.net/Expert/topic/4259/4259707.xml?temp=.6607172
      

  4.   

    zeusvenus(清柳) :有c#的代码吗?谢谢。
    ----------------------------------------------------------------------------
    其实上面最主要的代码是:
    Call oScript.Run ("cmd.exe /c ping -n 2 " & IP, 0, True) '保证arp表中有此IP 
    Call oScript.Run ("cmd.exe /c arp -a " & IP & " > " & szTempFile, 0, True)
    你只要知道在C#中如何执行DOS命令就行了。
      

  5.   

    用mac码不是太准确把?
    代理前的ip也是可以获得的.