50 |
63 | {% endif %}
64 | {% endblock %}
--------------------------------------------------------------------------------
/analyzer/app/static/components/colorize.min.js:
--------------------------------------------------------------------------------
1 | /*
2 | * # Semantic UI
3 | * https://github.com/Semantic-Org/Semantic-UI
4 | * http://www.semantic-ui.com/
5 | *
6 | * Copyright 2014 Contributors
7 | * Released under the MIT license
8 | * http://opensource.org/licenses/MIT
9 | *
10 | */
11 | !function(e,n,i,t){"use strict";e.fn.colorize=function(n){var i=e.extend(!0,{},e.fn.colorize.settings,n),a=arguments||!1;return e(this).each(function(n){var o,r,c,s,d,g,u,l,m=e(this),f=e("
")[0],h=e("
")[0],p=e("
")[0],v=new Image,w=i.colors,b=(i.paths,i.namespace),y=i.error,C=m.data("module-"+b);return l={checkPreconditions:function(){return l.debug("Checking pre-conditions"),!e.isPlainObject(w)||e.isEmptyObject(w)?(l.error(y.undefinedColors),!1):!0},async:function(e){i.async?setTimeout(e,0):e()},getMetadata:function(){l.debug("Grabbing metadata"),s=m.data("image")||i.image||t,d=m.data("name")||i.name||n,g=i.width||m.width(),u=i.height||m.height(),(0===g||0===u)&&l.error(y.undefinedSize)},initialize:function(){l.debug("Initializing with colors",w),l.checkPreconditions()&&l.async(function(){l.getMetadata(),l.canvas.create(),l.draw.image(function(){l.draw.colors(),l.canvas.merge()}),m.data("module-"+b,l)})},redraw:function(){l.debug("Redrawing image"),l.async(function(){l.canvas.clear(),l.draw.colors(),l.canvas.merge()})},change:{color:function(e,n){return l.debug("Changing color",e),w[e]===t?(l.error(y.missingColor),!1):(w[e]=n,void l.redraw())}},canvas:{create:function(){l.debug("Creating canvases"),f.width=g,f.height=u,h.width=g,h.height=u,p.width=g,p.height=u,o=f.getContext("2d"),r=h.getContext("2d"),c=p.getContext("2d"),m.append(f),o=m.children("canvas")[0].getContext("2d")},clear:function(){l.debug("Clearing canvas"),c.fillStyle="#FFFFFF",c.fillRect(0,0,g,u)},merge:function(){return e.isFunction(o.blendOnto)?(o.putImageData(r.getImageData(0,0,g,u),0,0),void c.blendOnto(o,"multiply")):void l.error(y.missingPlugin)}},draw:{image:function(e){l.debug("Drawing image"),e=e||function(){},s?(v.src=s,v.onload=function(){r.drawImage(v,0,0),e()}):(l.error(y.noImage),e())},colors:function(){l.debug("Drawing color overlays",w),e.each(w,function(e,n){i.onDraw(c,d,e,n)})}},debug:function(e,n){i.debug&&(n!==t?console.info(i.name+": "+e,n):console.info(i.name+": "+e))},error:function(e){console.warn(i.name+": "+e)},invoke:function(n,a,o){var r;return o=o||Array.prototype.slice.call(arguments,2),"string"==typeof n&&C!==t&&(n=n.split("."),e.each(n,function(n,t){return e.isPlainObject(C[t])?(C=C[t],!0):e.isFunction(C[t])?(r=C[t],!0):(l.error(i.error.method),!1)})),e.isFunction(r)?r.apply(a,o):!1}},C!==t&&a?("invoke"==a[0]&&(a=Array.prototype.slice.call(a,1)),l.invoke(a[0],this,Array.prototype.slice.call(a,1))):void l.initialize()}),this},e.fn.colorize.settings={name:"Image Colorizer",debug:!0,namespace:"colorize",onDraw:function(){},async:!0,colors:{},metadata:{image:"image",name:"name"},error:{noImage:"No tracing image specified",undefinedColors:"No default colors specified.",missingColor:"Attempted to change color that does not exist",missingPlugin:"Blend onto plug-in must be included",undefinedHeight:"The width or height of image canvas could not be automatically determined. Please specify a height."}}}(jQuery,window,document);
--------------------------------------------------------------------------------
/analyzer/app/static/components/feed.min.css:
--------------------------------------------------------------------------------
1 | /*
2 | * # Semantic UI
3 | * https://github.com/Semantic-Org/Semantic-UI
4 | * http://www.semantic-ui.com/
5 | *
6 | * Copyright 2014 Contributors
7 | * Released under the MIT license
8 | * http://opensource.org/licenses/MIT
9 | *
10 | */
11 | .ui.feed{margin:1em 0}.ui.feed:first-child,.ui.feed:last-child{margin-top:0}.ui.feed>.event{display:table;width:100%;padding:.5rem 0;margin:0;background:0 0;border-top:none}.ui.feed>.event:first-child{border-top:0;padding-top:0}.ui.feed>.event:last-child{padding-bottom:0}.ui.feed>.event>.label{display:table-cell;width:2.5em;height:2.5em;vertical-align:top;text-align:left}.ui.feed>.event>.label .icon{opacity:1;font-size:1.5em;width:100%;padding:.25em;background:0 0;border:none;border-radius:none;color:rgba(0,0,0,.6)}.ui.feed>.event>.label img{width:100%;height:auto;border-radius:500rem}.ui.feed>.event>.label+.content{padding:.5em 0 .5em 1.25em}.ui.feed>.event>.content{display:table-cell;vertical-align:top;text-align:left;word-wrap:break-word}.ui.feed>.event:last-child>.content{padding-bottom:0}.ui.feed>.event>.content a{cursor:pointer}.ui.feed>.event>.content .date{margin:-.5rem 0 0;padding:0;font-weight:400;font-size:1em;font-style:normal;color:rgba(0,0,0,.4)}.ui.feed>.event>.content .summary{margin:0;font-size:1em;font-weight:700;color:rgba(0,0,0,.8)}.ui.feed>.event>.content .summary img{display:inline-block;width:auto;height:2em;margin:-.25em .25em 0 0;border-radius:.25em;vertical-align:middle}.ui.feed>.event>.content .user{display:inline-block;font-weight:700;margin-right:0;vertical-align:baseline}.ui.feed>.event>.content .user img{margin:-.25em .25em 0 0;width:auto;height:2em;vertical-align:middle}.ui.feed>.event>.content .summary>.date{display:inline-block;float:none;font-weight:400;font-size:.875em;font-style:normal;margin:0 0 0 .5em;padding:0;color:rgba(0,0,0,.4)}.ui.feed>.event>.content .extra{margin:.5em 0 0;background:0 0;padding:0;color:rgba(0,0,0,.8)}.ui.feed>.event>.content .extra.images img{display:inline-block;margin:0 .25em 0 0;width:6em}.ui.feed>.event>.content .extra.text{padding:.5em 1em;border-left:3px solid rgba(0,0,0,.2);font-size:1em;max-width:500px;line-height:1.33}.ui.feed>.event>.content .meta{display:inline-block;font-size:.875em;margin:.5em 0 0;background:0 0;border:none;border-radius:0;box-shadow:none;padding:0;color:rgba(0,0,0,.6)}.ui.feed>.event>.content .meta>*{position:relative;margin-left:.75em}.ui.feed>.event>.content .meta>:after{content:'';color:rgba(0,0,0,.2);top:0;left:-1em;opacity:1;position:absolute;vertical-align:top}.ui.feed>.event>.content .meta .like{color:'';-webkit-transition:.2s color ease;transition:.2s color ease}.ui.feed>.event>.content .meta .like:hover .icon{color:#ff2733}.ui.feed>.event>.content .meta .active.like .icon{color:#ef404a}.ui.feed>.event>.content .meta>:first-child{margin-left:0}.ui.feed>.event>.content .meta>:first-child::after{display:none}.ui.feed>.event>.content .meta a,.ui.feed>.event>.content .meta>.icon{cursor:pointer;opacity:1;color:rgba(0,0,0,.5);-webkit-transition:color .2s ease;transition:color .2s ease}.ui.feed>.event>.content .meta a:hover,.ui.feed>.event>.content .meta a:hover .icon,.ui.feed>.event>.content .meta>.icon:hover{color:rgba(0,0,0,.8)}.ui.small.feed{font-size:.9em}.ui.feed{font-size:1em}.ui.large.feed{font-size:1.1em}
--------------------------------------------------------------------------------
/analyzer/app/static/components/loader.min.css:
--------------------------------------------------------------------------------
1 | /*
2 | * # Semantic UI
3 | * https://github.com/Semantic-Org/Semantic-UI
4 | * http://www.semantic-ui.com/
5 | *
6 | * Copyright 2014 Contributors
7 | * Released under the MIT license
8 | * http://opensource.org/licenses/MIT
9 | *
10 | */
11 | .ui.loader{display:none;position:absolute;top:50%;left:50%;margin:0;text-align:center;z-index:1000;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.ui.loader:before{position:absolute;content:'';top:0;left:50%;border-radius:500rem;border:.2em solid rgba(0,0,0,.1)}.ui.loader:after{position:absolute;content:'';top:0;left:50%;-webkit-animation:loader .6s linear;animation:loader .6s linear;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;border-radius:500rem;border-color:#aaa transparent transparent;border-style:solid;border-width:.2em;box-shadow:0 0 0 1px transparent}@-webkit-keyframes loader{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes loader{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.ui.loader:after,.ui.loader:before{width:2.2585em;height:2.2585em;margin:0 0 0 -1.12925em}.ui.mini.loader:after,.ui.mini.loader:before{width:1.2857em;height:1.2857em;margin:0 0 0 -.64285em}.ui.small.loader:after,.ui.small.loader:before{width:1.7142em;height:1.7142em;margin:0 0 0 -.8571em}.ui.large.loader:after,.ui.large.loader:before{width:4.5714em;height:4.5714em;margin:0 0 0 -2.2857em}.ui.dimmer .loader{display:block}.ui.dimmer .ui.loader{color:#fff}.ui.dimmer .ui.loader:before{border-color:rgba(255,255,255,.15)}.ui.dimmer .ui.loader:after{border-color:#fff transparent transparent}.ui.inverted.dimmer .ui.loader{color:rgba(0,0,0,.8)}.ui.inverted.dimmer .ui.loader:before{border-color:rgba(0,0,0,.1)}.ui.inverted.dimmer .ui.loader:after{border-color:#aaa transparent transparent}.ui.text.loader{width:auto!important;height:auto!important;text-align:center;font-style:normal}.ui.indeterminate.loader:after{-webkit-animation-direction:reverse;animation-direction:reverse;-webkit-animation-duration:1.2s;animation-duration:1.2s}.ui.loader.active,.ui.loader.visible{display:block}.ui.loader.disabled,.ui.loader.hidden{display:none}.ui.inverted.dimmer .ui.mini.loader,.ui.mini.loader{width:1.2857em;height:1.2857em;font-size:.7857em}.ui.inverted.dimmer .ui.small.loader,.ui.small.loader{width:1.7142em;height:1.7142em;font-size:.9285em}.ui.inverted.dimmer .ui.loader,.ui.loader{width:2.2585em;height:2.2585em;font-size:1em}.ui.inverted.dimmer .ui.loader.large,.ui.loader.large{width:4.5714em;height:4.5714em;font-size:1.1428em}.ui.mini.text.loader{min-width:1.2857em;padding-top:1.9857em}.ui.small.text.loader{min-width:1.7142em;padding-top:2.4142em}.ui.text.loader{min-width:2.2585em;padding-top:2.9585em}.ui.large.text.loader{min-width:4.5714em;padding-top:5.2714em}.ui.inverted.loader{color:#fff}.ui.inverted.loader:before{border-color:rgba(255,255,255,.15)}.ui.inverted.loader:after{border-top-color:#fff}.ui.inline.loader{position:relative;vertical-align:middle;margin:0;left:0;top:0;-webkit-transform:none;-ms-transform:none;transform:none}.ui.inline.loader.active,.ui.inline.loader.visible{display:inline-block}
--------------------------------------------------------------------------------
/analyzer/app/static/media/css/dataTables.uikit.min.css:
--------------------------------------------------------------------------------
1 | table.dataTable{clear:both;margin-top:6px !important;margin-bottom:6px !important;max-width:none !important}table.dataTable td,table.dataTable th{-webkit-box-sizing:content-box;box-sizing:content-box}table.dataTable td.dataTables_empty,table.dataTable th.dataTables_empty{text-align:center}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}div.dataTables_wrapper div.row.uk-grid.dt-merge-grid{margin-top:5px}div.dataTables_wrapper div.dataTables_length label{font-weight:normal;text-align:left;white-space:nowrap}div.dataTables_wrapper div.dataTables_length select{width:75px;display:inline-block}div.dataTables_wrapper div.dataTables_filter{text-align:right}div.dataTables_wrapper div.dataTables_filter label{font-weight:normal;white-space:nowrap;text-align:left}div.dataTables_wrapper div.dataTables_filter input{margin-left:0.5em;display:inline-block;width:auto}div.dataTables_wrapper div.dataTables_info{padding-top:8px;white-space:nowrap}div.dataTables_wrapper div.dataTables_paginate{margin:0;white-space:nowrap;text-align:right}div.dataTables_wrapper div.dataTables_paginate ul.pagination{margin:2px 0;white-space:nowrap}div.dataTables_wrapper div.dataTables_processing{position:absolute;top:50%;left:50%;width:200px;margin-left:-100px;margin-top:-26px;text-align:center;padding:1em 0}table.dataTable thead>tr>th,table.dataTable thead>tr>td{position:relative}table.dataTable thead>tr>th.sorting_asc,table.dataTable thead>tr>th.sorting_desc,table.dataTable thead>tr>th.sorting,table.dataTable thead>tr>td.sorting_asc,table.dataTable thead>tr>td.sorting_desc,table.dataTable thead>tr>td.sorting{padding-right:30px}table.dataTable thead>tr>th.sorting:after,table.dataTable thead>tr>th.sorting_asc:after,table.dataTable thead>tr>th.sorting_desc:after,table.dataTable thead>tr>td.sorting:after,table.dataTable thead>tr>td.sorting_asc:after,table.dataTable thead>tr>td.sorting_desc:after{position:absolute;top:7px;right:8px;display:block;font-family:'FontAwesome'}table.dataTable thead>tr>th.sorting:after,table.dataTable thead>tr>td.sorting:after{content:"\f0dc";color:#ddd;font-size:0.8em;padding-top:0.12em}table.dataTable thead>tr>th.sorting_asc:after,table.dataTable thead>tr>td.sorting_asc:after{content:"\f0de"}table.dataTable thead>tr>th.sorting_desc:after,table.dataTable thead>tr>td.sorting_desc:after{content:"\f0dd"}div.dataTables_scrollHead table.dataTable{margin-bottom:0 !important}div.dataTables_scrollBody table{border-top:none;margin-top:0 !important;margin-bottom:0 !important}div.dataTables_scrollBody table thead .sorting:after,div.dataTables_scrollBody table thead .sorting_asc:after,div.dataTables_scrollBody table thead .sorting_desc:after{display:none}div.dataTables_scrollBody table tbody tr:first-child th,div.dataTables_scrollBody table tbody tr:first-child td{border-top:none}div.dataTables_scrollFoot table{margin-top:0 !important;border-top:none}@media screen and (max-width: 767px){div.dataTables_wrapper div.dataTables_length,div.dataTables_wrapper div.dataTables_filter,div.dataTables_wrapper div.dataTables_info,div.dataTables_wrapper div.dataTables_paginate{text-align:center}}table.dataTable.uk-table-condensed>thead>tr>th{padding-right:20px}table.dataTable.uk-table-condensed .sorting:after,table.dataTable.uk-table-condensed .sorting_asc:after,table.dataTable.uk-table-condensed .sorting_desc:after{top:6px;right:6px}
2 |
--------------------------------------------------------------------------------
/analyzer/app/static/components/nag.css:
--------------------------------------------------------------------------------
1 | /*
2 | * # Semantic UI
3 | * https://github.com/Semantic-Org/Semantic-UI
4 | * http://www.semantic-ui.com/
5 | *
6 | * Copyright 2014 Contributors
7 | * Released under the MIT license
8 | * http://opensource.org/licenses/MIT
9 | *
10 | */
11 |
12 |
13 |
14 | /*******************************
15 | Nag
16 | *******************************/
17 |
18 | .ui.nag {
19 | display: none;
20 | opacity: 0.95;
21 | position: relative;
22 | top: 0em;
23 | left: 0px;
24 | z-index: 999;
25 | min-height: 0em;
26 | width: 100%;
27 | margin: 0em;
28 | padding: 0.75em 1em;
29 | background: #555555;
30 | box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.2);
31 | font-size: 1rem;
32 | text-align: center;
33 | color: rgba(0, 0, 0, 0.8);
34 | border-radius: 0em 0em 0.2857rem 0.2857rem;
35 | -webkit-transition: 0.2s background ease;
36 | transition: 0.2s background ease;
37 | }
38 | a.ui.nag {
39 | cursor: pointer;
40 | }
41 | .ui.nag > .title {
42 | display: inline-block;
43 | margin: 0em 0.5em;
44 | color: #ffffff;
45 | }
46 | .ui.nag > .close.icon {
47 | cursor: pointer;
48 | opacity: 0.4;
49 | position: absolute;
50 | top: 50%;
51 | right: 1em;
52 | font-size: 1em;
53 | margin: -0.5em 0em 0em;
54 | color: #ffffff;
55 | -webkit-transition: opacity 0.2s ease;
56 | transition: opacity 0.2s ease;
57 | }
58 |
59 |
60 | /*******************************
61 | States
62 | *******************************/
63 |
64 |
65 | /* Hover */
66 | .ui.nag:hover {
67 | background: #555555;
68 | opacity: 1;
69 | }
70 | .ui.nag .close:hover {
71 | opacity: 1;
72 | }
73 |
74 |
75 | /*******************************
76 | Variations
77 | *******************************/
78 |
79 |
80 | /*--------------
81 | Static
82 | ---------------*/
83 |
84 | .ui.overlay.nag {
85 | position: absolute;
86 | display: block;
87 | }
88 |
89 | /*--------------
90 | Fixed
91 | ---------------*/
92 |
93 | .ui.fixed.nag {
94 | position: fixed;
95 | }
96 |
97 | /*--------------
98 | Bottom
99 | ---------------*/
100 |
101 | .ui.bottom.nags,
102 | .ui.bottom.nag {
103 | border-radius: 0.2857rem 0.2857rem 0em 0em;
104 | top: auto;
105 | bottom: 0em;
106 | }
107 |
108 | /*--------------
109 | White
110 | ---------------*/
111 |
112 | .ui.inverted.nags .nag,
113 | .ui.inverted.nag {
114 | background-color: #f0f0f0;
115 | color: rgba(0, 0, 0, 0.85);
116 | }
117 | .ui.inverted.nags .nag .close,
118 | .ui.inverted.nags .nag .title,
119 | .ui.inverted.nag .close,
120 | .ui.inverted.nag .title {
121 | color: rgba(0, 0, 0, 0.4);
122 | }
123 |
124 |
125 | /*******************************
126 | Groups
127 | *******************************/
128 |
129 | .ui.nags .nag {
130 | border-radius: 0em !important;
131 | }
132 | .ui.nags .nag:last-child {
133 | border-radius: 0em 0em 0.2857rem 0.2857rem;
134 | }
135 | .ui.bottom.nags .nag:last-child {
136 | border-radius: 0.2857rem 0.2857rem 0em 0em;
137 | }
138 |
139 |
140 | /*******************************
141 | Theme Overrides
142 | *******************************/
143 |
144 |
145 |
146 | /*******************************
147 | User Overrides
148 | *******************************/
149 |
150 |
--------------------------------------------------------------------------------
/analyzer/app/static/media/css/dataTables.semanticui.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Styling for DataTables with Semantic UI
3 | */
4 | table.dataTable.table {
5 | margin: 0;
6 | }
7 | table.dataTable.table thead th,
8 | table.dataTable.table thead td {
9 | position: relative;
10 | }
11 | table.dataTable.table thead th.sorting, table.dataTable.table thead th.sorting_asc, table.dataTable.table thead th.sorting_desc,
12 | table.dataTable.table thead td.sorting,
13 | table.dataTable.table thead td.sorting_asc,
14 | table.dataTable.table thead td.sorting_desc {
15 | padding-right: 20px;
16 | }
17 | table.dataTable.table thead th.sorting:after, table.dataTable.table thead th.sorting_asc:after, table.dataTable.table thead th.sorting_desc:after,
18 | table.dataTable.table thead td.sorting:after,
19 | table.dataTable.table thead td.sorting_asc:after,
20 | table.dataTable.table thead td.sorting_desc:after {
21 | position: absolute;
22 | top: 12px;
23 | right: 8px;
24 | display: block;
25 | font-family: Icons;
26 | }
27 | table.dataTable.table thead th.sorting:after,
28 | table.dataTable.table thead td.sorting:after {
29 | content: "\f0dc";
30 | color: #ddd;
31 | font-size: 0.8em;
32 | }
33 | table.dataTable.table thead th.sorting_asc:after,
34 | table.dataTable.table thead td.sorting_asc:after {
35 | content: "\f0de";
36 | }
37 | table.dataTable.table thead th.sorting_desc:after,
38 | table.dataTable.table thead td.sorting_desc:after {
39 | content: "\f0dd";
40 | }
41 | table.dataTable.table td,
42 | table.dataTable.table th {
43 | -webkit-box-sizing: content-box;
44 | -moz-box-sizing: content-box;
45 | box-sizing: content-box;
46 | }
47 | table.dataTable.table td.dataTables_empty,
48 | table.dataTable.table th.dataTables_empty {
49 | text-align: center;
50 | }
51 | table.dataTable.table.nowrap th,
52 | table.dataTable.table.nowrap td {
53 | white-space: nowrap;
54 | }
55 |
56 | div.dataTables_wrapper div.dataTables_length select {
57 | vertical-align: middle;
58 | min-height: 2.7142em;
59 | }
60 | div.dataTables_wrapper div.dataTables_length .ui.selection.dropdown {
61 | min-width: 0;
62 | }
63 | div.dataTables_wrapper div.dataTables_filter input {
64 | margin-left: 0.5em;
65 | }
66 | div.dataTables_wrapper div.dataTables_info {
67 | padding-top: 13px;
68 | white-space: nowrap;
69 | }
70 | div.dataTables_wrapper div.dataTables_processing {
71 | position: absolute;
72 | top: 50%;
73 | left: 50%;
74 | width: 200px;
75 | margin-left: -100px;
76 | text-align: center;
77 | }
78 | div.dataTables_wrapper div.row.dt-table {
79 | padding: 0;
80 | }
81 | div.dataTables_wrapper div.dataTables_scrollHead table.dataTable {
82 | border-bottom-right-radius: 0;
83 | border-bottom-left-radius: 0;
84 | border-bottom: none;
85 | }
86 | div.dataTables_wrapper div.dataTables_scrollBody thead .sorting:after,
87 | div.dataTables_wrapper div.dataTables_scrollBody thead .sorting_asc:after,
88 | div.dataTables_wrapper div.dataTables_scrollBody thead .sorting_desc:after {
89 | display: none;
90 | }
91 | div.dataTables_wrapper div.dataTables_scrollBody table.dataTable {
92 | border-radius: 0;
93 | border-top: none;
94 | border-bottom-width: 0;
95 | }
96 | div.dataTables_wrapper div.dataTables_scrollBody table.dataTable.no-footer {
97 | border-bottom-width: 1px;
98 | }
99 | div.dataTables_wrapper div.dataTables_scrollFoot table.dataTable {
100 | border-top-right-radius: 0;
101 | border-top-left-radius: 0;
102 | border-top: none;
103 | }
104 |
--------------------------------------------------------------------------------
/analyzer/app/static/media/css/dataTables.foundation.css:
--------------------------------------------------------------------------------
1 | table.dataTable {
2 | clear: both;
3 | margin: 0.5em 0 !important;
4 | max-width: none !important;
5 | width: 100%;
6 | }
7 | table.dataTable td,
8 | table.dataTable th {
9 | -webkit-box-sizing: content-box;
10 | box-sizing: content-box;
11 | }
12 | table.dataTable td.dataTables_empty,
13 | table.dataTable th.dataTables_empty {
14 | text-align: center;
15 | }
16 | table.dataTable.nowrap th, table.dataTable.nowrap td {
17 | white-space: nowrap;
18 | }
19 |
20 | div.dataTables_wrapper {
21 | position: relative;
22 | }
23 | div.dataTables_wrapper div.dataTables_length label {
24 | float: left;
25 | text-align: left;
26 | margin-bottom: 0;
27 | }
28 | div.dataTables_wrapper div.dataTables_length select {
29 | width: 75px;
30 | margin-bottom: 0;
31 | }
32 | div.dataTables_wrapper div.dataTables_filter label {
33 | float: right;
34 | margin-bottom: 0;
35 | }
36 | div.dataTables_wrapper div.dataTables_filter input {
37 | display: inline-block !important;
38 | width: auto !important;
39 | margin-bottom: 0;
40 | margin-left: 0.5em;
41 | }
42 | div.dataTables_wrapper div.dataTables_info {
43 | padding-top: 2px;
44 | }
45 | div.dataTables_wrapper div.dataTables_paginate {
46 | float: right;
47 | margin: 0;
48 | }
49 | div.dataTables_wrapper div.dataTables_processing {
50 | position: absolute;
51 | top: 50%;
52 | left: 50%;
53 | width: 200px;
54 | margin-left: -100px;
55 | margin-top: -26px;
56 | text-align: center;
57 | padding: 1rem 0;
58 | }
59 |
60 | table.dataTable thead > tr > th.sorting_asc, table.dataTable thead > tr > th.sorting_desc, table.dataTable thead > tr > th.sorting,
61 | table.dataTable thead > tr > td.sorting_asc,
62 | table.dataTable thead > tr > td.sorting_desc,
63 | table.dataTable thead > tr > td.sorting {
64 | padding-right: 1.5rem;
65 | }
66 | table.dataTable thead > tr > th:active,
67 | table.dataTable thead > tr > td:active {
68 | outline: none;
69 | }
70 | table.dataTable thead .sorting,
71 | table.dataTable thead .sorting_asc,
72 | table.dataTable thead .sorting_desc {
73 | cursor: pointer;
74 | }
75 | table.dataTable thead .sorting,
76 | table.dataTable thead .sorting_asc,
77 | table.dataTable thead .sorting_desc,
78 | table.dataTable thead .sorting_asc_disabled,
79 | table.dataTable thead .sorting_desc_disabled {
80 | background-repeat: no-repeat;
81 | background-position: center right;
82 | }
83 | table.dataTable thead .sorting {
84 | background-image: url("../images/sort_both.png");
85 | }
86 | table.dataTable thead .sorting_asc {
87 | background-image: url("../images/sort_asc.png");
88 | }
89 | table.dataTable thead .sorting_desc {
90 | background-image: url("../images/sort_desc.png");
91 | }
92 | table.dataTable thead .sorting_asc_disabled {
93 | background-image: url("../images/sort_asc_disabled.png");
94 | }
95 | table.dataTable thead .sorting_desc_disabled {
96 | background-image: url("../images/sort_desc_disabled.png");
97 | }
98 |
99 | div.dataTables_scrollHead table {
100 | margin-bottom: 0 !important;
101 | }
102 |
103 | div.dataTables_scrollBody table {
104 | border-top: none;
105 | margin-top: 0 !important;
106 | margin-bottom: 0 !important;
107 | }
108 | div.dataTables_scrollBody table tbody tr:first-child th,
109 | div.dataTables_scrollBody table tbody tr:first-child td {
110 | border-top: none;
111 | }
112 |
113 | div.dataTables_scrollFoot table {
114 | margin-top: 0 !important;
115 | border-top: none;
116 | }
117 |
--------------------------------------------------------------------------------
/analyzer/app/static/js/MultiSelectDropList.js:
--------------------------------------------------------------------------------
1 | (function ($){
2 |
3 | $.fn.extend({
4 | MSDL: function (options){/*MultiSelectDropList*/
5 | //各种属性参数
6 |
7 | var defaults = {
8 | width: '150',//下拉列表宽
9 | maxheight: '180',//下拉列表最大高度
10 | data: ['item1','item2','item3','item4','item5','item6'],//下拉列表中的数据
11 | selectallTxt: 'All',//全选文本
12 | selectokTxt: 'ok',//确认文本
13 | };
14 | var options = $.extend(defaults, options);
15 |
16 | return this.each(function (){
17 |
18 | //插件实现代码
19 | //创建 input输入框
20 | //readonly:锁住键盘,不能向文本框输入内容
21 | var $ipt = $('
');
22 | $ipt.width(options.width - 8);//设定文本框宽度
23 |
24 | var $this = $(this);
25 | $this.width(options.width);
26 | $ipt.appendTo($this);
27 |
28 | //创建 下拉选项
29 |
30 | //1.下拉选项包裹
31 | var $container = $('
');
32 |
33 |
34 | //2.创建 全选和确认按钮 top层
35 | var $top = $('
');//外层div包裹
36 | var $all = $('
');//全选
37 | var $btn = $('
');
38 | $all.appendTo($top);
39 | $btn.appendTo($top);
40 |
41 | //3.下拉中的内容 content层
42 | var $content = $('
');//外层div包裹
43 | var count = options.data.length;
44 | var h = ( (count * 22) > parseInt(options.maxheight) ) ? options.maxheight : "'" + count * 22 + "'";
45 | $content.height(h);
46 | for(var i = count-1; i >= 0; i--){
47 |
48 | var $list = $('
');
49 | $list.appendTo($content);
50 | }
51 |
52 | //4把top层和content层加到$container下
53 | $top.appendTo($container);
54 | $content.appendTo($container);
55 |
56 | //把$container加到$(this)下
57 | $container.appendTo($this);
58 |
59 |
60 | //js Effect
61 | var $dropList = $content.children().children('input');
62 |
63 | $all.change(function (){//点击all
64 |
65 | var opt_arr = [];
66 | $dropList.each(function (){
67 | if($all.is(':checked')){
68 | $(this)[0].checked = 'checked';
69 | opt_arr.push($(this).val());
70 | }else{
71 | $(this)[0].checked = '';
72 | opt_arr=[];
73 | }
74 | });
75 |
76 | $ipt.val(opt_arr.join(';'));
77 | });
78 |
79 | $container.addClass('hidden');//开始隐藏
80 |
81 | $ipt.focus(function (){//文本框处于编辑
82 | $container.removeClass('hidden');
83 | $this.addClass('multi_select_focus');
84 | });
85 |
86 | $btn.click(function (){//点击 ok按钮
87 | $container.addClass('hidden');
88 | $this.removeClass('multi_select_focus');
89 | });
90 |
91 |
92 | $dropList.change(function (){//勾选选项
93 | var opt_arr = [];
94 | $dropList.each(function (){
95 | if ($(this).is(':checked')) opt_arr.push($(this).val());
96 |
97 | });
98 | var $dropList_selected = $content.children().children('input:checked');
99 | $ipt.val(opt_arr.join(';'));
100 | var o = $all[0];
101 | var n1 = $dropList_selected.length;
102 | var n2 = $dropList.length;
103 | o.checked = (n1 === n2) ? 'checked' : '';
104 | });
105 | });
106 | },
107 | });
108 | })(jQuery);
--------------------------------------------------------------------------------
/analyzer/app/static/components/shape.css:
--------------------------------------------------------------------------------
1 | /*
2 | * # Semantic UI
3 | * https://github.com/Semantic-Org/Semantic-UI
4 | * http://www.semantic-ui.com/
5 | *
6 | * Copyright 2014 Contributors
7 | * Released under the MIT license
8 | * http://opensource.org/licenses/MIT
9 | *
10 | */
11 |
12 |
13 |
14 | /*******************************
15 | Shape
16 | *******************************/
17 |
18 | .ui.shape {
19 | position: relative;
20 | display: inline-block;
21 | -webkit-perspective: 2000px;
22 | perspective: 2000px;
23 | }
24 | .ui.shape .sides {
25 | -webkit-transform-style: preserve-3d;
26 | transform-style: preserve-3d;
27 | }
28 | .ui.shape .side {
29 | opacity: 1;
30 | width: 100%;
31 | margin: 0em !important;
32 | -webkit-backface-visibility: hidden;
33 | backface-visibility: hidden;
34 | }
35 | .ui.shape .side {
36 | display: none;
37 | }
38 | .ui.shape .side > * {
39 | -webkit-backface-visibility: visible !important;
40 | backface-visibility: visible !important;
41 | }
42 |
43 |
44 | /*******************************
45 | Types
46 | *******************************/
47 |
48 | .ui.cube.shape .side {
49 | min-width: 15em;
50 | height: 15em;
51 | padding: 2em;
52 | background-color: #e6e6e6;
53 | color: rgba(0, 0, 0, 0.8);
54 | box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.3);
55 | }
56 | .ui.cube.shape .side > .content {
57 | width: 100%;
58 | height: 100%;
59 | display: table;
60 | text-align: center;
61 | -webkit-user-select: text;
62 | -moz-user-select: text;
63 | -ms-user-select: text;
64 | user-select: text;
65 | }
66 | .ui.cube.shape .side > .content > div {
67 | display: table-cell;
68 | vertical-align: middle;
69 | font-size: 2em;
70 | }
71 |
72 |
73 | /*******************************
74 | Variations
75 | *******************************/
76 |
77 | .ui.text.shape.animating .sides {
78 | position: static;
79 | }
80 | .ui.text.shape .side {
81 | white-space: nowrap;
82 | }
83 | .ui.text.shape .side > * {
84 | white-space: normal;
85 | }
86 |
87 |
88 | /*******************************
89 | States
90 | *******************************/
91 |
92 |
93 | /*--------------
94 | Loading
95 | ---------------*/
96 |
97 | .ui.loading.shape {
98 | position: absolute;
99 | top: -9999px;
100 | left: -9999px;
101 | }
102 |
103 | /*--------------
104 | Animating
105 | ---------------*/
106 |
107 | .ui.shape .animating.side {
108 | position: absolute;
109 | top: 0px;
110 | left: 0px;
111 | z-index: 100;
112 | }
113 | .ui.shape .hidden.side {
114 | opacity: 0.4;
115 | }
116 |
117 | /*--------------
118 | CSS
119 | ---------------*/
120 |
121 | .ui.shape.animating {
122 | -webkit-transition: all 0.6s ease-in-out;
123 | transition: all 0.6s ease-in-out;
124 | }
125 | .ui.shape.animating .sides {
126 | position: absolute;
127 | }
128 | .ui.shape.animating .sides {
129 | -webkit-transition: all 0.6s ease-in-out;
130 | transition: all 0.6s ease-in-out;
131 | }
132 | .ui.shape.animating .side {
133 | -webkit-transition: opacity 0.6s ease-in-out;
134 | transition: opacity 0.6s ease-in-out;
135 | }
136 |
137 | /*--------------
138 | Active
139 | ---------------*/
140 |
141 | .ui.shape .active.side {
142 | display: block;
143 | }
144 |
145 |
146 | /*******************************
147 | Theme Overrides
148 | *******************************/
149 |
150 |
151 |
152 | /*******************************
153 | User Overrides
154 | *******************************/
155 |
156 |
--------------------------------------------------------------------------------
/analyzer/app/static/css/laydate/skins/dahong/laydate.css:
--------------------------------------------------------------------------------
1 | /**
2 |
3 | @Name: laydate皮肤:大红
4 | @Author:贤心
5 | @Site:http://sentsin.com/layui/laydate
6 |
7 | **/
8 |
9 | .laydate-icon{border:1px solid #ccc; background-image:url(icon.png)}
10 |
11 | .laydate_body .laydate_bottom #laydate_hms,
12 | .laydate_body .laydate_time{border:1px solid #ccc;}
13 |
14 | .laydate_body .laydate_box,
15 | .laydate_body .laydate_time{box-shadow: 2px 2px 5px rgba(0,0,0,.1);}
16 |
17 | .laydate_body .laydate_box{border-top:none; border-bottom:none; background-color:#fff; color:#333;}
18 | .laydate_body .laydate_box input{background:none!important; color:#fff;}
19 | .laydate_body .laydate_box .laydate_void{color:#ccc!important;}
20 | .laydate_body .laydate_box a, .laydate_body .laydate_box a:hover{color:#333;}
21 | .laydate_body .laydate_box a:hover{color:#666;}
22 | .laydate_body .laydate_click{background-color:#F32043!important; color:#fff!important;}
23 | .laydate_body .laydate_top{border-top:1px solid #D91600; background-color:#D91600}
24 | .laydate_body .laydate_ym{border:1px solid #D91600; background-color:#D91600;}
25 | .laydate_body .laydate_ym .laydate_yms{border:1px solid #D91600; background-color:#D91600; color:#fff;}
26 | .laydate_body .laydate_y .laydate_yms a{border-bottom:1px solid #D91600;}
27 | .laydate_body .laydate_y .laydate_yms .laydate_chdown{border-top:1px solid #D91600; border-bottom:none;}
28 | .laydate_body .laydate_choose{border-left:1px solid #D91600;}
29 | .laydate_body .laydate_chprev{border-left:none; border-right:1px solid #D91600;}
30 | .laydate_body .laydate_choose:hover,
31 | .laydate_body .laydate_y .laydate_yms a:hover{background-color:#F54766;}
32 | .laydate_body .laydate_chtop cite{border-bottom-color:#fff;}
33 | .laydate_body .laydate_chdown cite, .laydate_body .laydate_ym label{border-top-color:#fff;}
34 | .laydate_body .laydate_chprev cite{border-right-style:solid; border-right-color:#fff;}
35 | .laydate_body .laydate_chnext cite{border-left-style:solid; border-left-color:#fff;}
36 | .laydate_body .laydate_table{width: 240px!important; margin: 0!important; border:1px solid #ccc; border-top:none; border-bottom:none;}
37 | .laydate_body .laydate_table td{border:none; height:21px!important; line-height:21px!important; background-color:#fff; color:#333;}
38 | .laydate_body .laydate_table .laydate_nothis{color:#999;}
39 | .laydate_body .laydate_table thead{border-bottom:1px solid #ccc; height:21px!important; line-height:21px!important;}
40 | .laydate_body .laydate_table thead th{}
41 | .laydate_body .laydate_bottom{border:1px solid #ccc; border-top:none;}
42 | .laydate_body .laydate_bottom #laydate_hms{background-color:#fff;}
43 | .laydate_body .laydate_time{background-color:#fff;}
44 | .laydate_body .laydate_time1{width: 226px!important; height: 152px!important;}
45 | .laydate_body .laydate_bottom .laydate_sj{width:31px!important; border-right:1px solid #ccc; background-color:#fff;}
46 | .laydate_body .laydate_bottom input{background-color:#fff; color:#333;}
47 | .laydate_body .laydate_bottom .laydte_hsmtex{border-bottom:1px solid #ccc;}
48 | .laydate_body .laydate_bottom .laydate_btn{border-right:1px solid #ccc;}
49 | .laydate_body .laydate_bottom .laydate_v{color:#999}
50 | .laydate_body .laydate_bottom .laydate_btn a{border: 1px solid #ccc; border-right:none; background-color:#fff;}
51 | .laydate_body .laydate_bottom .laydate_btn a:hover{background-color:#F6F6F6; color:#333;}
52 |
53 | .laydate_body .laydate_m .laydate_yms span:hover,
54 | .laydate_body .laydate_time .laydate_hmsno span:hover,
55 | .laydate_body .laydate_y .laydate_yms ul li:hover,
56 | .laydate_body .laydate_table td:hover{background-color:#F54766; color:#fff;}
57 |
58 |
59 |
--------------------------------------------------------------------------------
/analyzer/app/migrations/0001_initial.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # Generated by Django 1.11 on 2017-04-07 17:26
3 | from __future__ import unicode_literals
4 |
5 | from django.db import migrations, models
6 | import django.db.models.deletion
7 |
8 |
9 | class Migration(migrations.Migration):
10 |
11 | initial = True
12 |
13 | dependencies = [
14 | ]
15 |
16 | operations = [
17 | migrations.CreateModel(
18 | name='Bugs',
19 | fields=[
20 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
21 | ('name', models.CharField(max_length=64)),
22 | ('desc', models.CharField(max_length=256)),
23 | ],
24 | ),
25 | migrations.CreateModel(
26 | name='Bugs_content',
27 | fields=[
28 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
29 | ('filter_string', models.TextField()),
30 | ('name', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='app.Bugs')),
31 | ],
32 | ),
33 | migrations.CreateModel(
34 | name='File_pcap',
35 | fields=[
36 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
37 | ('name', models.CharField(max_length=64)),
38 | ('size', models.CharField(max_length=64)),
39 | ('pkt_counts', models.CharField(max_length=64)),
40 | ('uploaddate', models.CharField(default=0, max_length=64)),
41 | ],
42 | ),
43 | migrations.CreateModel(
44 | name='Repoters',
45 | fields=[
46 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
47 | ('user_id', models.IntegerField()),
48 | ('repoter_name', models.CharField(default='', max_length=256)),
49 | ('repoter_summary', models.TextField(default='')),
50 | ('pcap_name', models.CharField(default='', max_length=256)),
51 | ('report_down', models.CharField(default='', max_length=256)),
52 | ('update_time', models.CharField(default='2016-11-11 11:11', max_length=256)),
53 | ],
54 | ),
55 | migrations.CreateModel(
56 | name='Scan_result',
57 | fields=[
58 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
59 | ('match_hash', models.CharField(max_length=256)),
60 | ('pcap_name', models.CharField(default='', max_length=256)),
61 | ('start_time', models.CharField(max_length=256)),
62 | ('stop_time', models.CharField(max_length=256)),
63 | ('filter', models.TextField()),
64 | ],
65 | ),
66 | migrations.CreateModel(
67 | name='sniff_Project',
68 | fields=[
69 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
70 | ('pro_name', models.CharField(max_length=64, unique=True)),
71 | ('filter', models.CharField(max_length=256)),
72 | ('pcap_name', models.CharField(max_length=128)),
73 | ('netcard', models.CharField(max_length=128)),
74 | ('pkt_counts', models.IntegerField(null=True)),
75 | ('pcap_size', models.CharField(max_length=32)),
76 | ('stat', models.IntegerField(default=0)),
77 | ],
78 | ),
79 | ]
80 |
--------------------------------------------------------------------------------
/analyzer/app/static/css/laydate/skins/molv/laydate.css:
--------------------------------------------------------------------------------
1 | /**
2 |
3 | @Name: laydate皮肤:墨绿
4 | @Author:贤心
5 | @Site:http://sentsin.com/layui/laydate
6 |
7 | **/
8 |
9 | .laydate-icon{border:1px solid #ccc; background-image:url(icon.png)}
10 |
11 | .laydate_body .laydate_bottom #laydate_hms,
12 | .laydate_body .laydate_time{border:1px solid #ccc;}
13 |
14 | .laydate_body .laydate_box,
15 | .laydate_body .laydate_ym .laydate_yms,
16 | .laydate_body .laydate_time{box-shadow: 2px 2px 5px rgba(0,0,0,.1);}
17 |
18 | .laydate_body .laydate_box{border-top:none; border-bottom:none; background-color:#fff; color:#00625A;}
19 | .laydate_body .laydate_box input{background:none!important; color:#fff;}
20 | .laydate_body .laydate_box .laydate_void{color:#00E8D7!important;}
21 | .laydate_body .laydate_box a, .laydate_body .laydate_box a:hover{color:#00625A;}
22 | .laydate_body .laydate_box a:hover{color:#666;}
23 | .laydate_body .laydate_click{background-color:#009F95!important; color:#fff!important;}
24 | .laydate_body .laydate_top{border-top:1px solid #009F95; background-color:#009F95}
25 | .laydate_body .laydate_ym{border:1px solid #009F95; background-color:#009F95;}
26 | .laydate_body .laydate_ym .laydate_yms{border:1px solid #009F95; background-color:#009F95; color:#fff;}
27 | .laydate_body .laydate_y .laydate_yms a{border-bottom:1px solid #009F95;}
28 | .laydate_body .laydate_y .laydate_yms .laydate_chdown{border-top:1px solid #009F95; border-bottom:none;}
29 | .laydate_body .laydate_choose{border-left:1px solid #009F95;}
30 | .laydate_body .laydate_chprev{border-left:none; border-right:1px solid #009F95;}
31 | .laydate_body .laydate_choose:hover,
32 | .laydate_body .laydate_y .laydate_yms a:hover{background-color:#00C1B3;}
33 | .laydate_body .laydate_chtop cite{border-bottom-color:#fff;}
34 | .laydate_body .laydate_chdown cite, .laydate_body .laydate_ym label{border-top-color:#fff;}
35 | .laydate_body .laydate_chprev cite{border-right-style:solid; border-right-color:#fff;}
36 | .laydate_body .laydate_chnext cite{border-left-style:solid; border-left-color:#fff;}
37 | .laydate_body .laydate_table{width: 240px!important; margin: 0!important; border:1px solid #ccc; border-top:none; border-bottom:none;}
38 | .laydate_body .laydate_table td{border:none; height:21px!important; line-height:21px!important; background-color:#fff; color:#00625A;}
39 | .laydate_body .laydate_table .laydate_nothis{color:#999;}
40 | .laydate_body .laydate_table thead{border-bottom:1px solid #ccc; height:21px!important; line-height:21px!important;}
41 | .laydate_body .laydate_table thead th{}
42 | .laydate_body .laydate_bottom{border:1px solid #ccc; border-top:none;}
43 | .laydate_body .laydate_bottom #laydate_hms{background-color:#fff;}
44 | .laydate_body .laydate_time{background-color:#fff;}
45 | .laydate_body .laydate_time1{width: 226px!important; height: 152px!important;}
46 | .laydate_body .laydate_bottom .laydate_sj{width:31px!important; border-right:1px solid #ccc; background-color:#fff;}
47 | .laydate_body .laydate_bottom input{background-color:#fff; color:#00625A;}
48 | .laydate_body .laydate_bottom .laydte_hsmtex{border-bottom:1px solid #ccc;}
49 | .laydate_body .laydate_bottom .laydate_btn{border-right:1px solid #ccc;}
50 | .laydate_body .laydate_bottom .laydate_v{color:#999}
51 | .laydate_body .laydate_bottom .laydate_btn a{border: 1px solid #ccc; border-right:none; background-color:#fff;}
52 | .laydate_body .laydate_bottom .laydate_btn a:hover{background-color:#F6F6F6; color:#00625A;}
53 |
54 | .laydate_body .laydate_m .laydate_yms span:hover,
55 | .laydate_body .laydate_time .laydate_hmsno span:hover,
56 | .laydate_body .laydate_y .laydate_yms ul li:hover,
57 | .laydate_body .laydate_table td:hover{background-color:#00C1B3; color:#fff;}
58 |
59 |
60 |
--------------------------------------------------------------------------------
/analyzer/app/static/css/laydate/skins/default/laydate.css:
--------------------------------------------------------------------------------
1 | /**
2 |
3 | @Name: laydate皮肤:默认
4 | @Author:贤心
5 | @Site:http://sentsin.com/layui/laydate
6 |
7 | **/
8 |
9 | .laydate-icon{border:1px solid #C6C6C6; background-image:url(icon.png)}
10 |
11 | .laydate_body .laydate_box,
12 | .laydate_body .laydate_ym,
13 | .laydate_body .laydate_ym .laydate_yms,
14 | .laydate_body .laydate_table,
15 | .laydate_body .laydate_table td,
16 | .laydate_body .laydate_bottom #laydate_hms,
17 | .laydate_body .laydate_time,
18 | .laydate_body .laydate_bottom .laydate_btn a{border:1px solid #ccc;}
19 |
20 | .laydate_body .laydate_y .laydate_yms a,
21 | .laydate_body .laydate_choose,
22 | .laydate_body .laydate_table thead,
23 | .laydate_body .laydate_bottom .laydte_hsmtex{background-color:#F6F6F6;}
24 |
25 | .laydate_body .laydate_box,
26 | .laydate_body .laydate_ym .laydate_yms,
27 | .laydate_body .laydate_time{box-shadow: 2px 2px 5px rgba(0,0,0,.1);}
28 |
29 | .laydate_body .laydate_box{border-top:none; border-bottom:none; background-color:#fff; color:#333;}
30 | .laydate_body .laydate_box input{color:#333;}
31 | .laydate_body .laydate_box .laydate_void{color:#ccc!important; /*text-decoration:line-through;*/}
32 | .laydate_body .laydate_box .laydate_void:hover{background-color:#fff!important}
33 | .laydate_body .laydate_box a, .laydate_body .laydate_box a:hover{color:#333;}
34 | .laydate_body .laydate_box a:hover{color:#666;}
35 | .laydate_body .laydate_click{background-color:#eee!important;}
36 | .laydate_body .laydate_top{border-top:1px solid #C6C6C6;}
37 | .laydate_body .laydate_ym .laydate_yms{border:1px solid #C6C6C6; background-color:#fff;}
38 | .laydate_body .laydate_y .laydate_yms a{border-bottom:1px solid #C6C6C6;}
39 | .laydate_body .laydate_y .laydate_yms .laydate_chdown{border-top:1px solid #C6C6C6; border-bottom:none;}
40 | .laydate_body .laydate_choose{border-left:1px solid #C6C6C6;}
41 | .laydate_body .laydate_chprev{border-left:none; border-right:1px solid #C6C6C6;}
42 | .laydate_body .laydate_choose:hover,
43 | .laydate_body .laydate_y .laydate_yms a:hover{background-color:#fff;}
44 | .laydate_body .laydate_chtop cite{border-bottom-color:#666;}
45 | .laydate_body .laydate_chdown cite, .laydate_body .laydate_ym label{border-top-color:#666;}
46 | .laydate_body .laydate_chprev cite{border-right-style:solid; border-right-color:#666;}
47 | .laydate_body .laydate_chnext cite{border-left-style:solid; border-left-color:#666;}
48 | .laydate_body .laydate_table td{border:none; height:21px!important; line-height:21px!important; background-color:#fff;}
49 | .laydate_body .laydate_table .laydate_nothis{color:#999;}
50 | .laydate_body .laydate_table thead{height:21px!important; line-height:21px!important;}
51 | .laydate_body .laydate_table thead th{border-bottom:1px solid #ccc;}
52 | .laydate_body .laydate_bottom{border-bottom:1px solid #C6C6C6;}
53 | .laydate_body .laydate_bottom #laydate_hms{background-color:#fff;}
54 | .laydate_body .laydate_time{background-color:#fff;}
55 | .laydate_body .laydate_bottom .laydate_sj{border-right:1px solid #C6C6C6; background-color:#F6F6F6;}
56 | .laydate_body .laydate_bottom input{background-color:#fff;}
57 | .laydate_body .laydate_bottom .laydte_hsmtex{border-bottom:1px solid #C6C6C6;}
58 | .laydate_body .laydate_bottom .laydate_btn{border-right:1px solid #C6C6C6;}
59 | .laydate_body .laydate_bottom .laydate_v{color:#999}
60 | .laydate_body .laydate_bottom .laydate_btn a{border-right:none; background-color:#F6F6F6;}
61 | .laydate_body .laydate_bottom .laydate_btn a:hover{color:#000; background-color:#fff;}
62 |
63 | .laydate_body .laydate_m .laydate_yms span:hover,
64 | .laydate_body .laydate_y .laydate_yms ul li:hover,
65 | .laydate_body .laydate_table td:hover,
66 | .laydate_body .laydate_time .laydate_hmsno span:hover{background-color:#F3F3F3}
67 |
68 |
69 |
--------------------------------------------------------------------------------
/analyzer/app/static/js/jquery.cookie.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * jQuery Cookie Plugin v1.4.1
3 | * https://github.com/carhartl/jquery-cookie
4 | *
5 | * Copyright 2006, 2014 Klaus Hartl
6 | * Released under the MIT license
7 | */
8 | (function (factory) {
9 | if (typeof define === 'function' && define.amd) {
10 | // AMD (Register as an anonymous module)
11 | define(['jquery'], factory);
12 | } else if (typeof exports === 'object') {
13 | // Node/CommonJS
14 | module.exports = factory(require('jquery'));
15 | } else {
16 | // Browser globals
17 | factory(jQuery);
18 | }
19 | }(function ($) {
20 |
21 | var pluses = /\+/g;
22 |
23 | function encode(s) {
24 | return config.raw ? s : encodeURIComponent(s);
25 | }
26 |
27 | function decode(s) {
28 | return config.raw ? s : decodeURIComponent(s);
29 | }
30 |
31 | function stringifyCookieValue(value) {
32 | return encode(config.json ? JSON.stringify(value) : String(value));
33 | }
34 |
35 | function parseCookieValue(s) {
36 | if (s.indexOf('"') === 0) {
37 | // This is a quoted cookie as according to RFC2068, unescape...
38 | s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');
39 | }
40 |
41 | try {
42 | // Replace server-side written pluses with spaces.
43 | // If we can't decode the cookie, ignore it, it's unusable.
44 | // If we can't parse the cookie, ignore it, it's unusable.
45 | s = decodeURIComponent(s.replace(pluses, ' '));
46 | return config.json ? JSON.parse(s) : s;
47 | } catch(e) {}
48 | }
49 |
50 | function read(s, converter) {
51 | var value = config.raw ? s : parseCookieValue(s);
52 | return $.isFunction(converter) ? converter(value) : value;
53 | }
54 |
55 | var config = $.cookie = function (key, value, options) {
56 |
57 | // Write
58 |
59 | if (arguments.length > 1 && !$.isFunction(value)) {
60 | options = $.extend({}, config.defaults, options);
61 |
62 | if (typeof options.expires === 'number') {
63 | var days = options.expires, t = options.expires = new Date();
64 | t.setMilliseconds(t.getMilliseconds() + days * 864e+5);
65 | }
66 |
67 | return (document.cookie = [
68 | encode(key), '=', stringifyCookieValue(value),
69 | options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
70 | options.path ? '; path=' + options.path : '',
71 | options.domain ? '; domain=' + options.domain : '',
72 | options.secure ? '; secure' : ''
73 | ].join(''));
74 | }
75 |
76 | // Read
77 |
78 | var result = key ? undefined : {},
79 | // To prevent the for loop in the first place assign an empty array
80 | // in case there are no cookies at all. Also prevents odd result when
81 | // calling $.cookie().
82 | cookies = document.cookie ? document.cookie.split('; ') : [],
83 | i = 0,
84 | l = cookies.length;
85 |
86 | for (; i < l; i++) {
87 | var parts = cookies[i].split('='),
88 | name = decode(parts.shift()),
89 | cookie = parts.join('=');
90 |
91 | if (key === name) {
92 | // If second argument (value) is a function it's a converter...
93 | result = read(cookie, value);
94 | break;
95 | }
96 |
97 | // Prevent storing a cookie that we couldn't decode.
98 | if (!key && (cookie = read(cookie)) !== undefined) {
99 | result[name] = cookie;
100 | }
101 | }
102 |
103 | return result;
104 | };
105 |
106 | config.defaults = {};
107 |
108 | $.removeCookie = function (key, options) {
109 | // Must not alter options, thus extending a fresh object...
110 | $.cookie(key, '', $.extend({}, options, { expires: -1 }));
111 | return !$.cookie(key);
112 | };
113 |
114 | }));
--------------------------------------------------------------------------------
/analyzer/app/static/js/upload.js:
--------------------------------------------------------------------------------
1 | $(document).ready(function () {
2 |
3 | $('select.dropdown').dropdown();
4 | $('.ui.checkbox').checkbox();
5 | $('#delete-button').on('click', function () {
6 | $('.small.del.modal').modal({
7 | closable: true,
8 | allowMultiple: false,
9 | onDeny: function () {
10 | return true;
11 | },
12 | onApprove: function () {
13 | var delCheckbox = $("input[name='checkoption']:checked");
14 | var size = delCheckbox.size();
15 | if (size > 0) {
16 | var params = "";
17 | for (var i = 0; i < size; i++) {
18 | params += delCheckbox.eq(i).val();
19 | if (i != size - 1) {
20 | params = params + ',';
21 | }
22 | }
23 | $.post("/delete/" + params + '/', '', function (d) {
24 | history.go(0);
25 | }, 'text');
26 | }
27 | }
28 | }).modal('show');
29 | });
30 |
31 |
32 | $('#start-button').on('click', function () {
33 |
34 | $.get('/start_sniffer/');
35 | });
36 |
37 |
38 | $('#stop-button').on('click', function () {
39 | $.get('/stop_sniffer/');
40 | });
41 |
42 |
43 |
44 | $('#analyze-button').on('click', function () {
45 | var delCheckbox = $("input[name='checkoption']:checked");
46 | var size = delCheckbox.size();
47 | if (size == 1) {
48 | var params = "";
49 | for (var i = 0; i < size; i++) {
50 | param = delCheckbox.eq(i).val();
51 | window.open('/analyze/' + param + '/' + '1/');
52 | }
53 | }else if (size > 1){
54 | layer.msg("一次只能查看一个文件哦!");
55 | }else{}
56 | });
57 |
58 | $('#scan-button').on('click', function () {
59 | var delCheckbox = $("input[name='checkoption']:checked");
60 | var size = delCheckbox.size();
61 | if (size == 1) {
62 | var params = "";
63 | for (var i = 0; i < size; i++) {
64 | param = delCheckbox.eq(i).val();
65 | urlstr='/scan/' + param + '/';
66 | alert(urlstr);
67 | window.open(urlstr);
68 | }
69 | }else if(size > 1){
70 | layer.msg("一次只能扫描一个文件哦!");
71 | }else{}
72 | });
73 |
74 | $('#fileupload').fileupload({
75 | url: '/upload' + '/',
76 | add: function (e, data) {
77 | var goUpload = true;
78 | var uploadFile = data.files[0];
79 | if (!(/\.(pcap)$/i).test(uploadFile.name)) {
80 | alert('Pcap file only!');
81 | goUpload = false;
82 | }
83 |
84 | // if (uploadFile.size > 30000000) { // 2mb
85 | // alert('Max Size is 30 MB!');
86 | // goUpload = false;
87 | // }
88 | if (goUpload == true) {
89 | data.submit();
90 | }
91 | },
92 | progressall: function (e, data) {
93 | $('.progress').progress({percent: 1});
94 | var progressbar = parseInt(data.loaded / data.total * 100, 10);
95 |
96 | $('.progress').progress({percent: progressbar});
97 | },
98 | done: function (e, data) {
99 | if (data['textStatus'] == "success")
100 | $("#progresslabel").append("Upload OK!");
101 | $('#fileupload').attr({"disabled": "disabled"});
102 | $('.small.ok.modal').modal('show');
103 | history.go(0);
104 | },
105 | });
106 |
107 | });
108 |
--------------------------------------------------------------------------------
/analyzer/app/static/media/css/dataTables.bootstrap.min.css:
--------------------------------------------------------------------------------
1 | table.dataTable{clear:both;margin-top:6px !important;margin-bottom:6px !important;max-width:none !important;border-collapse:separate !important}table.dataTable td,table.dataTable th{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}table.dataTable td.dataTables_empty,table.dataTable th.dataTables_empty{text-align:center}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}div.dataTables_wrapper div.dataTables_length label{font-weight:normal;text-align:left;white-space:nowrap}div.dataTables_wrapper div.dataTables_length select{width:75px;display:inline-block}div.dataTables_wrapper div.dataTables_filter{text-align:right}div.dataTables_wrapper div.dataTables_filter label{font-weight:normal;white-space:nowrap;text-align:left}div.dataTables_wrapper div.dataTables_filter input{margin-left:0.5em;display:inline-block;width:auto}div.dataTables_wrapper div.dataTables_info{padding-top:8px;white-space:nowrap}div.dataTables_wrapper div.dataTables_paginate{margin:0;white-space:nowrap;text-align:right}div.dataTables_wrapper div.dataTables_paginate ul.pagination{margin:2px 0;white-space:nowrap}div.dataTables_wrapper div.dataTables_processing{position:absolute;top:50%;left:50%;width:200px;margin-left:-100px;margin-top:-26px;text-align:center;padding:1em 0}table.dataTable thead>tr>th.sorting_asc,table.dataTable thead>tr>th.sorting_desc,table.dataTable thead>tr>th.sorting,table.dataTable thead>tr>td.sorting_asc,table.dataTable thead>tr>td.sorting_desc,table.dataTable thead>tr>td.sorting{padding-right:30px}table.dataTable thead>tr>th:active,table.dataTable thead>tr>td:active{outline:none}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc_disabled{cursor:pointer;position:relative}table.dataTable thead .sorting:after,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_desc:after,table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:after{position:absolute;bottom:8px;right:8px;display:block;font-family:'Glyphicons Halflings';opacity:0.5}table.dataTable thead .sorting:after{opacity:0.2;content:"\e150"}table.dataTable thead .sorting_asc:after{content:"\e155"}table.dataTable thead .sorting_desc:after{content:"\e156"}table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:after{color:#eee}div.dataTables_scrollHead table.dataTable{margin-bottom:0 !important}div.dataTables_scrollBody table{border-top:none;margin-top:0 !important;margin-bottom:0 !important}div.dataTables_scrollBody table thead .sorting:after,div.dataTables_scrollBody table thead .sorting_asc:after,div.dataTables_scrollBody table thead .sorting_desc:after{display:none}div.dataTables_scrollBody table tbody tr:first-child th,div.dataTables_scrollBody table tbody tr:first-child td{border-top:none}div.dataTables_scrollFoot table{margin-top:0 !important;border-top:none}@media screen and (max-width: 767px){div.dataTables_wrapper div.dataTables_length,div.dataTables_wrapper div.dataTables_filter,div.dataTables_wrapper div.dataTables_info,div.dataTables_wrapper div.dataTables_paginate{text-align:center}}table.dataTable.table-condensed>thead>tr>th{padding-right:20px}table.dataTable.table-condensed .sorting:after,table.dataTable.table-condensed .sorting_asc:after,table.dataTable.table-condensed .sorting_desc:after{top:6px;right:6px}table.table-bordered.dataTable th,table.table-bordered.dataTable td{border-left-width:0}table.table-bordered.dataTable th:last-child,table.table-bordered.dataTable th:last-child,table.table-bordered.dataTable td:last-child,table.table-bordered.dataTable td:last-child{border-right-width:0}table.table-bordered.dataTable tbody th,table.table-bordered.dataTable tbody td{border-bottom-width:0}div.dataTables_scrollHead table.table-bordered{border-bottom-width:0}div.table-responsive>div.dataTables_wrapper>div.row{margin:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^="col-"]:first-child{padding-left:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^="col-"]:last-child{padding-right:0}
2 |
--------------------------------------------------------------------------------
/analyzer/app/start_sniff.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from scapy.all import *
3 | import signal
4 |
5 | #抓包类
6 | class single_sniff():
7 |
8 | def __init__(self,pidname,netcard, pcapname,dstfile,sfilter, count=-1, filesize=-1):
9 | try:
10 | self.sfilter = sfilter
11 | self.netcard = netcard
12 | self.pidfile = pidname
13 | self.pkt_count = 0
14 | self.filepath = os.path.dirname(os.path.abspath(__file__)) + '/sniffpcap/'
15 | if not os.path.exists(self.filepath):
16 | os.mkdir(self.filepath)
17 | self.filename = self.filepath + pcapname #嗅探完毕,保存下来的文件
18 | self.pcapname = pcapname
19 | self.count = count
20 | self.filemaxsize = filesize
21 | self.curfilesize = 0
22 | self.dstfile = dstfile #最终包文件路径
23 | fp = file(self.pidfile, 'w+')
24 | fp.write('%s \n' % os.getpid())
25 | fp.close()
26 | except Exception,err:
27 | fp = open("/analyzer/log.txt", "a+")
28 | fp.write(time.strftime(r'%Y.%m.%d_%H:%M', time.localtime(time.time())) + "
" + str(err) + "\n")
29 | fp.close()
30 |
31 | def run(self):
32 | signal.signal(signal.SIGUSR1, self.stop)
33 | try:
34 | if self.sfilter:
35 | sniff( iface=self.netcard, filter=self.sfilter, prn=self.wto_pcap, count= int(self.count))
36 | dst_dirname = self.dstfile + self.pcapname[0:-5] #生成对应包的子包文件夹名字
37 | if not os.path.exists(dst_dirname):
38 | os.system("mkdir %s" % dst_dirname)#创建子包文件夹
39 | os.system("editcap -c 100 -F libpcap %s %s" % (self.filename,dst_dirname + '/easyedu'))#进行拆分,将嗅探包文件,拆分到pcap包文件路径下,并加上easyedu前缀
40 | os.system("mv %s %s" % (self.filename, self.dstfile)) #将嗅探文件,移到pcap包文件目录下
41 | if os.path.exists(self.pidfile):
42 | os.popen("rm %s -fr" % self.pidfile)
43 | pass
44 | else:
45 | #开始全场嗅探
46 | sniff(prn = self.wto_pcap)
47 | except Exception, err:
48 | fp = open("/analyzer/log.txt", "a+")
49 | fp.write(time.strftime(r'%Y.%m.%d_%H:%M',time.localtime(time.time())) + "" + str(err) + "\n")
50 | fp.close()
51 |
52 | def stop(self,signalnum,handler):
53 | #异常结束,或者被前台关闭嗅探时,进行文件操作
54 |
55 | dst_dirname = self.dstfile + self.pcapname[0:-5] # 生成对应包的子包文件夹名字,去掉pcapname的.pcap后缀
56 | if not os.path.exists(dst_dirname):
57 | os.system("mkdir %s" % dst_dirname) # 创建子包文件夹
58 | os.system("editcap -c 100 -F libpcap %s %s" % (self.filename, dst_dirname + '/easyedu')) # 进行拆分,将嗅探包文件,拆分到pcap包文件路径下,并加上easyedu前缀
59 | os.system("mv %s %s" % (self.filename, self.dstfile)) # 将嗅探文件,移到pcap包文件目录下
60 | if os.path.exists(self.pidfile):
61 | os.popen("rm %s -fr" % self.pidfile)
62 | pass
63 | sys.exit(0)
64 |
65 | def wto_pcap(self, pkt):
66 | wrpcap(self.filename, pkt, append=True)
67 | self.pkt_count += 1
68 | if self.filemaxsize > 0:
69 | cursize = os.path.getsize(self.filename) / 1024.0 / 1024
70 | self.curfilesize = cursize
71 | if cursize >= self.filemaxsize:
72 | stop(self.pidfile)
73 |
74 | #停止
75 | def stop(pidfile):
76 |
77 | if os.path.exists(pidfile):
78 | try:
79 | fp = open(pidfile,"r")
80 | pid = int(fp.read().strip())
81 | fp.close()
82 | os.popen("rm -fr %s"%pidfile)
83 | except IOError,err:
84 | sys.exit(1)
85 | if pid != None:
86 | os.kill(pid,signal.SIGUSR1)
87 | return pid
88 | else:
89 | print "not exsit,not running!\n"
90 |
91 | #开启
92 | def start_sniff(*args):
93 |
94 | try:
95 | one = single_sniff(args[0],args[1],args[2],args[3],args[4],args[5],args[6])
96 | one.run()
97 | except Exception,err:
98 | fp = open("/analyzer/log.txt","a+")
99 | fp.write(str(err))
100 | fp.close()
101 |
102 |
--------------------------------------------------------------------------------
/analyzer/analyzer/settings.py:
--------------------------------------------------------------------------------
1 | """
2 | Django settings for analyzer project.
3 |
4 | Generated by 'django-admin startproject' using Django 1.9.7.
5 |
6 | For more information on this file, see
7 | https://docs.djangoproject.com/en/1.9/topics/settings/
8 |
9 | For the full list of settings and their values, see
10 | https://docs.djangoproject.com/en/1.9/ref/settings/
11 | """
12 |
13 | import os
14 |
15 | # Build paths inside the project like this: os.path.join(BASE_DIR, ...)
16 | BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
17 |
18 | # Quick-start development settings - unsuitable for production
19 | # See https://docs.djangoproject.com/en/1.9/howto/deployment/checklist/
20 |
21 | # SECURITY WARNING: keep the secret key used in production secret!
22 | SECRET_KEY = '+h+fzibfnu!(!ugui!v6qh%y%s-hcyjk%#t_g9)v4jp8*p15^*'
23 |
24 | # SECURITY WARNING: don't run with debug turned on in production!
25 | DEBUG = True
26 |
27 | ALLOWED_HOSTS = ["*"]
28 |
29 |
30 | # Application definition
31 |
32 | INSTALLED_APPS = [
33 | #'django.contrib.admin',
34 | 'django.contrib.auth',
35 | 'django.contrib.contenttypes',
36 | 'django.contrib.sessions',
37 | 'django.contrib.messages',
38 | 'django.contrib.staticfiles',
39 | 'rest_framework',
40 | 'app',
41 | ]
42 | #APPEND_SLASH = False
43 |
44 | MIDDLEWARE_CLASSES = [
45 | 'django.middleware.security.SecurityMiddleware',
46 | 'django.contrib.sessions.middleware.SessionMiddleware',
47 | 'django.middleware.common.CommonMiddleware',
48 | #'django.middleware.csrf.CsrfViewMiddleware',
49 | 'django.contrib.auth.middleware.AuthenticationMiddleware',
50 | 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
51 | 'django.contrib.messages.middleware.MessageMiddleware',
52 | #'django.middleware.clickjacking.XFrameOptionsMiddleware',
53 | ]
54 |
55 | ROOT_URLCONF = 'analyzer.urls'
56 |
57 | TEMPLATES = [
58 | {
59 | 'BACKEND': 'django.template.backends.django.DjangoTemplates',
60 | 'DIRS': [os.path.join(BASE_DIR, 'templates')]
61 | ,
62 | 'APP_DIRS': True,
63 | 'OPTIONS': {
64 | 'context_processors': [
65 | 'django.template.context_processors.debug',
66 | 'django.template.context_processors.request',
67 | 'django.contrib.auth.context_processors.auth',
68 | 'django.contrib.messages.context_processors.messages',
69 | ],
70 | },
71 | },
72 | ]
73 |
74 | WSGI_APPLICATION = 'analyzer.wsgi.application'
75 |
76 |
77 | # Database
78 | # https://docs.djangoproject.com/en/1.9/ref/settings/#databases
79 | #
80 | DATABASES = {
81 | 'default': {
82 | 'ENGINE': 'django.db.backends.sqlite3',
83 | 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
84 | }
85 | }
86 |
87 | # DATABASES = {
88 | # 'default': {
89 | # 'ENGINE': 'django.db.backends.mysql',
90 | # 'NAME':'pcap',
91 | # 'USER':'root',
92 | # 'PASSWORD':'123456',
93 | # 'HOST': '127.0.0.1',
94 | # 'PORT':'3306'
95 | # }
96 | # }
97 |
98 | # Password validation
99 | # https://docs.djangoproject.com/en/1.9/ref/settings/#auth-password-validators
100 |
101 | AUTH_PASSWORD_VALIDATORS = [
102 | {
103 | 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
104 | },
105 | {
106 | 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
107 | },
108 | {
109 | 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
110 | },
111 | {
112 | 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
113 | },
114 | ]
115 |
116 |
117 | # Internationalization
118 | # https://docs.djangoproject.com/en/1.9/topics/i18n/
119 |
120 | LANGUAGE_CODE = 'en-us'
121 |
122 | TIME_ZONE = 'UTC'
123 |
124 | USE_I18N = True
125 |
126 | USE_L10N = True
127 |
128 | USE_TZ = True
129 |
130 |
131 | # Static files (CSS, JavaScript, Images)
132 | # https://docs.djangoproject.com/en/1.9/howto/static-files/
133 |
134 | STATIC_URL = '/static/'
135 | STATICFILES_DIR = [
136 | os.path.join(BASE_DIR,'static'),
137 | ]
138 | MEDIA_ROOT = [
139 | os.path.join(BASE_DIR,'pcapfiles')
140 | ]
141 |
--------------------------------------------------------------------------------
/analyzer/app/static/components/search.min.css:
--------------------------------------------------------------------------------
1 | /*
2 | * # Semantic UI
3 | * https://github.com/Semantic-Org/Semantic-UI
4 | * http://www.semantic-ui.com/
5 | *
6 | * Copyright 2014 Contributors
7 | * Released under the MIT license
8 | * http://opensource.org/licenses/MIT
9 | *
10 | */
11 | .ui.search{position:relative}.ui.search>.prompt{margin:0;outline:0;-webkit-appearance:none;-webkit-tap-highlight-color:rgba(255,255,255,0);text-shadow:none;font-style:normal;font-weight:400;line-height:1.2;padding:.68571em 1em;font-size:1em;background:#fff;border:1px solid rgba(39,41,43,.15);color:rgba(0,0,0,.8);box-shadow:0 0 transparent inset;-webkit-transition:background-color .2s ease,color .2s ease,box-shadow .2s ease,border-color .2s ease;transition:background-color .2s ease,color .2s ease,box-shadow .2s ease,border-color .2s ease}.ui.search .prompt{border-radius:500rem}.ui.search .prompt~.search.icon{cursor:pointer}.ui.search>.results{display:none;position:absolute;top:100%;left:0;background:#fff;margin-top:.5em;width:16em;border-radius:.25em;box-shadow:0 1px 3px 1px rgba(0,0,0,.2);z-index:998}.ui.search>.results .result{cursor:pointer;display:block;overflow:hidden;font-size:1em;padding:.5em 1em;color:rgba(0,0,0,.8);line-height:1.33;border-bottom:1px solid rgba(39,41,43,.15)}.ui.search>.results .result:last-child{border-bottom:none}.ui.search>.results .result .image{float:right;overflow:hidden;background:0 0;width:5em;height:3em;border-radius:.25em}.ui.search>.results .result .image img{display:block;width:auto;height:100%}.ui.search>.results .result .image+.content{margin:0 6em 0 0}.ui.search>.results .result .title{font-family:Lato,'Helvetica Neue',Arial,Helvetica,sans-serif;font-weight:700;font-size:1em;color:rgba(0,0,0,.85)}.ui.search>.results .result .description{margin-top:0;font-size:.9285em;color:rgba(0,0,0,.4)}.ui.search>.results .result .price{float:right;color:#5bbd72}.ui.search>.results>.message{padding:1em}.ui.search>.results>.message .header{font-family:Lato,'Helvetica Neue',Arial,Helvetica,sans-serif;font-size:1.1428em;font-weight:700;color:rgba(0,0,0,.8)}.ui.search>.results>.message .description{margin-top:.25rem;font-size:1em;color:rgba(0,0,0,.8)}.ui.search>.results>.action{display:block;border-top:none;background:#f0f0f0;padding:.5em 1em;color:rgba(0,0,0,.8);font-weight:700;text-align:center}.ui.loading.search .input>.icon:before{position:absolute;content:'';top:50%;left:50%;margin:-.64285em 0 0 -.64285em;width:1.2857em;height:1.2857em;border-radius:500rem;border:.2em solid rgba(0,0,0,.1)}.ui.loading.search .input>.icon:after{position:absolute;content:'';top:50%;left:50%;margin:-.64285em 0 0 -.64285em;width:1.2857em;height:1.2857em;-webkit-animation:button-spin .6s linear;animation:button-spin .6s linear;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;border-radius:500rem;border-color:#aaa transparent transparent;border-style:solid;border-width:.2em;box-shadow:0 0 0 1px transparent}.ui.category.search>.results .category .result:hover,.ui.search>.results .result:hover{background:#fafafa}.ui.search .action:hover{background:#e0e0e0}.ui.search>.results .category.active{background:#f0f0f0}.ui.search>.results .category.active>.name{color:rgba(0,0,0,.8)}.ui.category.search>.results .category .result.active,.ui.search>.results .result.active{position:relative;border-left-color:transparent;background:#f0f0f0;box-shadow:3px 0 3px 0 rgba(39,41,43,.15)}.ui.search>.results .result.active .description,.ui.search>.results .result.active .title{color:rgba(0,0,0,.85)}.ui.category.search .results{width:28em}.ui.category.search>.results .category{background:#f0f0f0;box-shadow:none;border-bottom:1px solid rgba(39,41,43,.15);-webkit-transition:background .2s ease,border-color .2s ease;transition:background .2s ease,border-color .2s ease}.ui.category.search>.results .category:last-child{border-bottom:none}.ui.category.search>.results .category .result{background:#fff;margin-left:100px;border-left:1px solid rgba(39,41,43,.15);border-bottom:1px solid rgba(39,41,43,.15);-webkit-transition:background .2s ease,border-color .2s ease;transition:background .2s ease,border-color .2s ease}.ui.category.search>.results .category .result:last-child{border-bottom:none}.ui.category.search>.results .category>.name{width:100px;background:#f0f0f0;font-family:Lato,'Helvetica Neue',Arial,Helvetica,sans-serif;font-size:1em;float:1em;float:left;padding:.4em 1em;font-weight:700;color:rgba(0,0,0,.4)}.ui[class*="left aligned"].search>.results{right:auto;left:0}.ui[class*="right aligned"].search>.results{right:0;left:auto}.ui.fluid.search .results{width:100%}.ui.search{font-size:1em}.ui.large.search{font-size:1.1em}
--------------------------------------------------------------------------------
/analyzer/app/static/components/dimmer.css:
--------------------------------------------------------------------------------
1 | /*
2 | * # Semantic UI
3 | * https://github.com/Semantic-Org/Semantic-UI
4 | * http://www.semantic-ui.com/
5 | *
6 | * Copyright 2014 Contributors
7 | * Released under the MIT license
8 | * http://opensource.org/licenses/MIT
9 | *
10 | */
11 |
12 |
13 |
14 | /*******************************
15 | Dimmer
16 | *******************************/
17 |
18 | .dimmable {
19 | position: relative;
20 | }
21 | .ui.dimmer {
22 | display: none;
23 | position: absolute;
24 | top: 0em !important;
25 | left: 0em !important;
26 | width: 100%;
27 | height: 100%;
28 | text-align: center;
29 | vertical-align: middle;
30 | background: rgba(0, 0, 0, 0.85);
31 | opacity: 0;
32 | line-height: 1;
33 | -webkit-animation-fill-mode: both;
34 | animation-fill-mode: both;
35 | -webkit-animation-duration: 0.5s;
36 | animation-duration: 0.5s;
37 | -webkit-transition: background-color 0.5s linear;
38 | transition: background-color 0.5s linear;
39 | -webkit-user-select: none;
40 | -moz-user-select: none;
41 | -ms-user-select: none;
42 | user-select: none;
43 | will-change: opacity;
44 | z-index: 1000;
45 | }
46 |
47 | /* Dimmer Content */
48 | .ui.dimmer > .content {
49 | width: 100%;
50 | height: 100%;
51 | display: table;
52 | -webkit-user-select: text;
53 | -moz-user-select: text;
54 | -ms-user-select: text;
55 | user-select: text;
56 | }
57 | .ui.dimmer > .content > div {
58 | display: table-cell;
59 | vertical-align: middle;
60 | color: #ffffff;
61 | }
62 |
63 | /* Loose Coupling */
64 | .ui.segment > .ui.dimmer {
65 | border-radius: inherit !important;
66 | }
67 |
68 |
69 | /*******************************
70 | States
71 | *******************************/
72 |
73 | .animating.dimmable:not(body),
74 | .dimmed.dimmable:not(body) {
75 | overflow: hidden;
76 | }
77 | .dimmed.dimmable > .ui.animating.dimmer,
78 | .dimmed.dimmable > .ui.visible.dimmer,
79 | .ui.active.dimmer {
80 | display: block;
81 | opacity: 1;
82 | }
83 | .ui.disabled.dimmer {
84 | width: 0 !important;
85 | height: 0 !important;
86 | }
87 |
88 |
89 | /*******************************
90 | Variations
91 | *******************************/
92 |
93 |
94 | /*--------------
95 | Page
96 | ---------------*/
97 |
98 | .ui.page.dimmer {
99 | position: fixed;
100 | -webkit-transform-style: preserve-3d;
101 | transform-style: preserve-3d;
102 | -webkit-perspective: 2000px;
103 | perspective: 2000px;
104 | -webkit-transform-origin: center center;
105 | -ms-transform-origin: center center;
106 | transform-origin: center center;
107 | }
108 | body.animating.in.dimmable,
109 | body.dimmed.dimmable {
110 | overflow: hidden;
111 | }
112 | body.dimmable > .dimmer {
113 | position: fixed;
114 | }
115 | /*
116 | body.dimmable > :not(.dimmer) {
117 | filter: @elementStartFilter;
118 | }
119 | body.dimmed.dimmable > :not(.dimmer) {
120 | filter: @elementEndFilter;
121 | transition: @elementTransition;
122 | }
123 | */
124 |
125 | /*--------------
126 | Aligned
127 | ---------------*/
128 |
129 | .ui.dimmer > .top.aligned.content > * {
130 | vertical-align: top;
131 | }
132 | .ui.dimmer > .bottom.aligned.content > * {
133 | vertical-align: bottom;
134 | }
135 |
136 | /*--------------
137 | Inverted
138 | ---------------*/
139 |
140 | .ui.inverted.dimmer {
141 | background: rgba(255, 255, 255, 0.85);
142 | }
143 | .ui.inverted.dimmer > .content > * {
144 | color: #ffffff;
145 | }
146 |
147 | /*--------------
148 | Simple
149 | ---------------*/
150 |
151 |
152 | /* Displays without javascript */
153 | .ui.simple.dimmer {
154 | display: block;
155 | overflow: hidden;
156 | opacity: 1;
157 | width: 0%;
158 | height: 0%;
159 | z-index: -100;
160 | background-color: rgba(0, 0, 0, 0);
161 | }
162 | .dimmed.dimmable > .ui.simple.dimmer {
163 | overflow: visible;
164 | opacity: 1;
165 | width: 100%;
166 | height: 100%;
167 | background: rgba(0, 0, 0, 0.85);
168 | z-index: 1;
169 | }
170 | .ui.simple.inverted.dimmer {
171 | background: rgba(255, 255, 255, 0);
172 | }
173 | .dimmed.dimmable > .ui.simple.inverted.dimmer {
174 | background: rgba(255, 255, 255, 0.85);
175 | }
176 |
177 |
178 | /*******************************
179 | Theme Overrides
180 | *******************************/
181 |
182 |
183 |
184 | /*******************************
185 | User Overrides
186 | *******************************/
187 |
188 |
--------------------------------------------------------------------------------
/analyzer/app/static/media/css/dataTables.uikit.css:
--------------------------------------------------------------------------------
1 | table.dataTable {
2 | clear: both;
3 | margin-top: 6px !important;
4 | margin-bottom: 6px !important;
5 | max-width: none !important;
6 | }
7 | table.dataTable td,
8 | table.dataTable th {
9 | -webkit-box-sizing: content-box;
10 | box-sizing: content-box;
11 | }
12 | table.dataTable td.dataTables_empty,
13 | table.dataTable th.dataTables_empty {
14 | text-align: center;
15 | }
16 | table.dataTable.nowrap th,
17 | table.dataTable.nowrap td {
18 | white-space: nowrap;
19 | }
20 |
21 | div.dataTables_wrapper div.row.uk-grid.dt-merge-grid {
22 | margin-top: 5px;
23 | }
24 | div.dataTables_wrapper div.dataTables_length label {
25 | font-weight: normal;
26 | text-align: left;
27 | white-space: nowrap;
28 | }
29 | div.dataTables_wrapper div.dataTables_length select {
30 | width: 75px;
31 | display: inline-block;
32 | }
33 | div.dataTables_wrapper div.dataTables_filter {
34 | text-align: right;
35 | }
36 | div.dataTables_wrapper div.dataTables_filter label {
37 | font-weight: normal;
38 | white-space: nowrap;
39 | text-align: left;
40 | }
41 | div.dataTables_wrapper div.dataTables_filter input {
42 | margin-left: 0.5em;
43 | display: inline-block;
44 | width: auto;
45 | }
46 | div.dataTables_wrapper div.dataTables_info {
47 | padding-top: 8px;
48 | white-space: nowrap;
49 | }
50 | div.dataTables_wrapper div.dataTables_paginate {
51 | margin: 0;
52 | white-space: nowrap;
53 | text-align: right;
54 | }
55 | div.dataTables_wrapper div.dataTables_paginate ul.pagination {
56 | margin: 2px 0;
57 | white-space: nowrap;
58 | }
59 | div.dataTables_wrapper div.dataTables_processing {
60 | position: absolute;
61 | top: 50%;
62 | left: 50%;
63 | width: 200px;
64 | margin-left: -100px;
65 | margin-top: -26px;
66 | text-align: center;
67 | padding: 1em 0;
68 | }
69 |
70 | table.dataTable thead > tr > th,
71 | table.dataTable thead > tr > td {
72 | position: relative;
73 | }
74 | table.dataTable thead > tr > th.sorting_asc, table.dataTable thead > tr > th.sorting_desc, table.dataTable thead > tr > th.sorting,
75 | table.dataTable thead > tr > td.sorting_asc,
76 | table.dataTable thead > tr > td.sorting_desc,
77 | table.dataTable thead > tr > td.sorting {
78 | padding-right: 30px;
79 | }
80 | table.dataTable thead > tr > th.sorting:after, table.dataTable thead > tr > th.sorting_asc:after, table.dataTable thead > tr > th.sorting_desc:after,
81 | table.dataTable thead > tr > td.sorting:after,
82 | table.dataTable thead > tr > td.sorting_asc:after,
83 | table.dataTable thead > tr > td.sorting_desc:after {
84 | position: absolute;
85 | top: 7px;
86 | right: 8px;
87 | display: block;
88 | font-family: 'FontAwesome';
89 | }
90 | table.dataTable thead > tr > th.sorting:after,
91 | table.dataTable thead > tr > td.sorting:after {
92 | content: "\f0dc";
93 | color: #ddd;
94 | font-size: 0.8em;
95 | padding-top: 0.12em;
96 | }
97 | table.dataTable thead > tr > th.sorting_asc:after,
98 | table.dataTable thead > tr > td.sorting_asc:after {
99 | content: "\f0de";
100 | }
101 | table.dataTable thead > tr > th.sorting_desc:after,
102 | table.dataTable thead > tr > td.sorting_desc:after {
103 | content: "\f0dd";
104 | }
105 |
106 | div.dataTables_scrollHead table.dataTable {
107 | margin-bottom: 0 !important;
108 | }
109 |
110 | div.dataTables_scrollBody table {
111 | border-top: none;
112 | margin-top: 0 !important;
113 | margin-bottom: 0 !important;
114 | }
115 | div.dataTables_scrollBody table thead .sorting:after,
116 | div.dataTables_scrollBody table thead .sorting_asc:after,
117 | div.dataTables_scrollBody table thead .sorting_desc:after {
118 | display: none;
119 | }
120 | div.dataTables_scrollBody table tbody tr:first-child th,
121 | div.dataTables_scrollBody table tbody tr:first-child td {
122 | border-top: none;
123 | }
124 |
125 | div.dataTables_scrollFoot table {
126 | margin-top: 0 !important;
127 | border-top: none;
128 | }
129 |
130 | @media screen and (max-width: 767px) {
131 | div.dataTables_wrapper div.dataTables_length,
132 | div.dataTables_wrapper div.dataTables_filter,
133 | div.dataTables_wrapper div.dataTables_info,
134 | div.dataTables_wrapper div.dataTables_paginate {
135 | text-align: center;
136 | }
137 | }
138 | table.dataTable.uk-table-condensed > thead > tr > th {
139 | padding-right: 20px;
140 | }
141 | table.dataTable.uk-table-condensed .sorting:after,
142 | table.dataTable.uk-table-condensed .sorting_asc:after,
143 | table.dataTable.uk-table-condensed .sorting_desc:after {
144 | top: 6px;
145 | right: 6px;
146 | }
147 |
--------------------------------------------------------------------------------
/analyzer/app/static/media/css/dataTables.bootstrap4.min.css:
--------------------------------------------------------------------------------
1 | table.dataTable{clear:both;margin-top:6px !important;margin-bottom:6px !important;max-width:none !important;border-collapse:separate !important}table.dataTable td,table.dataTable th{-webkit-box-sizing:content-box;box-sizing:content-box}table.dataTable td.dataTables_empty,table.dataTable th.dataTables_empty{text-align:center}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}div.dataTables_wrapper div.dataTables_length label{font-weight:normal;text-align:left;white-space:nowrap}div.dataTables_wrapper div.dataTables_length select{width:75px;display:inline-block}div.dataTables_wrapper div.dataTables_filter{text-align:right}div.dataTables_wrapper div.dataTables_filter label{font-weight:normal;white-space:nowrap;text-align:left}div.dataTables_wrapper div.dataTables_filter input{margin-left:0.5em;display:inline-block;width:auto}div.dataTables_wrapper div.dataTables_info{padding-top:0.85em;white-space:nowrap}div.dataTables_wrapper div.dataTables_paginate{margin:0;white-space:nowrap;text-align:right}div.dataTables_wrapper div.dataTables_paginate ul.pagination{margin:2px 0;white-space:nowrap}div.dataTables_wrapper div.dataTables_processing{position:absolute;top:50%;left:50%;width:200px;margin-left:-100px;margin-top:-26px;text-align:center;padding:1em 0}table.dataTable thead>tr>th.sorting_asc,table.dataTable thead>tr>th.sorting_desc,table.dataTable thead>tr>th.sorting,table.dataTable thead>tr>td.sorting_asc,table.dataTable thead>tr>td.sorting_desc,table.dataTable thead>tr>td.sorting{padding-right:30px}table.dataTable thead>tr>th:active,table.dataTable thead>tr>td:active{outline:none}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc_disabled{cursor:pointer;position:relative}table.dataTable thead .sorting:before,table.dataTable thead .sorting:after,table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_desc:before,table.dataTable thead .sorting_desc:after,table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:before,table.dataTable thead .sorting_desc_disabled:after{position:absolute;bottom:0.9em;display:block;opacity:0.3}table.dataTable thead .sorting:before,table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_desc:before,table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_desc_disabled:before{right:1em;content:"\2191"}table.dataTable thead .sorting:after,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_desc:after,table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:after{right:0.5em;content:"\2193"}table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_desc:after{opacity:1}table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_desc_disabled:after{opacity:0}div.dataTables_scrollHead table.dataTable{margin-bottom:0 !important}div.dataTables_scrollBody table{border-top:none;margin-top:0 !important;margin-bottom:0 !important}div.dataTables_scrollBody table thead .sorting:after,div.dataTables_scrollBody table thead .sorting_asc:after,div.dataTables_scrollBody table thead .sorting_desc:after{display:none}div.dataTables_scrollBody table tbody tr:first-child th,div.dataTables_scrollBody table tbody tr:first-child td{border-top:none}div.dataTables_scrollFoot table{margin-top:0 !important;border-top:none}@media screen and (max-width: 767px){div.dataTables_wrapper div.dataTables_length,div.dataTables_wrapper div.dataTables_filter,div.dataTables_wrapper div.dataTables_info,div.dataTables_wrapper div.dataTables_paginate{text-align:center}}table.dataTable.table-condensed>thead>tr>th{padding-right:20px}table.dataTable.table-condensed .sorting:after,table.dataTable.table-condensed .sorting_asc:after,table.dataTable.table-condensed .sorting_desc:after{top:6px;right:6px}table.table-bordered.dataTable th,table.table-bordered.dataTable td{border-left-width:0}table.table-bordered.dataTable th:last-child,table.table-bordered.dataTable th:last-child,table.table-bordered.dataTable td:last-child,table.table-bordered.dataTable td:last-child{border-right-width:0}table.table-bordered.dataTable tbody th,table.table-bordered.dataTable tbody td{border-bottom-width:0}div.dataTables_scrollHead table.table-bordered{border-bottom-width:0}div.table-responsive>div.dataTables_wrapper>div.row{margin:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^="col-"]:first-child{padding-left:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^="col-"]:last-child{padding-right:0}
2 |
--------------------------------------------------------------------------------
/analyzer/app/static/js/mybugs.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Created by Administrator on 2016/11/1 0001.
3 | */
4 | /*删除sql*/
5 | $(document.getElementsByName("delsqlbugs")).click(function () {
6 | if ($(this).hasClass("checked")) {
7 | $(this).removeClass("checked");
8 | } else {
9 | $(this).addClass("checked");
10 | }
11 | });
12 | $(function () {
13 | $("#delsql-button").click(deletesqlbugs);
14 | });
15 | function deletesqlbugs() {
16 | var array = new Array();
17 | $(document.getElementsByName("delsqlbugs")).each(function () {
18 | if ($(this).hasClass("checked")) {
19 | array.push($(this).attr("value"));
20 | console.log(array);
21 | }
22 | });
23 | $.get("/delbugs/" + array + '/', function (result) {
24 | if (result.status = 1) {
25 | window.location.reload();
26 | } else {
27 | // alert(result.msg);
28 | }
29 | });
30 | }
31 |
32 | /*删除xss*/
33 | $(document.getElementsByName("delxssbugs")).click(function () {
34 | if ($(this).hasClass("checked")) {
35 | $(this).removeClass("checked");
36 | } else {
37 | $(this).addClass("checked");
38 | }
39 | });
40 | $(function () {
41 | $("#delxss-button").click(deletexssbugs);
42 | });
43 | function deletexssbugs() {
44 | var array = new Array();
45 | $(document.getElementsByName("delxssbugs")).each(function () {
46 | if ($(this).hasClass("checked")) {
47 | array.push($(this).attr("value"));
48 | console.log(array);
49 | }
50 | });
51 | $.get("/delbugs/" + array + '/', function (result) {
52 | if (result.status = 1) {
53 | window.location.reload();
54 | } else {
55 | // alert(result.msg);
56 | }
57 | });
58 | }
59 |
60 | /*删除other*/
61 | $(document.getElementsByName("delotherbugs")).click(function () {
62 | if ($(this).hasClass("checked")) {
63 | $(this).removeClass("checked");
64 | } else {
65 | $(this).addClass("checked");
66 | }
67 | });
68 | $(function () {
69 | $("#delother-button").click(deleteotherbugs);
70 | });
71 | function deleteotherbugs() {
72 | var array = new Array();
73 | $(document.getElementsByName("delotherbugs")).each(function () {
74 | if ($(this).hasClass("checked")) {
75 | array.push($(this).attr("value"));
76 | console.log(array);
77 | }
78 | });
79 | $.get("/delbugs/" + array + '/', function (result) {
80 | if (result.status = 1) {
81 | window.location.reload();
82 | } else {
83 | // alert(result.msg);
84 | }
85 | });
86 | }
87 |
88 | /*删除项目*/
89 | $(document.getElementsByName("delpro")).click(function () {
90 | if ($(this).hasClass("checked")) {
91 | $(this).removeClass("checked");
92 | } else {
93 | $(this).addClass("checked");
94 | }
95 | event.stopPropagation();
96 | });
97 |
98 | /*删除嗅探项目*/
99 | $(function () {
100 | $("#delpro-button").click(deletepro);
101 | });
102 |
103 | function deletepro() {
104 | var array = new Array();
105 | $(document.getElementsByName("delpro")).each(function () {
106 | if ($(this).hasClass("checked")) {
107 | array.push($(this).attr("value"));
108 | // console.log(array);
109 | }
110 | });
111 | $.get("/delpro/" + array + '/', function (result) {
112 | if (result.status = 1) {
113 | window.location.reload();
114 | } else {
115 | // alert(result.msg);
116 | }
117 | });
118 | }
119 |
120 | /*刷新嗅探项目*/
121 | $(function () {
122 | $("#flush-button").click(flushpro);
123 | });
124 |
125 | function flushpro() {
126 | var array = new Array();
127 | $("#flushtb tr").each(function () {
128 | var flag = $(this).children().eq(6).html();
129 | if (flag == "On") {
130 | // alert("ON");
131 | array.push($(this).children().eq(0).attr("value"));
132 | }
133 | });
134 | if (array.length != 0) {
135 | $.get("/flushsniff/" + array + '/', function (result) {
136 | if (result.status = 1) {
137 | layer.msg( '刷新完成', {
138 | time: 2000 //1s后自动关闭
139 | });
140 | window.location.reload();
141 | } else {
142 |
143 | }
144 | });
145 |
146 | }
147 | else {
148 | layer.msg("没有正在嗅探中的项目")
149 | }
150 |
151 | }
152 |
153 |
154 |
155 |
--------------------------------------------------------------------------------
/analyzer/templates/prolist.html:
--------------------------------------------------------------------------------
1 | {% extends "wraper.html" %}
2 | {% block content2 %}
3 |
4 | {% if code %}
5 |
6 |
7 |
8 |
60 |
61 | 删除
62 |
63 |
64 | 刷新
65 |
66 |
67 |
68 |
69 | {% else %}
70 |
85 | {% endif %}
86 |
87 | {% endblock %}
--------------------------------------------------------------------------------
/analyzer/app/static/components/rating.min.js:
--------------------------------------------------------------------------------
1 | /*
2 | * # Semantic UI
3 | * https://github.com/Semantic-Org/Semantic-UI
4 | * http://www.semantic-ui.com/
5 | *
6 | * Copyright 2014 Contributors
7 | * Released under the MIT license
8 | * http://opensource.org/licenses/MIT
9 | *
10 | */
11 | !function(e,n,t,i){"use strict";e.fn.rating=function(n){var t,a=e(this),o=a.selector||"",r=(new Date).getTime(),s=[],l=arguments[0],c="string"==typeof l,u=[].slice.call(arguments,1);return a.each(function(){var g,d=e.isPlainObject(n)?e.extend(!0,{},e.fn.rating.settings,n):e.extend({},e.fn.rating.settings),m=d.namespace,f=d.className,v=d.metadata,p=d.selector,b=(d.error,"."+m),h="module-"+m,y=this,R=e(this).data(h),C=e(this),x=C.find(p.icon);g={initialize:function(){g.verbose("Initializing rating module",d),0===x.size()&&g.setup.layout(),d.interactive?g.enable():g.disable(),d.initialRating&&(g.debug("Setting initial rating"),g.setRating(d.initialRating)),C.data(v.rating)&&(g.debug("Rating found in metadata"),g.setRating(C.data(v.rating))),g.instantiate()},instantiate:function(){g.verbose("Instantiating module",d),R=g,C.data(h,g)},destroy:function(){g.verbose("Destroying previous instance",R),C.removeData(h),x.off(b)},refresh:function(){x=C.find(p.icon)},setup:{layout:function(){var n=C.data(v.maxRating)||d.maxRating;g.debug("Generating icon html dynamically"),C.html(e.fn.rating.settings.templates.icon(n)),g.refresh()}},event:{mouseenter:function(){var n=e(this);n.nextAll().removeClass(f.selected),C.addClass(f.selected),n.addClass(f.selected).prevAll().addClass(f.selected)},mouseleave:function(){C.removeClass(f.selected),x.removeClass(f.selected)},click:function(){var n=e(this),t=g.getRating(),i=x.index(n)+1,a="auto"==d.clearable?1===x.size():d.clearable;a&&t==i?g.clearRating():g.setRating(i)}},clearRating:function(){g.debug("Clearing current rating"),g.setRating(0)},getRating:function(){var e=x.filter("."+f.active).size();return g.verbose("Current rating retrieved",e),e},enable:function(){g.debug("Setting rating to interactive mode"),x.on("mouseenter"+b,g.event.mouseenter).on("mouseleave"+b,g.event.mouseleave).on("click"+b,g.event.click),C.removeClass(f.disabled)},disable:function(){g.debug("Setting rating to read-only mode"),x.off(b),C.addClass(f.disabled)},setRating:function(n){var t=n-1>=0?n-1:0,i=x.eq(t);C.removeClass(f.selected),x.removeClass(f.selected).removeClass(f.active),n>0&&(g.verbose("Setting current rating to",n),i.prevAll().andSelf().addClass(f.active)),e.proxy(d.onRate,y)(n)},setting:function(n,t){if(g.debug("Changing setting",n,t),e.isPlainObject(n))e.extend(!0,d,n);else{if(t===i)return d[n];d[n]=t}},internal:function(n,t){if(e.isPlainObject(n))e.extend(!0,g,n);else{if(t===i)return g[n];g[n]=t}},debug:function(){d.debug&&(d.performance?g.performance.log(arguments):(g.debug=Function.prototype.bind.call(console.info,console,d.name+":"),g.debug.apply(console,arguments)))},verbose:function(){d.verbose&&d.debug&&(d.performance?g.performance.log(arguments):(g.verbose=Function.prototype.bind.call(console.info,console,d.name+":"),g.verbose.apply(console,arguments)))},error:function(){g.error=Function.prototype.bind.call(console.error,console,d.name+":"),g.error.apply(console,arguments)},performance:{log:function(e){var n,t,i;d.performance&&(n=(new Date).getTime(),i=r||n,t=n-i,r=n,s.push({Name:e[0],Arguments:[].slice.call(e,1)||"",Element:y,"Execution Time":t})),clearTimeout(g.performance.timer),g.performance.timer=setTimeout(g.performance.display,100)},display:function(){var n=d.name+":",t=0;r=!1,clearTimeout(g.performance.timer),e.each(s,function(e,n){t+=n["Execution Time"]}),n+=" "+t+"ms",o&&(n+=" '"+o+"'"),a.size()>1&&(n+=" ("+a.size()+")"),(console.group!==i||console.table!==i)&&s.length>0&&(console.groupCollapsed(n),console.table?console.table(s):e.each(s,function(e,n){console.log(n.Name+": "+n["Execution Time"]+"ms")}),console.groupEnd()),s=[]}},invoke:function(n,a,o){var r,s,l,c=R;return a=a||u,o=y||o,"string"==typeof n&&c!==i&&(n=n.split(/[\. ]/),r=n.length-1,e.each(n,function(t,a){var o=t!=r?a+n[t+1].charAt(0).toUpperCase()+n[t+1].slice(1):n;if(e.isPlainObject(c[o])&&t!=r)c=c[o];else{if(c[o]!==i)return s=c[o],!1;if(!e.isPlainObject(c[a])||t==r)return c[a]!==i?(s=c[a],!1):!1;c=c[a]}})),e.isFunction(s)?l=s.apply(o,a):s!==i&&(l=s),e.isArray(t)?t.push(l):t!==i?t=[t,l]:l!==i&&(t=l),s}},c?(R===i&&g.initialize(),g.invoke(l)):(R!==i&&g.destroy(),g.initialize())}),t!==i?t:this},e.fn.rating.settings={name:"Rating",namespace:"rating",debug:!1,verbose:!0,performance:!0,initialRating:0,interactive:!0,maxRating:4,clearable:"auto",onRate:function(){},error:{method:"The method you called is not defined",noMaximum:"No maximum rating specified. Cannot generate HTML automatically"},metadata:{rating:"rating",maxRating:"maxRating"},className:{active:"active",disabled:"disabled",selected:"selected",loading:"loading"},selector:{icon:".icon"},templates:{icon:function(e){for(var n=1,t="";e>=n;)t+='',n++;return t}}}}(jQuery,window,document);
--------------------------------------------------------------------------------
/analyzer/app/static/components/message.min.css:
--------------------------------------------------------------------------------
1 | /*
2 | * # Semantic UI
3 | * https://github.com/Semantic-Org/Semantic-UI
4 | * http://www.semantic-ui.com/
5 | *
6 | * Copyright 2014 Contributors
7 | * Released under the MIT license
8 | * http://opensource.org/licenses/MIT
9 | *
10 | */
11 | .ui.message{position:relative;min-height:1em;margin:1em 0;background:#efefef;padding:1em 1.5em;line-height:1.3;color:rgba(0,0,0,.8);-webkit-transition:opacity .2s ease,color .2s ease,background .2s ease,box-shadow .2s ease;transition:opacity .2s ease,color .2s ease,background .2s ease,box-shadow .2s ease;border-radius:.2857rem;box-shadow:0 0 0 1px rgba(39,41,43,.15) inset,0 0 0 0 transparent}.ui.message:first-child{margin-top:0}.ui.message:last-child{margin-bottom:0}.ui.message .header{display:block;font-family:Lato,'Helvetica Neue',Arial,Helvetica,sans-serif;font-weight:700;margin:0 0 .5rem}.ui.message .header:not(.ui){font-size:1.1em}.ui.message p{opacity:.85;margin:.75em 0}.ui.message p:first-child{margin-top:0}.ui.message p:last-child{margin-bottom:0}.ui.message .header+p{margin-top:.25em}.ui.message ul.list{opacity:.85;list-style-position:inside;margin:.5em 0 0;padding:0}.ui.message ul.list:first-child{margin-top:0}.ui.message ul.list:last-child{margin-bottom:0}.ui.message ul.list li{position:relative;list-style-type:none;margin:0 0 .3em 1em;padding:0}.ui.message ul.list li:before{position:absolute;content:'•';left:-1em;height:100%;vertical-align:baseline}.ui.message ul.list li:last-child{margin-bottom:0}.ui.message>.icon{margin-right:.6em}.ui.message>.close.icon{cursor:pointer;position:absolute;margin:0;top:1.15em;right:.5em;opacity:.7;-webkit-transition:opacity .1s linear;transition:opacity .1s linear}.ui.message>.close.icon:hover{opacity:1}.ui.message>:first-child{margin-top:0}.ui.message>:last-child{margin-bottom:0}.ui.message.visible{display:block}.ui.icon.message.visible{display:table}.ui.message.hidden{display:none}.ui.compact.message{display:inline-block}.ui.attached.message{margin-bottom:-1px;border-radius:.2857rem .2857rem 0 0;box-shadow:0 0 0 1px rgba(0,0,0,.1) inset;margin-left:-1px;margin-right:-1px}.ui.attached+.ui.attached.message:not(.top):not(.bottom){margin-top:-1px;border-radius:0}.ui.bottom.attached.message{margin-top:-1px;border-radius:0 0 .2857rem .2857rem;box-shadow:0 0 0 1px rgba(0,0,0,.1) inset,0 1px 2px 0 rgba(0,0,0,.05)}.ui.bottom.attached.message:not(:last-child){margin-bottom:1em}.ui.attached.icon.message{display:block;width:auto}.ui.icon.message{display:table;width:100%}.ui.icon.message>.icon:not(.close){display:table-cell;width:auto;vertical-align:middle;font-size:3em;opacity:.8}.ui.icon.message>.content{display:table-cell;width:100%;vertical-align:middle}.ui.icon.message .icon:not(.close)+.content{padding-left:1.5rem}.ui.icon.message .circular.icon{width:1em}.ui.icon.message .circular.icon+.content{width:auto;padding-left:2em}.ui.floating.message{box-shadow:0 1px 4px 0 rgba(0,0,0,.15),0 0 0 1px rgba(39,41,43,.15) inset}.ui.positive.message{background-color:#eeffe7;color:#3c763d}.ui.attached.positive.message,.ui.positive.message{box-shadow:0 0 0 1px #b7caa7 inset,0 1px 2px 0 rgba(0,0,0,.05)}.ui.positive.message .header{color:#356e36}.ui.negative.message{background-color:#fff0f0;color:#a94442}.ui.attached.negative.message,.ui.negative.message{box-shadow:0 0 0 1px #dbb1b1 inset,0 1px 2px 0 rgba(0,0,0,.05)}.ui.negative.message .header{color:#912d2b}.ui.info.message{background-color:#e9faff;color:#337b92}.ui.attached.info.message,.ui.info.message{box-shadow:0 0 0 1px #aad6df inset,0 1px 2px 0 rgba(0,0,0,.05)}.ui.info.message .header{color:#297187}.ui.warning.message{background-color:#fffbe6;color:#876a38}.ui.attached.warning.message,.ui.warning.message{box-shadow:0 0 0 1px #d9caab inset,0 1px 2px 0 rgba(0,0,0,.05)}.ui.warning.message .header{color:#825c01}.ui.error.message{background-color:#fff0f0;color:#a94442}.ui.attached.error.message,.ui.error.message{box-shadow:0 0 0 1px #dbb1b1 inset,0 1px 2px 0 rgba(0,0,0,.05)}.ui.error.message .header{color:#912d2b}.ui.success.message{background-color:#eeffe7;color:#3c763d}.ui.attached.success.message,.ui.success.message{box-shadow:0 0 0 1px #b7caa7 inset,0 1px 2px 0 rgba(0,0,0,.05)}.ui.success.message .header{color:#356e36}.ui.black.message,.ui.inverted.message{background-color:#1b1c1d;color:#fff}.ui.blue.message{background-color:#dff0ff;color:#3b83c0}.ui.blue.message .header{color:#3576ac}.ui.green.message{background-color:#ebffed;color:#1ebc30}.ui.green.message .header{color:#1aa62a}.ui.orange.message{background-color:#ffedde;color:#e07b53}.ui.orange.message .header{color:#dc6a3d}.ui.pink.message{background-color:#ffe3fb;color:#d9499a}.ui.pink.message .header{color:#d5348e}.ui.purple.message{background-color:#eae7ff;color:#564f8a}.ui.purple.message .header{color:#4c467a}.ui.red.message{background-color:#ffe8e6;color:#d95c5c}.ui.red.message .header{color:#d44747}.ui.teal.message{background-color:#e9ffff;color:#10a3a3}.ui.teal.message .header{color:#0e8c8c}.ui.yellow.message{background-color:#fff8db;color:#b58105}.ui.yellow.message .header{color:#9c6f04}.ui.small.message{font-size:.92857143em}.ui.message{font-size:1em}.ui.large.message{font-size:1.14285714em}.ui.huge.message{font-size:1.42857143em}.ui.massive.message{font-size:1.71428571em}
--------------------------------------------------------------------------------
/analyzer/app/payloads/inline_query.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | MySQL inline queries
7 | 3
8 | 1
9 | 1
10 | 1,2,3,8
11 | 3
12 | (SELECT CONCAT('[DELIMITER_START]',([QUERY]),'[DELIMITER_STOP]'))
13 |
14 |
18 | (SELECT CONCAT('[DELIMITER_START]',(SELECT (ELT([RANDNUM]=[RANDNUM],1))),'[DELIMITER_STOP]'))
19 |
20 |
21 | [DELIMITER_START](?P<result>.*?)[DELIMITER_STOP]
22 |
23 |
24 | MySQL
25 |
26 |
27 |
28 |
29 | PostgreSQL inline queries
30 | 3
31 | 1
32 | 1
33 | 1,2,3,8
34 | 3
35 | (SELECT '[DELIMITER_START]'||([QUERY])::text||'[DELIMITER_STOP]')
36 |
37 | (SELECT '[DELIMITER_START]'||(SELECT (CASE WHEN ([RANDNUM]=[RANDNUM]) THEN 1 ELSE 0 END))::text||'[DELIMITER_STOP]')
38 |
39 |
40 | [DELIMITER_START](?P<result>.*?)[DELIMITER_STOP]
41 |
42 |
43 | PostgreSQL
44 |
45 |
46 |
47 |
48 | Microsoft SQL Server/Sybase inline queries
49 | 3
50 | 1
51 | 1
52 | 1,2,3,8
53 | 3
54 | (SELECT '[DELIMITER_START]'+([QUERY])+'[DELIMITER_STOP]')
55 |
56 | (SELECT '[DELIMITER_START]'+(SELECT (CASE WHEN ([RANDNUM]=[RANDNUM]) THEN '1' ELSE '0' END))+'[DELIMITER_STOP]')
57 |
58 |
59 | [DELIMITER_START](?P<result>.*?)[DELIMITER_STOP]
60 |
61 |
62 | Microsoft SQL Server
63 | Sybase
64 | Windows
65 |
66 |
67 |
68 |
69 | Oracle inline queries
70 | 3
71 | 2
72 | 1
73 | 1,2,3,8
74 | 3
75 | (SELECT ('[DELIMITER_START]'||([QUERY])||'[DELIMITER_STOP]') FROM DUAL)
76 |
77 | (SELECT '[DELIMITER_START]'||(SELECT (CASE WHEN ([RANDNUM]=[RANDNUM]) THEN 1 ELSE 0 END) FROM DUAL)||'[DELIMITER_STOP]' FROM DUAL)
78 |
79 |
80 | [DELIMITER_START](?P<result>.*?)[DELIMITER_STOP]
81 |
82 |
83 | Oracle
84 |
85 |
86 |
87 |
88 | SQLite inline queries
89 | 3
90 | 3
91 | 1
92 | 1,2,3,8
93 | 3
94 | SELECT '[DELIMITER_START]'||([QUERY])||'[DELIMITER_STOP]'
95 |
96 | SELECT '[DELIMITER_START]'||(SELECT (CASE WHEN ([RANDNUM]=[RANDNUM]) THEN 1 ELSE 0 END))||'[DELIMITER_STOP]'
97 |
98 |
99 | [DELIMITER_START](?P<result>.*?)[DELIMITER_STOP]
100 |
101 |
102 | SQLite
103 |
104 |
105 |
106 |
107 | Firebird inline queries
108 | 3
109 | 3
110 | 1
111 | 1,2,3,8
112 | 3
113 | SELECT '[DELIMITER_START]'||([QUERY])||'[DELIMITER_STOP]' FROM RDB$DATABASE
114 |
115 | SELECT '[DELIMITER_START]'||(CASE [RANDNUM] WHEN [RANDNUM] THEN 1 ELSE 0 END)||'[DELIMITER_STOP]' FROM RDB$DATABASE
116 |
117 |
118 | [DELIMITER_START](?P<result>.*?)[DELIMITER_STOP]
119 |
120 |
121 | Firebird
122 |
123 |
124 |
125 |
126 |
--------------------------------------------------------------------------------