最近有个项目要检测第三方网页的流量监测,在网上找了好久,发现php和python多一些,.net的实在没有资源,最后看到了这篇文章 google的分析(analytics)js代码分析以及重写

就下载下来研究了一下,发现很不错,就用了这篇文章写了自己的流量监测。阿杜大神要是介意,可以联系我。

//<javascript language="javascript" type="text/javascript" src=服务器地址+路径+"statistics.js"> </script>
/*=====================================
|--------Author By BlackSoul---------|
|------------2006.04.27--------------|
|--------BlackSoulylk@gmail.com------|
|------http://blacksoul.cnblogs.cn---|
======================================
*/
//(function () {
var projectId = document.getElementById('atdanalytics').getAttribute('data');
document.write("<script src='http://pv.sohu.com/cityjson?ie=utf-8'><\/script>");
document.write("<script type='text/javascript' src='http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js'></script>");
//console.log(returnCitySN["cip"] + "," + returnCitySN['cid'] + "," + returnCitySN['cname']);
//定义全局量
var ur = "";                                                 //来源地址
var urp = new Array();                                        //来源参数名称
var urpv = new Array();                                       //来源参数值
var arrayCount = 0;                                           //参数数目
pageOpen = new Date();                                       //进入页面的时间
var reqURL = "http://115.29.76.144:9002/api/analytics/";          //接收数据的页面地址
//var reqURL = "http://localhost:3433/api/analytics/";
var GUID = Math.round(Math.random() * 2147483647);           //用户唯一随机数
var title = document.title;                                   //网页标题
var uexp = pageOpen.getTime() + (1000 * 60 * 60 * 24 * 30); //设置cookie过期时间 既回访用户的限定
var rtu = "false";                                            //指示用户是否回访用户
//浏览器特征信息
var brower = new Array();
/*
* brower[0] 浏览器类型
* brower[1] 浏览器版本
* brower[2] 浏览器java是否打开 1开-1关
* brower[3] 浏览器flash版本
* brower[4] 浏览器操作系统
* brower[5] 浏览器分辨率
* brower[6] 浏览器色深
* brower[7] 浏览器语言
* brower[8] 浏览器插件 (弃用)
*/
var sEn = new Array(); //搜索引擎的名称
var keyWord = new Array(); //关键字传输形式
sEn[0] = "google"; keyWord[0] = "q";
sEn[1] = "yahoo"; keyWord[1] = "p";
sEn[2] = "msn"; keyWord[2] = "q";
sEn[3] = "aol"; keyWord[3] = "query";
sEn[4] = "lycos"; keyWord[4] = "query";
sEn[5] = "ask"; keyWord[5] = "q";
sEn[6] = "altavista"; keyWord[6] = "q";
sEn[7] = "search"; keyWord[7] = "q";
sEn[8] = "netscape"; keyWord[8] = "query";
sEn[9] = "earthlink"; keyWord[9] = "q";
sEn[10] = "cnn"; keyWord[10] = "query";
sEn[11] = "looksmart"; keyWord[11] = "key";
sEn[12] = "about"; keyWord[12] = "terms";
sEn[13] = "excite"; keyWord[13] = "qkw";
sEn[14] = "mamma"; keyWord[14] = "query";
sEn[15] = "alltheweb"; keyWord[15] = "q";
sEn[16] = "gigablast"; keyWord[16] = "q";
sEn[17] = "voila"; keyWord[17] = "kw";
sEn[18] = "virgilio"; keyWord[18] = "qs";
sEn[19] = "teoma"; keyWord[19] = "q";
sEn[20] = "baidu"; keyWord[20] = "wd";
//test data----------------------------//-----------/-/-/-/-/-/-/-/-/-/-/-
//sEn[21] = "localhost"; keyWord[21] = "q";//-----------------------------比较url,如果为搜索引擎则保存关键字-------------
function getKeyword(url) {var hostname;if (url.indexOf(".") == -1){ hostname = url; }else{ hostname = url.substring(url.indexOf("."), url.lastIndexOf(".")); }for (var i = 0; i < sEn.length; i++) {if (hostname == sEn[i]) {for (var j = 0; j < urp.length; j++) {if (urp[j] == keyWord[i]) {return urpv[j];}}}}return "";
}
//将URL转换为地址和页面参数和参数值 参数uri为页面地址
function gethn(uri) {if (!uri || uri == "") return "";ur = uri;var sub;//带参数if (ur.indexOf("?") != -1) {var url = ur.substring(0, ur.indexOf("?"));var para = ur.substring(ur.indexOf("?") + 1, ur.length);while (para.length > 0) {if (para.indexOf("&") == -1) {urp[arrayCount] = para.substring(0, para.indexOf("="));urpv[arrayCount] = para.substring(para.indexOf("=") + 1, para.length);break;}sub = para.substring(0, para.indexOf("&"));urp[arrayCount] = sub.substring(0, sub.indexOf("="));urpv[arrayCount] = sub.substring(sub.indexOf("=") + 1, sub.length);para = para.substring(para.indexOf("&") + 1, para.length);arrayCount++;}return url;}elsereturn ur;
}//----------------------------获得域名---------------------------------------------
function getHostName(url) {url = url.substring(url.indexOf('://') + 3, url.length);url = url.substring(0, url.indexOf("/"));return url;
}//---------------------------获得flash版本------------------------------------------
function getFlash() {var f = "-1", n = navigator;if (n.plugins && n.plugins.length) {for (var ii = 0; ii < n.plugins.length; ii++) {if (n.plugins[ii].name.indexOf('Shockwave Flash') != -1) {f = n.plugins[ii].description.split('Shockwave Flash ')[1];break;}}} else if (window.ActiveXObject) {for (var ii = 10; ii >= 2; ii--) {try {var fl = eval("new ActiveXObject('ShockwaveFlash.ShockwaveFlash." + ii + "');");if (fl) { f = ii + '.0'; break; }}catch (e) { }}}if (f == "-1")return f;elsereturn f.substring(0, f.indexOf(".") + 2);
}//--------------------------设置异步传输停留时间-----------------------------------
function createXMLHttpRequest() {if (window.XMLHttpRequest) {return new XMLHttpRequest();}else if (window.ActiveXObject) {return new ActiveXObject("Microsoft.XMLHttp");}
}
//需要说明的一点是GetResidentTime这个函数,google采用了img.load的方法加载了接收处理信息页面的,
//需要再服务器端配置将后缀为.gif或你所取的其他形式的文件使用aspx的方式编译运行.
//因为我原来考虑的是使用xmlHttp异步调用.但是页面退出的时候有时候不执行.所以就弃用了.
//获得停留时间
function GetResidentTime() {pageClose = new Date();minutes = (pageClose.getMinutes() - pageOpen.getMinutes());if (minutes < 0) {minutes = minutes + 60;}seconds = (pageClose.getSeconds() - pageOpen.getSeconds());if (seconds < 0) { seconds += 60; }time = (seconds + (minutes * 60));//------------------------修改此处为接收链接地址 XML 异步传输------------------------------------//    var xmlHttp = createXMLHttpRequest();//    xmlHttp.open("POST", reqURL + "firstvisit.aspx?" + StrPara(), false);//    xmlHttp.send(null);//----------------------------图片形式传递-------------------------------------------------------if (isReturn() == false) {var i = new Image(1, 1);i.src = reqURL + "firstvisit/" + projectId + "?" + StrPara() + "&GUID=" + GUID + "&st=" + time;i.onload = function () {LoadVoid();}//进入页面的信息//if (getCookieValue("GUID") == "noCookie") {//    return;//}//var j = new Image(1, 1);//j.src = reqURL + "pageview/" + projectId + "?" + pageView() + "&st=" + time;//j.onload = function () {//    LoadVoid();//}}else {var i = new Image(1, 1);i.src = reqURL + "pageview/" + projectId + "?" + pageView() + "&st=" + time;i.onload = function () {LoadVoid();}}
}
function LoadVoid() { return; }
//-----------------------------取得第一次浏览网站参数字符串----------------------------------------
function StrPara() {//获得浏览器信息BrowserInfo();var para = "";//IP地址和城市名称if (returnCitySN) {para += "ip=" + returnCitySN["cip"] + "&";}if (remote_ip_info) {para += "country=" + remote_ip_info["country"] + "&";para += "province=" + remote_ip_info["province"] + "&";para += "city=" + remote_ip_info["city"] + "&";}//来源地址para += "urr=" + getHostName(gethn(document.referrer)) + "&";if (para == "urr=&")para = "";//参数        var _urp = "urp=";for (var j = 0; j < urp.length; j++) {_urp += urp[j] + ",";}_urp = _urp.substring(0, _urp.length - 1) + "&";if (_urp == "urp&")_urp = "";para += _urp;var _urpv = "urpv=";for (var i = 0; i < urpv.length; i++) {_urpv += urpv[i] + ",";}_urpv = _urpv.substring(0, _urpv.length - 1) + "&";if (_urpv == "urpv&")_urpv = "";para += _urpv;//关键字    para += "keyWord=" + getKeyword(getHostName(gethn(document.referrer))) + "&";para += "bType=" + brower[0] + "&";para += "bVersion=" + brower[1] + "&";para += "bJava=" + brower[2] + "&";para += "bFlash=" + brower[3] + "&";para += "bOS=" + brower[4] + "&";para += "bScr=" + brower[5] + "&";para += "bColor=" + brower[6] + "&";para += "bHl=" + brower[7];//para += "bPlugin=" + brower[8];return para;
}
//-----------------------用户非第一次浏览网站----------------------------
function pageView() {var para = "";var strTmp = "";if (returnCitySN) {para += "ip=" + returnCitySN["cip"] + "&";//para += "cname=" + returnCitySN["cname"] + "&";}if (remote_ip_info) {para += "country=" + remote_ip_info["country"] + "&";para += "province=" + remote_ip_info["province"] + "&";para += "city=" + remote_ip_info["city"] + "&";}para += "urr=" + getHostName(gethn(document.referrer)) + "&";if (para == "urr=&")para = "";//获得当前地址strTmp = "cur=" + gethn(getHref()) + "&";para += strTmp;//获得参数strTmp = "urp=";for (var j = 0; j < urp.length; j++) {strTmp += urp[j] + ",";}strTmp = strTmp.substring(0, strTmp.length - 1) + "&";if (strTmp == "urp&")strTmp = "";para += strTmp;strTmp = "urpv=";for (var i = 0; i < urpv.length; i++) {strTmp += urpv[i] + ",";}strTmp = strTmp.substring(0, strTmp.length - 1) + "&";if (strTmp == "urpv&")strTmp = "";para += strTmp;para += "GUID=" + getCookieValue("GUID") + "&";para += "title=" + title;return para;
}
//-----------------------------------------------------------------------------
//是否回访用户
function isReturn() {//如果没有cookie,则为新的用户,设置初始cookie,用户GUID,初次到访时间.上次到访时间为本次if (getCookieValue() == "noCookie") {setCookie("GUID", GUID);setCookie("lastTime", pageOpen.getTime());setCookie("firstTime", pageOpen.getTime());return false;}//反之为回访,重设回访时间else {//若首次进入时间与当前时间比较超多一个月,则为新用户,针对回访用户if ((getCookie("firstTime") + 1000 * 60 * 60 * 24 * 30) < pageOpen.getTime()) {setCookie("GUID", GUID);setCookie("lastTime", pageOpen.getTime());setCookie("firstTime", pageOpen.getTime());return false;}//若首次访问时间小于一个月,大于一天,设为回访用户if ((getCookie("lastTime") + 1000 * 60 * 60 * 24) > pageOpen.getTime()) {setCookie("lastTime", pageOpen.getTime());return true;}return true;}
}
//-----------------------获得当前地址-----------------------------
function getHref() {return document.location.href;
}
//-----------------------cookie操作开始-----------------------------------------------------------------------------------------------------------------
//设定Cookie值
function setCookie(name, value) {var expdate = new Date();var argv = setCookie.arguments;var argc = setCookie.arguments.length;var expires = 15768000;var path = (argc > 3) ? argv[3] : null;var domain = (argc > 4) ? argv[4] : null;var secure = (argc > 5) ? argv[5] : false;if (expires != null) {//设置过期时间24小时expdate.setTime(uexp);document.cookie = name + "=" + escape(value) + ((expires == null) ? "" : ("; expires=" + expdate.toGMTString()))+ ((path == null) ? "" : ("; path=" + path)) + ((domain == null) ? "" : ("; domain=" + domain))+ ((secure == true) ? "; secure=" : "");}
}
function delCookie(name)//删除Cookie
{var exp = new Date();exp.setTime(exp.getTime() - 1);var cval = getCookie(name);document.cookie = name + "=" + cval + "; expires=" + exp.toGMTString();
}
//获得Cookie的值
function getCookie(fname) {var name, value;var cookies = new Object();var beginning, middle, end;beginning = 0;while (beginning < document.cookie.length) {middle = document.cookie.indexOf("=", beginning);end = document.cookie.indexOf(";", beginning);if (end == -1) {end = document.cookie.length;}if ((middle > end) || (middle == -1)) {name = document.cookie.substring(beginning, end);value = "";}else {name = document.cookie.substring(beginning, middle);value = document.cookie.substring(middle + 1, end);}if (name == fname) {return unescape(value);}beginning = end + 2;}
}//-----获取GUID的cookie是否存在获得---------------------------------------------------
function getCookieValue() {var guid = getCookie("GUID");if (guid != null) {return guid;}else {return "noCookie";}
}
//---------------------获得注册用户cookie---------------------------------------------
function getRegUserCookie() {return;
}
//-----------------------------cookie 操作完毕------------------------------------------------------------------------------------------------------------
//获得插件
function getPlugin() {var plugin = "";var ua = navigator.userAgent.split(";");if (ua.length < 4)return "";for (var i = 4; i < ua.length; i++) {plugin += ua[i] + ",";}return plugin.substring(0, plugin.length - 2);
}
//-----------------------------------------------------------------------------
//浏览器特征信息
function BrowserInfo() {var browser = BroswerUtil.getBrowserVersion();console.log(brower);brower[0] = browser[0];brower[1] = browser[1];brower[7] = navigator.language;if (navigator.appName == "Netscape") {brower[7] = navigator.language;}else if (navigator.appName == "Microsoft Internet Explorer") {brower[7] = navigator.userLanguage;}brower[2] = navigator.javaEnabled() ? 1 : -1;brower[3] = getFlash();brower[4] = BroswerUtil.CurrentSystem();if (self.screen) {sr = screen.width + "x" + screen.height;sc = screen.colorDepth + "-bit";}else if (self.java) {var j = java.awt.Toolkit.getDefaultToolkit();var s = j.getScreenSize();sr = s.width + "x" + s.height;}//分辨率brower[5] = sr;//色深brower[6] = sc;//插件列表//brower[8] = getPlugin();
}
BroswerUtil = {//检测浏览器版本getBrowserVersion: function () {var agent = navigator.userAgent.toLowerCase();var arr = [];var Browser = "";var Bversion = "";var verinNum = "";//IEif (agent.indexOf("msie") > 0) {var regStr_ie = /msie [\d.]+;/gi;Browser = "IE";Bversion = "" + agent.match(regStr_ie)}//firefoxelse if (agent.indexOf("firefox") > 0) {var regStr_ff = /firefox\/[\d.]+/gi;Browser = "firefox";Bversion = "" + agent.match(regStr_ff);}//Chromeelse if (agent.indexOf("chrome") > 0) {var regStr_chrome = /chrome\/[\d.]+/gi;Browser = "chrome";Bversion = "" + agent.match(regStr_chrome);}//Safarielse if (agent.indexOf("safari") > 0 && agent.indexOf("chrome") < 0) {var regStr_saf = /version\/[\d.]+/gi;Browser = "safari";Bversion = "" + agent.match(regStr_saf);}//Operaelse if (agent.indexOf("opera") >= 0) {var regStr_opera = /version\/[\d.]+/gi;Browser = "opera";Bversion = "" + agent.match(regStr_opera);} else {var browser = navigator.appName;if (browser == "Netscape") {var version = agent.split(";");var trim_Version = version[7].replace(/[ ]/g, "");var rvStr = trim_Version.match(/[\d\.]/g).toString();var rv = rvStr.replace(/[,]/g, "");Bversion = rv;Browser = "IE"}}verinNum = (Bversion + "").replace(/[^0-9.]/ig, "");arr.push(Browser);arr.push(verinNum);return arr;},//---------------------------获得操作系统---------------------------CurrentSystem: function () {var system = {win: false,mac: false,xll: false,iphone: false,ipod: false,ipad: false,ios: false,android: false,//nokiaN: false,//winMobile: false,//wii: false,//ps: false};var ua = navigator.userAgent;// 检测平台var p = navigator.platform;system.win = p.indexOf('Win') == 0;system.mac = p.indexOf('Mac') == 0;system.xll = (p.indexOf('Xll') == 0 || p.indexOf('Linux') == 0);// 检测Windows操作系统if (system.win) {if (/Win(?:dows )?([^do]{2})\s?(\d+\.\d+)?/.test(ua)) {if (RegExp['$1'] == 'NT') {switch (RegExp['$2']) {case '5.0':system.win = 'Win2000';break;case '5.1':system.win = 'WinXP';break;case '6.0':system.win = 'WinVista';break;case '6.1':system.win = 'Win7';break;case '6.2':system.win = 'Win8';break;case '10.0':system.win = 'Win10';break;default:system.win = 'WinNT';break;}} else if (RegExp['$1'] == '9x') {system.win = 'WinME';} else {system.win = RegExp['$1'];}}}// 移动设备system.iphone = ua.indexOf('iPhone') > -1;system.ipod = ua.indexOf('iPod') > -1;system.ipad = ua.indexOf('iPad') > -1;//system.nokiaN = ua.indexOf('nokiaN') > -1;// windows mobile//if (system.win == 'CE') {//    system.winMobile = system.win;//} else if (system.win == 'Ph') {//    if (/Windows Phone OS (\d+.\d)/i.test(ua)) {//        system.win = 'Phone';//        system.winMobile = parseFloat(RegExp['$1']);//    }//}// 检测IOS版本//if (system.mac && ua.indexOf('Mobile') > -1) {//    if (/CPU (?:iPhone )?OS (\d+_\d+)/i.test(ua)) {//        system.ios = parseFloat(RegExp['$1'].replace('_', '.'));//    } else {//        system.ios = 2;    // 不能真正检测出来,所以 只能猜测//    }//}// 检测Android版本if (/Android (\d+\.\d+)/i.test(ua)) {system.android = parseFloat(RegExp['$1']);}// 游戏系统//system.wii = ua.indexOf('Wii') > -1;//system.ps = /PlayStation/i.test(ua);if (system.win != false) {return "win";}if (system.mac != false) {return "mac";}if (system.xll != false) {return "linux";}if (system.iphone != false) {return "iphone";}if (system.ipod != false) {return "ipod";}if (system.ipad != false) {return "ipad";}if (system.android != false) {return "android";}return "win";//return {//    system: system//}}
};
//})();

里面修改了,第一次访问只提交了一次,获取浏览器类型和操作系统代码,IP地址和区域。资源都是在网上找的资源,就不一一感谢了,实在是找不到原创文章的链接。

网页只要加上

<script id="atdanalytics" type="text/javascript" src="http://115.29.76.144:9002/Scripts/statistic.js" data="81d124d9-0d4b-47a3-99c6-d315b4c39d7f"></script>
<script>window.onbeforeunload = GetResidentTime;
</script>

后端我使用webapi写的后面有下载链接

点击打开链接

.net仿google analysis第三方流量监测相关推荐

  1. 网络流量分析 NetFlow是什么 详解 科普 ~互联网业务流量监测技术的应用和设计---perfect

    前言 随着宽带互联网在中国的迅速发展,全国各大电信运营商的网络规模都在不断扩张,网络结构日渐复杂,网络业务日趋丰富,网络流量高速增长.电信运营商需要通过可靠.有效的网络业务流量监测系统对其网络以及网络 ...

  2. 外贸B2B网站如何做Google SEO获取流量?

    B2B品牌网站通过Google SEO获得自然流量是所有外贸网站的共同目标,因为B2B网站转化最高的来源渠道是自然流量. 对很多外贸狗来说B2B网站通过关键词获得排名很难,不管是你的服务或者产品都很少 ...

  3. 水电站生态流量监测 水利RTU遥测终端

    水利RTU遥测终端下水电站生态流量监测,在水电站泄水口部署,对水电站水位.流量.雨量.水质等目标参数进行采集上报远程监测,实现图像/视频监控.闸门开关控制等功能,为流域生态保护.水政管理.水文水资源监 ...

  4. cacti 网络流量监测图形分析工具

    Cacti是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具. 安装方法 一.安装rrdtool CentOS-5: rpm -ivh http://apt.sw. ...

  5. iftop是一个很好用的实时流量监测程序,跟使用iftop查看linux连接进程占用的实时流量...

    iftop是一个很好用的实时流量监测程序,跟top命令监测cpu内存等差不多 官方地址:http://www.ex-parrot.com/~pdw/iftop/ 安装方法: yum install - ...

  6. linux网络流量监测工具,linux下网络流量监控工具

    今天QA同学让我协助检测下一台服务器的网络流量.没干过这活,在网上随便找了个命令.后来,发现是不对的,为了以后不出丑,决定收集下网络流量监测相关的工具. 查看某个网卡收发数据的总量 方法一 方法二 2 ...

  7. android流量显示插件,[android]仿360状态,种流量监控桌面浮动显示

    [android]仿360状态,类流量监控桌面浮动显示 前两天看到部分音频播放器可以实现在桌面上显示歌词,360那个浮动的桌面提示,想不到怎么实现.然后查了些资料大致了解了下,比想象的简单多了.先看效 ...

  8. Linux网络实时流量监测工具iftop的安装使用

    概述:网络管理是基础运维中一个很重要的工作,在看似平静的网络运行中,其实暗流汹涌,要保证业务系统稳定运行,网络运维者必须要了解网络的流量状态.各个网段的使用情形,带宽的利用率.网络是否存在瓶颈等,同时 ...

  9. Linux平台下Ntop流量监测安装,并实现Netflow全过程

    Linux平台下Ntop流量监测安装,并实现Netflow全过程 更多原创教学视频详见: http://you.video.sina.com.cn/m/1443650204

最新文章

  1. php嵌入html还是html嵌入php,php嵌入html有哪几种方法
  2. php一个星期没找到工作怎么办_高校开学推迟,校园招聘遥遥无期,还没找到工作的应届生怎么办?...
  3. CreateProcess failed: The system cannot find the file specified.
  4. 如何更好的利用Node.js的性能极限
  5. Socket粘包问题终极解决方案—Netty版(2W字)!
  6. ZRender源码分析2:Storage(Model层)
  7. java鼠标事件_Java 模拟鼠标事件
  8. SQL Server 2012安装配置(Part3 )
  9. linux系统中文乱码的问题
  10. MyBatis 3.5.1 发布,Java 数据持久层框架
  11. 信息系统项目管理师(高项)考试的论文怎么写,怎么背?经验分享
  12. 华为2019年4月10日春招笔试题解
  13. 詹姆斯·格雷克《信息简史》读后感记录
  14. 支付宝-生成二维码实现url,实现支付
  15. 喜忧参半的电子烟 究竟是不是一个靠谱的创业机会?
  16. vue+cordova 实现第三方登录( QQ 微信 微博)之微博登录
  17. Android开机画面的修改
  18. Linux环境变量PSI指什么,psi是什么单位(pSI指标应用原则)
  19. APP开发-第三方SDK使用
  20. 20210510_AI方面常见试题

热门文章

  1. 【入门级】学习卡尔曼滤波
  2. 云基础架构安全_这是使您的云基础架构稳定,安全和可扩展的方法。
  3. Linux下minikube启动失败(It seems like the kubelet isn't running or healthy)
  4. 广告中的DSP、SSP和ADX
  5. 随机抽奖转盘微信小程序项目源码
  6. 密码学入门(3):分组密码的模式
  7. 大容量充电宝什么牌子最好?市面上最大容量充电宝推荐
  8. cool edit pro生成2.7khz_0dB音源方法
  9. 卡特兰数 Catalan number
  10. UML-1.用例图 用例表