//全局变量 var urlbase="../../api.php";//api.php基地址 var messageList=null;//记录缓存,用于判断是否有新的记录 var setIntervalID=null;//定时器ID,用于网络自适应,调节timeout var interval=1000;//向服务器获取记录的时间间隔,同时也是ajax timeout时间 $(document).ready(function () { var self = this; var source = { datatype: "json", datafields: [ { name: 'user_IP' }, { name: 'location'}, { name: 'data_type'}, { name: 'keepsession' }, { name: 'user_port'}, { name: 'protocol'}, { name: 'request_method' }, { name: 'request_URI' }, { name: 'request_time' }, { name: 'headers_data' }, { name: 'get_data' }, { name: 'post_data' }, { name: 'cookie_data' }, { name: 'decoded_get_data' }, { name: 'decoded_post_data' }, { name: 'decoded_cookie_data' }, { name: 'request_date_string' }, { name: 'request_time_string' }, { name: 'request_date_and_time_string' }, { name: 'client' }, ], id: 'request_time', url: urlbase+"?cmd=list", root: 'data', }; var dataAdapter = new $.jqx.dataAdapter(source,{ downloadComplete: function (data, status, xhr) { if(status=="success") { var i = data.length; while (i--) { var date=new Date(data[i].request_time*1000) data[i].request_date_string=date.getFullYear()+ "年" +(date.getMonth() + 1) + "月" + date.getDate()+ "日"; data[i].request_time_string=date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds(); data[i].request_date_and_time_string=data[i].request_date_string+" "+data[i].request_time_string; data[i].keepsession=(data[i].keepsession==true)?"是":"否"; data[i].client=data[i].headers_data["User-Agent"]?get_client_info(data[i].headers_data["User-Agent"]):"未知"; var data_type=new Object(); var get_keys=Object.keys(data[i].get_data); var post_keys=Object.keys(data[i].post_data); var cookie_keys=Object.keys(data[i].cookie_data); if(get_keys.length>0) data_type.GET=get_keys; if(post_keys.length>0) data_type.POST=post_keys; if(cookie_keys.length>0) data_type.COOKIE=cookie_keys; data[i].data_type =JSON.stringify(data_type); } return data; } }, }); var initrowdetails = function (index, parentElement, gridElement, datarecord) { var tabsdiv = null; var information = null; var notes = null; var get_grid=null; var post_grid=null; var cookie_grid=null; var headers_grid=null; tabsdiv = $($(parentElement).children()[0]); if (tabsdiv != null) { information = tabsdiv.find('.information'); get_grid = tabsdiv.find('.get_grid'); post_grid = tabsdiv.find('.post_grid'); cookie_grid = tabsdiv.find('.cookie_grid'); headers_grid = tabsdiv.find('.headers_grid'); //datarecord.client=datarecord.headers_data["User-Agent"]?get_client_info(datarecord.headers_data["User-Agent"]):"未知"; var get_data=new Array(); for(key in datarecord.get_data){ var get_data_item=new Array(); get_data_item.push(key); get_data_item.push(datarecord.get_data[key]); var decoded_value=""; if(datarecord.decoded_get_data) decoded_value=datarecord.decoded_get_data[key]; get_data_item.push(decoded_value); get_data.push(get_data_item); } var get_source = { localdata: get_data, datafields: [ { name: 'key', type: 'string', map: '0'}, { name: 'value', type: 'string', map: '1' }, { name: 'decoded_value', type: 'string', map: '2' }, ], datatype: "array" }; var get_source_dataAdapter= new $.jqx.dataAdapter(get_source); get_grid.jqxGrid( { autorowheight: true, autorowheight: true, columnsautoresize: true, pageable: true, pagermode: "simple", scrollmode: 'deferred', localization: getLocalization('zh'), enablebrowserselection:true, columnsresize: true, height: 176, width: '100%', source: get_source_dataAdapter, ready: function () { if(get_source.localdata.length&&get_source.localdata.length>0) get_grid.jqxGrid('autoresizecolumn', 'key'); }, columns: datarecord.decoded_get_data?[ { text: '键', datafield: 'key' }, { text: '值', datafield: 'value' }, { text: '解码', datafield: 'decoded_value'}, ]:[ { text: '键', datafield: 'key' }, { text: '值', datafield: 'value'}, ] }); var post_data=new Array(); for(key in datarecord.post_data){ var post_data_item=new Array(); post_data_item.push(key); post_data_item.push(datarecord.post_data[key]); var decoded_value=""; if(datarecord.decoded_post_data) decoded_value=datarecord.decoded_post_data[key]; post_data_item.push(decoded_value); post_data.push(post_data_item); } var post_source = { localdata: post_data, datafields: [ { name: 'key', type: 'string', map: '0'}, { name: 'value', type: 'string', map: '1' }, { name: 'decoded_value', type: 'string', map: '2' }, ], datatype: "array" }; var post_source_dataAdapter= new $.jqx.dataAdapter(post_source); post_grid.jqxGrid( { ready: function () { if(post_source.localdata.length&&post_source.localdata.length>0) post_grid.jqxGrid('autoresizecolumn', 'key'); }, autorowheight: true, pageable: true, columnsautoresize: true, pagermode: "simple", scrollmode: 'deferred', localization: getLocalization('zh'), enablebrowserselection:true, columnsautoresize: true, columnsresize: true, height: 176, width: '100%', source: post_source_dataAdapter, columns: datarecord.decoded_post_data?[ { text: '键', datafield: 'key' }, { text: '值', datafield: 'value' }, { text: '解码', datafield: 'decoded_value'}, ]:[ { text: '键', datafield: 'key' }, { text: '值', datafield: 'value' }, ] }); var cookie_data=new Array(); for(key in datarecord.cookie_data){ var cookie_data_item=new Array(); cookie_data_item.push(key); cookie_data_item.push(datarecord.cookie_data[key]); var decoded_value=""; if(datarecord.decoded_cookie_data) decoded_value=datarecord.decoded_cookie_data[key]; cookie_data_item.push(decoded_value); cookie_data.push(cookie_data_item); } var cookie_source = { localdata: cookie_data, datafields: [ { name: 'key', type:'string', map:'0'}, { name: 'value', type:'string', map:'1'}, { name: 'decoded_value', type:'string', map:'2'}, ], datatype: "array" }; var cookie_source_dataAdapter= new $.jqx.dataAdapter(cookie_source); cookie_grid.jqxGrid( { ready: function () { if(cookie_source.localdata.length&&cookie_source.localdata.length>0) cookie_grid.jqxGrid('autoresizecolumn', 'key'); }, columnsautoresize: true, autorowheight: true, pageable: true, pagermode: "simple", scrollmode: 'deferred', localization: getLocalization('zh'), enablebrowserselection:true, columnsautoresize: true, columnsresize: true, height: 176, width: '100%', source: cookie_source_dataAdapter, columns: datarecord.decoded_cookie_data?[ { text: '键', datafield: 'key' }, { text: '值', datafield: 'value' }, { text: '解码', datafield: 'decoded_value'}, ]:[ { text: '键', datafield: 'key' }, { text: '值', datafield: 'value' }, ] }); var headers_data=new Array(); for(key in datarecord.headers_data){ var headers_data_item=new Array(); headers_data_item.push(key); headers_data_item.push(datarecord.headers_data[key]); headers_data.push(headers_data_item); } var headers_source = { localdata: headers_data, datafields: [ { name: 'key', type: 'string', map: '0'}, { name: 'value', type: 'string', map: '1' }, ], datatype: "array" }; var headers_source_dataAdapter= new $.jqx.dataAdapter(headers_source); headers_grid.jqxGrid( { ready: function () { if(headers_source.localdata.length&&headers_source.localdata.length>0) headers_grid.jqxGrid('autoresizecolumn', 'key'); }, columnsautoresize: true, autorowheight: true, pageable: true, pagermode: "simple", scrollmode: 'deferred', localization: getLocalization('zh'), enablebrowserselection:true, columnsautoresize: true, columnsresize: true, width: '100%', height: 176, source: headers_source_dataAdapter, columns: [ { text: '键', datafield: 'key' }, { text: '值', datafield: 'value'}, ] }); var container = $('
') container.appendTo($(information)); var leftcolumn = $('
'); var rightcolumn = $('
'); container.append(leftcolumn); container.append(rightcolumn); var data_item = "
日期: " + datarecord.request_date_string + "
"; var ip_item = "
IP: " + datarecord.user_IP + "
"; var method_item = "
协议: " + datarecord.request_method + "
"; var location_item = "
位置: " + datarecord.location + "
"; $(leftcolumn).append(data_item); $(leftcolumn).append(ip_item); $(leftcolumn).append(method_item); $(leftcolumn).append(location_item); var time_item = "
时间: " + datarecord.request_time_string + "
"; var port_item = "
端口: " + datarecord.user_port + "
"; var uri_item = "
访问地址: " + datarecord.request_URI + "
"; var client_item = "
客户端: " + datarecord.client + "
"; $(rightcolumn).append(time_item); $(rightcolumn).append(port_item); $(rightcolumn).append(uri_item); $(rightcolumn).append(client_item); $(tabsdiv).jqxTabs({ width:'95%', height: '100%' }); } } $("#panelGrid").jqxGrid( { pageable: true, ready: function () { //$('#panelGrid').jqxGrid('autoresizecolumn', 'request_date_and_time_string'); //$('#panelGrid').jqxGrid('autoresizecolumn', 'data_type'); //$('#panelGrid').jqxGrid('autoresizecolumn', 'user_IP'); }, pagerrenderer: function() { var container = $("
"); var deleteButton = $("
删除
"); var clearButton = $("
清空
"); var searchButton = $("
查询
"); container.append(deleteButton); container.append(clearButton); container.append(searchButton); deleteButton.jqxButton({width: 65,height: 20}); clearButton.jqxButton({width: 65,height: 20}); searchButton.jqxButton({width: 65,height: 20}); // delete selected row. deleteButton.click(function(event) { var selectedrowindex = $("#panelGrid").jqxGrid('getselectedrowindex'); if(selectedrowindex>=0) { $('#deleteConfirmWindow').jqxWindow('open'); $("#deleteConfirmWindow").addClass('animated'); } }); // reload grid data. clearButton.click(function(event) { $('#clearConfirmWindow').jqxWindow('open'); $("#clearConfirmWindow").addClass('animated'); //$("#panelGrid").jqxGrid({ // source: getAdapter() //}); }); // search for a record. searchButton.click(function(event) { //var offset = $("#panelGrid").offset(); $("#searchWindow").jqxWindow('open'); $("#searchWindow").addClass('animated'); //$("#jqxwindow").jqxWindow('move', offset.left + 30, offset.top + 30); }); var pageElementsContainer = $("
"); var datainfo = $("#panelGrid").jqxGrid('getdatainformation'); var paginginfo = datainfo.paginginformation; var leftButton = $("
"); leftButton.find('div').addClass('jqx-icon-arrow-left'); leftButton.width(36); leftButton.jqxButton({ theme: 'energyblue' }); var rightButton = $("
"); rightButton.find('div').addClass('jqx-icon-arrow-right'); rightButton.width(36); rightButton.jqxButton({ theme: 'energyblue' }); var label = $("
"); label.text("1-" + paginginfo.pagesize + ' of ' + datainfo.rowscount); leftButton.appendTo(pageElementsContainer); rightButton.appendTo(pageElementsContainer); label.appendTo(pageElementsContainer); pageElementsContainer.appendTo(container); self.label = label; // update buttons states. var handleStates = function(event, button, className, add) { button.on(event, function() { if (add == true) { button.find('div').addClass(className); } else button.find('div').removeClass(className); }); } rightButton.click(function() { $("#panelGrid").jqxGrid('gotonextpage'); }); leftButton.click(function() { $("#panelGrid").jqxGrid('gotoprevpage'); }); return container; }, //selectionmode: 'multiplerowsextended', scrollmode: 'logical', sortable:true, pagesize:25, localization: getLocalization('zh'), width: '100%', height:$("#nav-section").height()-$("#dash-logo").outerHeight(true)-3, source: dataAdapter, enablebrowserselection:true, columnsresize: true, rowdetails: true, rowdetailstemplate: { rowdetails: $("#xss-detail-template").html(), rowdetailsheight: 222 }, initrowdetails: initrowdetails, columns: [ { text: '时间', datafield: 'request_date_and_time_string',width:160 }, { text: 'IP', datafield: 'user_IP'}, { text: '来源', datafield: 'location' }, { text: '客户端', datafield: 'client' }, { text: '请求', datafield: 'request_method' ,width:60}, { text: '携带数据', datafield: 'data_type'}, { text: '保持连接', datafield: 'keepsession',width:60,cellsalign: 'center'} ] }); $("#panelGrid").on('pagechanged', function () { var datainfo = $("#panelGrid").jqxGrid('getdatainformation'); var paginginfo = datainfo.paginginformation; self.label.text(1 + paginginfo.pagenum * paginginfo.pagesize + "-" + Math.min(datainfo.rowscount, (paginginfo.pagenum + 1) * paginginfo.pagesize) + ' of ' + datainfo.rowscount); }); /*所有窗口初始化*/ //删除记录确认窗口 $('#deleteConfirmWindow').jqxWindow({ height: 100, width: 270, resizable: false, isModal: true, modalOpacity: 0.3, okButton: $('#deleteConfirm_ok'), cancelButton: $('#deleteConfirm_cancel'), autoOpen: false, }); $('#deleteConfirm_ok').jqxButton({ width: '65px' }); $('#deleteConfirm_cancel').jqxButton({ width: '65px' }); $('#deleteConfirmWindow').on('close', function (event) { if (event.args.dialogResult.OK) { var selectedrowindex = $("#panelGrid").jqxGrid('getselectedrowindex'); var id = $("#panelGrid").jqxGrid('getrowid', selectedrowindex); $.ajax({ url: urlbase+"?cmd=del&id="+id, dataType: "json", timeout : interval, success: function(data) { if(data==true) $("#panelGrid").jqxGrid('deleterow', id); else { $('#failedWindow').jqxWindow('open'); $("#failedWindow").addClass('animated'); } }, complete : function(XMLHttpRequest,status){     if(status=='timeout')     { $('#failedWindow').jqxWindow('open'); $("#failedWindow").addClass('animated'); }   } }); } }); //清空记录确认窗口 $('#clearConfirmWindow').jqxWindow({ height: 100, width: 270, resizable: false, isModal: true, modalOpacity: 0.3, okButton: $('#clearConfirm_ok'), cancelButton: $('#clearConfirm_cancel'), autoOpen: false, }); $('#clearConfirm_ok').jqxButton({ width: '65px' }); $('#clearConfirm_cancel').jqxButton({ width: '65px' }); $('#clearConfirmWindow').on('close', function (event) { if (event.args.dialogResult.OK) { $.ajax({ url: urlbase+"?cmd=clear", dataType: "json", timeout : interval, success: function(data) { if(data==true) $('#panelGrid').jqxGrid('clear'); else { $('#failedWindow').jqxWindow('open'); $("#failedWindow").addClass('animated'); } }, complete : function(XMLHttpRequest,status){     if(status=='timeout')     { $('#failedWindow').jqxWindow('open'); $("#failedWindow").addClass('animated'); }   } }); } }); $('#failedWindow').jqxWindow({ height: 100, width: 270, resizable: false, isModal: true, modalOpacity: 0.3, okButton: $('#failed_ok'), autoOpen: false, }); $('#failed_ok').jqxButton({ width: '65px' }); //查询窗口 $("#searchWindow").jqxWindow({ resizable: false, autoOpen: false, width: 210, height: 180 }); // create find and clear buttons. $("#findButton").jqxButton({ width: 70}); $("#clearButton").jqxButton({ width: 70}); // find records that match a criteria. $("#dropdownlist").jqxDropDownList({ autoDropDownHeight: true, selectedIndex: 0, width: 200, height: 23, source: [ '时间', 'IP', '来源', '客户端','请求', '携带数据', '保持连接' ] }); $("#findButton").click(function () { $("#panelGrid").jqxGrid('clearfilters'); var searchColumnIndex = $("#dropdownlist").jqxDropDownList('selectedIndex'); var datafield = ""; switch (searchColumnIndex) { case 0: datafield = "request_date_and_time_string"; break; case 1: datafield = "user_IP"; break; case 2: datafield = "location"; break; case 3: datafield = "client"; break; case 4: datafield = "request_method"; break; case 5: datafield = "data_type"; break; case 6: datafield = "keepsession"; break; } var searchText = $("#inputField").val(); var filtergroup = new $.jqx.filter(); var filter_or_operator = 1; var filtervalue = searchText; var filtercondition = 'contains'; var filter = filtergroup.createfilter('stringfilter', filtervalue, filtercondition); filtergroup.addfilter(filter_or_operator, filter); $("#panelGrid").jqxGrid('addfilter', datafield, filtergroup); // apply the filters. $("#panelGrid").jqxGrid('applyfilters'); }); // clear filters. $("#clearButton").click(function () { $("#panelGrid").jqxGrid('clearfilters'); }); //主面板大小自适应 $(window).resize(function() { $('#panelGrid').jqxGrid({ height: $("#nav-section").height()-$("#dash-logo").outerHeight(true)-3 }); //$('#panelGrid').jqxGrid('autoresizecolumn', 'request_date_and_time_string'); //$('#panelGrid').jqxGrid('autoresizecolumn', 'data_type'); //$('#panelGrid').jqxGrid('autoresizecolumn', 'user_IP'); }); //定时判断是否有新的记录 checkNewMessages(); setIntervalID=setInterval(checkNewMessages, interval); }); //获取新列表 function checkNewMessages(){ $.ajax({ url: urlbase+"?cmd=simplelist", dataType: "json", timeout : interval, success: function(data) { if(messageList) { var sum=0; var lastedID=null; for(var id in data) { if(messageList.indexOf(data[id])<0) { sum++; lastedID=data[id]; } } if(sum>0) showNotification(sum,lastedID,interval); } messageList=data; }, complete : function(XMLHttpRequest,status){     if(status=='timeout'){       interval*=2; if(setIntervalID) { clearInterval(setIntervalID); if(interval<10000) setIntervalID=setInterval(checkNewMessages, interval); }     }   } }); } //根据useragent判断操作系统,浏览器版本 function get_client_info(agent){ var browser = "未知浏览器"; var browser_version = ""; if (agent.indexOf("Firefox/") > 0) { var bv=agent.match(/Firefox\/([^;)]+)+/i); browser = "Firefox"; browser_version = bv[1]; //获取火狐浏览器的版本号 } else if (agent.indexOf("Maxthon") > 0) { var bv=agent.match(/Maxthon\/([\d\.]+)/); browser = "傲游"; browser_version = bv[1]; } else if (agent.indexOf("MSIE") > 0) { var bv=agent.match(/MSIE\s+([^;)]+)+/i); browser = "IE"; browser_version = bv[1]; //获取IE的版本号 } else if (agent.indexOf("OPR") > 0) { var bv=agent.match(/OPR\/([\d\.]+)/); browser = "Opera"; browser_version = bv[1]; } else if(agent.indexOf("Edge") > 0) { //win10 Edge浏览器 添加了chrome内核标记 在判断Chrome之前匹配 var bv=agent.match(/Edge\/([\d\.]+)/); browser = "Edge"; browser_version = bv[1]; } else if (agent.indexOf("Chrome") > 0) { var bv=agent.match(/Chrome\/([\d\.]+)/); browser = "Chrome"; browser_version = bv[1]; //获取google chrome的版本号 } else if(agent.indexOf('rv:')>0 && agent.indexOf('Gecko')>0){ var bv=agent.match(/rv:([\d\.]+)/); browser = "IE"; browser_version = bv[1]; } browser_version=browser_version.match(/^[0-9\.]+$/)?browser_version:"未知"; $os = '未知操作系统'; if (agent.match(/win/i) && (agent.indexOf("95") > 0)) $os = 'Windows 95'; else if (agent.match(/win 9x/i) && (agent.indexOf("4.90") > 0)) $os = 'Windows ME'; else if (agent.match(/win/i) && agent.match(/98/i)) $os = 'Windows 98'; else if (agent.match(/win/i) && agent.match(/nt 6.0/i)) $os = 'Windows Vista'; else if (agent.match(/win/i) && agent.match(/nt 6.1/i)) $os = 'Windows 7'; else if (agent.match(/win/i) && agent.match(/nt 6.2/i)) $os = 'Windows 8'; else if(agent.match(/win/i) && agent.match(/nt 10.0/i)) $os = 'Windows 10'; else if (agent.match(/win/i) && agent.match(/nt 5.1/i)) $os = 'Windows XP'; else if (agent.match(/win/i) && agent.match(/nt 5/i)) $os = 'Windows 2000'; else if (agent.match(/win/i) && agent.match(/nt/i)) $os = 'Windows NT'; else if (agent.match(/win/i) && agent.match(/32/i)) $os = 'Windows 32'; else if (agent.match(/linux/i)) $os = 'Linux'; else if (agent.match(/unix/i)) $os = 'Unix'; else if (agent.match(/sun/i) && agent.match(/os/i)) $os = 'SunOS'; else if (agent.match(/ibm/i) && agent.match(/os/i)) $os = 'IBM OS/2'; else if (agent.match(/Mac/i) && agent.match(/PC/i)) $os = 'Macintosh'; else if (agent.match(/PowerPC/i)) $os = 'PowerPC'; else if (agent.match(/AIX/i)) $os = 'AIX'; else if (agent.match(/HPUX/i)) $os = 'HPUX'; else if (agent.match(/NetBSD/i)) $os = 'NetBSD'; else if (agent.match(/BSD/i)) $os = 'BSD'; else if (agent.match(/OSF1/i)) $os = 'OSF1'; else if (agent.match(/IRIX/i)) $os = 'IRIX'; else if (agent.match(/FreeBSD/i)) $os = 'FreeBSD'; else if (agent.match(/teleport/i)) $os = 'teleport'; else if (agent.match(/flashget/i)) $os = 'flashget'; else if (agent.match(/webzip/i)) $os = 'webzip'; else if (agent.match(/offline/i)) $os = 'offline'; return $os+' '+browser+'('+browser_version+')'; }