/** * Performs a DNS lookup on an IP address. * * @param address IP address to look up. * @return Returns a domain name. * @author Ben Forta (ben@forta.com) * @version 1, December 19, 2001 */ // Variables var iaclass=""; var addr=""; // Init class iaclass=CreateObject("java", "java.net.InetAddress"); // Get address addr=iaclass.getByName(arguments.address); for(i=1; i lte arrayLen(variables.activeusers);i=i+1){ if(variables.activeusers[i].clientid is arguments.clientid) ret=variables.activeusers[i]; } if(not structKeyExists(variables,"activeusers")) variables.activeusers=arrayNew(1); for(j=1; j lte listLen(variables.botList); j=j+1){ skipUpdate = skipUpdate + findNoCase(listGetAt(variables.botList,j),arguments.whoson.UserAgent,1); } for(j=1; j lte listLen(variables.ignorePages); j=j+1){ skipUpdate = skipUpdate + findNoCase(listGetAt(variables.ignorePages,j),arguments.whoson.CurrentPage,1); } // =================================================================== // Perform a sanity check: Does this IP have more than 10 hits logged? if(arrayLen(ipBlockList)){ for(i=1; i lte arrayLen(ipBlockList); i=i+1){ if(ipBlockList[i].ip is arguments.whoson.ip) skipIPCheck=skipIPCheck+1; } } if(skipIPCheck is 0){ for(j=1; j lte arrayLen(variables.activeusers); j=j+1){ if(variables.activeusers[j].ip is arguments.whoson.ip) n=n+1; } if(n gte variables.ipBlockListThreshhold){ // Add this IP to the ipBlockList tempHistory=structNew(); tempHistory.ip=arguments.whoson.ip; arrayAppend(variables.ipBlockList,tempHistory); skipUpdate=skipUpdate+n; for(i=arrayLen(variables.activeusers); i gt 0; i=i-1){ arrayDeleteAt(variables.activeusers,i); } // Update the Max counts to reflect the correct number variables.users.maxcount=variables.users.maxcount-(variables.ipBlockListThreshold-1); // Purge out info in WhosOnCFCStats, if it exists if(structKeyExists(variables,"whosonstats")){ result=variables.whosonstats.purgeByIPAddress(thisIP=arguments.whoson.ip); } } } skipUpdate=skipUpdate+skipIPCheck; // END OF IP CHECKING // =================================================================== n=0; // Reset the userCount if we purged out any data userCount=arrayLen(variables.activeusers); // Purge out old entries if(userCount gt 0){ for(n=userCount; n gte 1; n=n-1){ if(DateDiff("n",variables.ActiveUsers[n].LastUpdated,Now()) gte WhosOn.defaultTimeout){// gte X where X=seconds to wait before purging from struct ArrayDeleteAt(variables.ActiveUsers,n); } } userCount=arrayLen(variables.activeusers); } if((skipUpdate is 0) or (arguments.showBots is true)){ // See if we can find the client in active user array for(n=1; n lte userCount; n=n+1){ if(variables.ActiveUsers[n].ClientID is WhosOn.thisClient) updateFlag=n; } // Insert / Update a client if(updateFlag is 0){ userData=structNew(); // This defines the information tracked on your user userData.UserID=WhosOn.thisUser; userData.ClientID=WhosOn.thisClient; userData.Created=Now(); userData.LastUpdated=Now(); userData.Referer=WhosOn.Referer; userData.IP=WhosOn.IP; userData.HostName=getHostName(address=WhosOn.IP); if(arguments.geoTrack){ gInfo=getGeoInfo(address=whoson.ip); userData.Coords=gInfo.coordinates; userData.Country=gInfo.country; userData.City=gInfo.local; } userData.CurrentPage=WhosOn.Prefix & WhosOn.ServerName & WhosOn.CurrentPage; //Joe Danziger requested MOD userData.EntryPage=userData.CurrentPage; userData.PageCount=1; if(len(WhosOn.QueryString)) userData.CurrentPage=userData.CurrentPage & "?#WhosOn.QueryString#"; userData.UserAgent=WhosOn.UserAgent; if(arguments.pagehistory){ userData.PageHistory=ArrayNew(1); tempHistory=structNew(); tempHistory.Page=userData.CurrentPage; tempHistory.PageTime=0; ArrayAppend(userData.PageHistory,tempHistory); } arrayAppend(variables.activeusers,userData); variables.structKeys=structKeyList(userData); userCount=arrayLen(variables.activeusers); if(structKeyExists(variables,"whosonstats")){ variables.whosonstats.updateClient(requestData=userData); } } else { // This defines the information updated after a user has been created variables.activeusers[updateFlag].UserID=WhosOn.thisUser; variables.activeusers[updateFlag].IP=WhosOn.IP; variables.activeusers[updateFlag].CurrentPage=WhosOn.Prefix & WhosOn.ServerName & WhosOn.CurrentPage; if(len(WhosOn.QueryString)) variables.activeusers[updateFlag].CurrentPage = variables.activeusers[updateFlag].CurrentPage & "?#WhosOn.QueryString#"; if(arguments.pagehistory){ result=arrayLen(variables.activeusers[updateFlag].PageHistory); variables.activeusers[updateFlag].PageHistory[result].PageTime=DateDiff("s",variables.activeusers[updateFlag].LastUpdated,Now()); tempHistory=structNew(); tempHistory.Page=variables.activeusers[updateFlag].CurrentPage; tempHistory.PageTime=0; ArrayAppend(variables.activeusers[updateFlag].PageHistory,tempHistory); // Clean the user history result=arrayLen(variables.activeusers[updateFlag].PageHistory); n=0; for(j=result; j gt 0; j=j-1){ n=n+variables.activeusers[updateFlag].PageHistory[j].PageTime; if(n gt variables.storeHistory*60) arrayDeleteAt(variables.activeusers[updateFlag].PageHistory,j); } } variables.activeusers[updateFlag].PageCount+=1; variables.activeusers[updateFlag].LastUpdated=Now(); if(structKeyExists(variables,"whosonstats")){ result=variables.whosonstats.updateClient(requestData=variables.activeusers[updateFlag]); } } }