You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@metron.apache.org by rm...@apache.org on 2018/08/01 16:44:01 UTC
[1/5] metron git commit: METRON-1671 Create PCAP UI (tiborm via
merrimanr) closes apache/metron#1103
Repository: metron
Updated Branches:
refs/heads/feature/METRON-1554-pcap-query-panel 7dff4def2 -> d5eb56a96
http://git-wip-us.apache.org/repos/asf/metron/blob/d5eb56a9/metron-interface/metron-alerts/src/app/pcap/service/pcap.service.spec.ts
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/src/app/pcap/service/pcap.service.spec.ts b/metron-interface/metron-alerts/src/app/pcap/service/pcap.service.spec.ts
new file mode 100644
index 0000000..244a3ea
--- /dev/null
+++ b/metron-interface/metron-alerts/src/app/pcap/service/pcap.service.spec.ts
@@ -0,0 +1,1752 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import { TestBed, async, inject } from '@angular/core/testing';
+import {
+ BaseRequestOptions,
+ HttpModule,
+ Http,
+ Response,
+ ResponseOptions
+} from '@angular/http';
+import { MockBackend } from '@angular/http/testing';
+
+import { PcapService } from './pcap.service';
+import { PcapRequest } from '../model/pcap.request';
+
+describe('PcapService', () => {
+ beforeEach(() => {
+
+ TestBed.configureTestingModule({
+ imports: [HttpModule],
+ providers: [
+ PcapService,
+ {
+ provide: Http,
+ useFactory: (mockBackend, options) => {
+ return new Http(mockBackend, options);
+ },
+ deps: [MockBackend, BaseRequestOptions]
+ },
+ MockBackend,
+ BaseRequestOptions
+ ]
+ });
+ });
+ describe('getPackets()', () => {
+ it('should return an Observable<Response>',
+ inject([PcapService, MockBackend], (pcapService, mockBackend) => {
+
+ let request: PcapRequest = {
+ startTimeMs: 0,
+ endTimeMs: 0,
+ ipSrcAddr: '0.0.0.0',
+ ipSrcPort: '80',
+ ipDstAddr: '0.0.0.0',
+ ipDstPort: '80',
+ protocol: '*',
+ packetFilter: '*',
+ includeReverse: false,
+ };
+
+ mockBackend.connections.subscribe((connection) => {
+ connection.mockRespond(new Response(new ResponseOptions({body: pdml_json()})));
+ });
+ let packets;
+ pcapService.getPackets(request).subscribe(r => packets = r)
+ expect(packets).toBeTruthy()
+ expect(packets.pdml).toBeTruthy()
+ expect(packets.pdml.packet.length).toBe(1)
+ expect(packets.pdml.packet[0].proto.length).toBeGreaterThan(3)
+
+ console.log(packets)
+ }))
+
+
+ it('should ...', inject([PcapService], (service: PcapService) => {
+ expect(service).toBeTruthy();
+ }));
+
+ })
+
+});
+
+
+
+
+function pdml_json() {
+ return `{
+ "pdml": {
+ "$": {
+ "version": "0",
+ "creator": "wireshark/2.4.2",
+ "time": "Tue Mar 27 21:55:25 2018",
+ "capture_file": "./metron-platform/metron-api/src/test/resources/test-tcp-packet.pcap"
+ },
+ "packet": [
+ {
+ "proto": [
+ {
+ "$": {
+ "name": "geninfo",
+ "pos": "0",
+ "showname": "General information",
+ "size": "104"
+ },
+ "field": [
+ {
+ "$": {
+ "name": "num",
+ "pos": "0",
+ "show": "1",
+ "showname": "Number",
+ "value": "1",
+ "size": "104"
+ }
+ },
+ {
+ "$": {
+ "name": "len",
+ "pos": "0",
+ "show": "104",
+ "showname": "Frame Length",
+ "value": "68",
+ "size": "104"
+ }
+ },
+ {
+ "$": {
+ "name": "caplen",
+ "pos": "0",
+ "show": "104",
+ "showname": "Captured Length",
+ "value": "68",
+ "size": "104"
+ }
+ },
+ {
+ "$": {
+ "name": "timestamp",
+ "pos": "0",
+ "show": "Mar 26, 2014 19:59:40.024362000 GMT",
+ "showname": "Captured Time",
+ "value": "1395863980.024362000",
+ "size": "104"
+ }
+ }
+ ]
+ },
+ {
+ "$": {
+ "name": "frame",
+ "showname": "Frame 1: 104 bytes on wire (832 bits), 104 bytes captured (832 bits)",
+ "size": "104",
+ "pos": "0"
+ },
+ "field": [
+ {
+ "$": {
+ "name": "frame.encap_type",
+ "showname": "Encapsulation type: Ethernet (1)",
+ "size": "0",
+ "pos": "0",
+ "show": "1"
+ }
+ },
+ {
+ "$": {
+ "name": "frame.time",
+ "showname": "Arrival Time: Mar 26, 2014 19:59:40.024362000 GMT",
+ "size": "0",
+ "pos": "0",
+ "show": "Mar 26, 2014 19:59:40.024362000 GMT"
+ }
+ },
+ {
+ "$": {
+ "name": "frame.offset_shift",
+ "showname": "Time shift for this packet: 0.000000000 seconds",
+ "size": "0",
+ "pos": "0",
+ "show": "0.000000000"
+ }
+ },
+ {
+ "$": {
+ "name": "frame.time_epoch",
+ "showname": "Epoch Time: 1395863980.024362000 seconds",
+ "size": "0",
+ "pos": "0",
+ "show": "1395863980.024362000"
+ }
+ },
+ {
+ "$": {
+ "name": "frame.time_delta",
+ "showname": "Time delta from previous captured frame: 0.000000000 seconds",
+ "size": "0",
+ "pos": "0",
+ "show": "0.000000000"
+ }
+ },
+ {
+ "$": {
+ "name": "frame.time_delta_displayed",
+ "showname": "Time delta from previous displayed frame: 0.000000000 seconds",
+ "size": "0",
+ "pos": "0",
+ "show": "0.000000000"
+ }
+ },
+ {
+ "$": {
+ "name": "frame.time_relative",
+ "showname": "Time since reference or first frame: 0.000000000 seconds",
+ "size": "0",
+ "pos": "0",
+ "show": "0.000000000"
+ }
+ },
+ {
+ "$": {
+ "name": "frame.number",
+ "showname": "Frame Number: 1",
+ "size": "0",
+ "pos": "0",
+ "show": "1"
+ }
+ },
+ {
+ "$": {
+ "name": "frame.len",
+ "showname": "Frame Length: 104 bytes (832 bits)",
+ "size": "0",
+ "pos": "0",
+ "show": "104"
+ }
+ },
+ {
+ "$": {
+ "name": "frame.cap_len",
+ "showname": "Capture Length: 104 bytes (832 bits)",
+ "size": "0",
+ "pos": "0",
+ "show": "104"
+ }
+ },
+ {
+ "$": {
+ "name": "frame.marked",
+ "showname": "Frame is marked: False",
+ "size": "0",
+ "pos": "0",
+ "show": "0"
+ }
+ },
+ {
+ "$": {
+ "name": "frame.ignored",
+ "showname": "Frame is ignored: False",
+ "size": "0",
+ "pos": "0",
+ "show": "0"
+ }
+ },
+ {
+ "$": {
+ "name": "frame.protocols",
+ "showname": "Protocols in frame: eth:ethertype:ip:tcp:smtp",
+ "size": "0",
+ "pos": "0",
+ "show": "eth:ethertype:ip:tcp:smtp"
+ }
+ }
+ ]
+ },
+ {
+ "$": {
+ "name": "eth",
+ "showname": "Ethernet II, Src: MS-NLB-PhysServer-26_c5:01:00:02 (02:1a:c5:01:00:02), Dst: MS-NLB-PhysServer-26_c5:05:00:02 (02:1a:c5:05:00:02)",
+ "size": "14",
+ "pos": "0"
+ },
+ "field": [
+ {
+ "$": {
+ "name": "eth.dst",
+ "showname": "Destination: MS-NLB-PhysServer-26_c5:05:00:02 (02:1a:c5:05:00:02)",
+ "size": "6",
+ "pos": "0",
+ "show": "02:1a:c5:05:00:02",
+ "value": "021ac5050002"
+ },
+ "field": [
+ {
+ "$": {
+ "name": "eth.dst_resolved",
+ "showname": "Destination (resolved): MS-NLB-PhysServer-26_c5:05:00:02",
+ "hide": "yes",
+ "size": "6",
+ "pos": "0",
+ "show": "MS-NLB-PhysServer-26_c5:05:00:02",
+ "value": "021ac5050002"
+ }
+ },
+ {
+ "$": {
+ "name": "eth.addr",
+ "showname": "Address: MS-NLB-PhysServer-26_c5:05:00:02 (02:1a:c5:05:00:02)",
+ "size": "6",
+ "pos": "0",
+ "show": "02:1a:c5:05:00:02",
+ "value": "021ac5050002"
+ }
+ },
+ {
+ "$": {
+ "name": "eth.addr_resolved",
+ "showname": "Address (resolved): MS-NLB-PhysServer-26_c5:05:00:02",
+ "hide": "yes",
+ "size": "6",
+ "pos": "0",
+ "show": "MS-NLB-PhysServer-26_c5:05:00:02",
+ "value": "021ac5050002"
+ }
+ },
+ {
+ "$": {
+ "name": "eth.lg",
+ "showname": ".... ..1. .... .... .... .... = LG bit: Locally administered address (this is NOT the factory default)",
+ "size": "3",
+ "pos": "0",
+ "show": "1",
+ "value": "1",
+ "unmaskedvalue": "021ac5"
+ }
+ },
+ {
+ "$": {
+ "name": "eth.ig",
+ "showname": ".... ...0 .... .... .... .... = IG bit: Individual address (unicast)",
+ "size": "3",
+ "pos": "0",
+ "show": "0",
+ "value": "0",
+ "unmaskedvalue": "021ac5"
+ }
+ }
+ ]
+ },
+ {
+ "$": {
+ "name": "eth.src",
+ "showname": "Source: MS-NLB-PhysServer-26_c5:01:00:02 (02:1a:c5:01:00:02)",
+ "size": "6",
+ "pos": "6",
+ "show": "02:1a:c5:01:00:02",
+ "value": "021ac5010002"
+ },
+ "field": [
+ {
+ "$": {
+ "name": "eth.src_resolved",
+ "showname": "Source (resolved): MS-NLB-PhysServer-26_c5:01:00:02",
+ "hide": "yes",
+ "size": "6",
+ "pos": "6",
+ "show": "MS-NLB-PhysServer-26_c5:01:00:02",
+ "value": "021ac5010002"
+ }
+ },
+ {
+ "$": {
+ "name": "eth.addr",
+ "showname": "Address: MS-NLB-PhysServer-26_c5:01:00:02 (02:1a:c5:01:00:02)",
+ "size": "6",
+ "pos": "6",
+ "show": "02:1a:c5:01:00:02",
+ "value": "021ac5010002"
+ }
+ },
+ {
+ "$": {
+ "name": "eth.addr_resolved",
+ "showname": "Address (resolved): MS-NLB-PhysServer-26_c5:01:00:02",
+ "hide": "yes",
+ "size": "6",
+ "pos": "6",
+ "show": "MS-NLB-PhysServer-26_c5:01:00:02",
+ "value": "021ac5010002"
+ }
+ },
+ {
+ "$": {
+ "name": "eth.lg",
+ "showname": ".... ..1. .... .... .... .... = LG bit: Locally administered address (this is NOT the factory default)",
+ "size": "3",
+ "pos": "6",
+ "show": "1",
+ "value": "1",
+ "unmaskedvalue": "021ac5"
+ }
+ },
+ {
+ "$": {
+ "name": "eth.ig",
+ "showname": ".... ...0 .... .... .... .... = IG bit: Individual address (unicast)",
+ "size": "3",
+ "pos": "6",
+ "show": "0",
+ "value": "0",
+ "unmaskedvalue": "021ac5"
+ }
+ }
+ ]
+ },
+ {
+ "$": {
+ "name": "eth.type",
+ "showname": "Type: IPv4 (0x0800)",
+ "size": "2",
+ "pos": "12",
+ "show": "0x00000800",
+ "value": "0800"
+ }
+ },
+ {
+ "$": {
+ "name": "eth.fcs",
+ "showname": "Frame check sequence: 0x26469e92 [correct]",
+ "size": "4",
+ "pos": "100",
+ "show": "0x26469e92",
+ "value": "26469e92"
+ }
+ },
+ {
+ "$": {
+ "name": "eth.fcs.status",
+ "showname": "FCS Status: Good",
+ "size": "0",
+ "pos": "100",
+ "show": "1"
+ }
+ }
+ ]
+ },
+ {
+ "$": {
+ "name": "ip",
+ "showname": "Internet Protocol Version 4, Src: 24.0.0.2, Dst: 24.128.0.2",
+ "size": "20",
+ "pos": "14"
+ },
+ "field": [
+ {
+ "$": {
+ "name": "ip.version",
+ "showname": "0100 .... = Version: 4",
+ "size": "1",
+ "pos": "14",
+ "show": "4",
+ "value": "4",
+ "unmaskedvalue": "45"
+ }
+ },
+ {
+ "$": {
+ "name": "ip.hdr_len",
+ "showname": ".... 0101 = Header Length: 20 bytes (5)",
+ "size": "1",
+ "pos": "14",
+ "show": "20",
+ "value": "45"
+ }
+ },
+ {
+ "$": {
+ "name": "ip.dsfield",
+ "showname": "Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT)",
+ "size": "1",
+ "pos": "15",
+ "show": "0x00000000",
+ "value": "00"
+ },
+ "field": [
+ {
+ "$": {
+ "name": "ip.dsfield.dscp",
+ "showname": "0000 00.. = Differentiated Services Codepoint: Default (0)",
+ "size": "1",
+ "pos": "15",
+ "show": "0",
+ "value": "0",
+ "unmaskedvalue": "00"
+ }
+ },
+ {
+ "$": {
+ "name": "ip.dsfield.ecn",
+ "showname": ".... ..00 = Explicit Congestion Notification: Not ECN-Capable Transport (0)",
+ "size": "1",
+ "pos": "15",
+ "show": "0",
+ "value": "0",
+ "unmaskedvalue": "00"
+ }
+ }
+ ]
+ },
+ {
+ "$": {
+ "name": "ip.len",
+ "showname": "Total Length: 86",
+ "size": "2",
+ "pos": "16",
+ "show": "86",
+ "value": "0056"
+ }
+ },
+ {
+ "$": {
+ "name": "ip.id",
+ "showname": "Identification: 0xcff6 (53238)",
+ "size": "2",
+ "pos": "18",
+ "show": "0x0000cff6",
+ "value": "cff6"
+ }
+ },
+ {
+ "$": {
+ "name": "ip.flags",
+ "showname": "Flags: 0x02 (Don't Fragment)",
+ "size": "1",
+ "pos": "20",
+ "show": "0x00000002",
+ "value": "40"
+ },
+ "field": [
+ {
+ "$": {
+ "name": "ip.flags.rb",
+ "showname": "0... .... = Reserved bit: Not set",
+ "size": "1",
+ "pos": "20",
+ "show": "0",
+ "value": "40"
+ }
+ },
+ {
+ "$": {
+ "name": "ip.flags.df",
+ "showname": ".1.. .... = Don't fragment: Set",
+ "size": "1",
+ "pos": "20",
+ "show": "1",
+ "value": "40"
+ }
+ },
+ {
+ "$": {
+ "name": "ip.flags.mf",
+ "showname": "..0. .... = More fragments: Not set",
+ "size": "1",
+ "pos": "20",
+ "show": "0",
+ "value": "40"
+ }
+ }
+ ]
+ },
+ {
+ "$": {
+ "name": "ip.frag_offset",
+ "showname": "Fragment offset: 0",
+ "size": "2",
+ "pos": "20",
+ "show": "0",
+ "value": "4000"
+ }
+ },
+ {
+ "$": {
+ "name": "ip.ttl",
+ "showname": "Time to live: 32",
+ "size": "1",
+ "pos": "22",
+ "show": "32",
+ "value": "20"
+ }
+ },
+ {
+ "$": {
+ "name": "ip.proto",
+ "showname": "Protocol: TCP (6)",
+ "size": "1",
+ "pos": "23",
+ "show": "6",
+ "value": "06"
+ }
+ },
+ {
+ "$": {
+ "name": "ip.checksum",
+ "showname": "Header checksum: 0x5a28 [validation disabled]",
+ "size": "2",
+ "pos": "24",
+ "show": "0x00005a28",
+ "value": "5a28"
+ }
+ },
+ {
+ "$": {
+ "name": "ip.checksum.status",
+ "showname": "Header checksum status: Unverified",
+ "size": "0",
+ "pos": "24",
+ "show": "2"
+ }
+ },
+ {
+ "$": {
+ "name": "ip.src",
+ "showname": "Source: 24.0.0.2",
+ "size": "4",
+ "pos": "26",
+ "show": "24.0.0.2",
+ "value": "18000002"
+ }
+ },
+ {
+ "$": {
+ "name": "ip.addr",
+ "showname": "Source or Destination Address: 24.0.0.2",
+ "hide": "yes",
+ "size": "4",
+ "pos": "26",
+ "show": "24.0.0.2",
+ "value": "18000002"
+ }
+ },
+ {
+ "$": {
+ "name": "ip.src_host",
+ "showname": "Source Host: 24.0.0.2",
+ "hide": "yes",
+ "size": "4",
+ "pos": "26",
+ "show": "24.0.0.2",
+ "value": "18000002"
+ }
+ },
+ {
+ "$": {
+ "name": "ip.host",
+ "showname": "Source or Destination Host: 24.0.0.2",
+ "hide": "yes",
+ "size": "4",
+ "pos": "26",
+ "show": "24.0.0.2",
+ "value": "18000002"
+ }
+ },
+ {
+ "$": {
+ "name": "ip.dst",
+ "showname": "Destination: 24.128.0.2",
+ "size": "4",
+ "pos": "30",
+ "show": "24.128.0.2",
+ "value": "18800002"
+ }
+ },
+ {
+ "$": {
+ "name": "ip.addr",
+ "showname": "Source or Destination Address: 24.128.0.2",
+ "hide": "yes",
+ "size": "4",
+ "pos": "30",
+ "show": "24.128.0.2",
+ "value": "18800002"
+ }
+ },
+ {
+ "$": {
+ "name": "ip.dst_host",
+ "showname": "Destination Host: 24.128.0.2",
+ "hide": "yes",
+ "size": "4",
+ "pos": "30",
+ "show": "24.128.0.2",
+ "value": "18800002"
+ }
+ },
+ {
+ "$": {
+ "name": "ip.host",
+ "showname": "Source or Destination Host: 24.128.0.2",
+ "hide": "yes",
+ "size": "4",
+ "pos": "30",
+ "show": "24.128.0.2",
+ "value": "18800002"
+ }
+ },
+ {
+ "$": {
+ "name": "",
+ "show": "Source GeoIP: United States, Woodbridge, NJ, AS7922 Comcast Cable Communications, LLC, United States, Woodbridge, NJ, AS7922 Comcast Cable Communications, LLC, 40.557598, -74.284599",
+ "size": "4",
+ "pos": "26",
+ "value": "18000002"
+ },
+ "field": [
+ {
+ "$": {
+ "name": "ip.geoip.src_country",
+ "showname": "Source GeoIP Country: United States",
+ "size": "4",
+ "pos": "26",
+ "show": "United States",
+ "value": "18000002"
+ }
+ },
+ {
+ "$": {
+ "name": "ip.geoip.country",
+ "showname": "Source or Destination GeoIP Country: United States",
+ "hide": "yes",
+ "size": "4",
+ "pos": "26",
+ "show": "United States",
+ "value": "18000002"
+ }
+ },
+ {
+ "$": {
+ "name": "ip.geoip.src_city",
+ "showname": "Source GeoIP City: Woodbridge, NJ",
+ "size": "4",
+ "pos": "26",
+ "show": "Woodbridge, NJ",
+ "value": "18000002"
+ }
+ },
+ {
+ "$": {
+ "name": "ip.geoip.city",
+ "showname": "Source or Destination GeoIP City: Woodbridge, NJ",
+ "hide": "yes",
+ "size": "4",
+ "pos": "26",
+ "show": "Woodbridge, NJ",
+ "value": "18000002"
+ }
+ },
+ {
+ "$": {
+ "name": "ip.geoip.src_asnum",
+ "showname": "Source GeoIP AS Number: AS7922 Comcast Cable Communications, LLC",
+ "size": "4",
+ "pos": "26",
+ "show": "AS7922 Comcast Cable Communications, LLC",
+ "value": "18000002"
+ }
+ },
+ {
+ "$": {
+ "name": "ip.geoip.asnum",
+ "showname": "Source or Destination GeoIP AS Number: AS7922 Comcast Cable Communications, LLC",
+ "hide": "yes",
+ "size": "4",
+ "pos": "26",
+ "show": "AS7922 Comcast Cable Communications, LLC",
+ "value": "18000002"
+ }
+ },
+ {
+ "$": {
+ "name": "ip.geoip.src_country",
+ "showname": "Source GeoIP Country: United States",
+ "size": "4",
+ "pos": "26",
+ "show": "United States",
+ "value": "18000002"
+ }
+ },
+ {
+ "$": {
+ "name": "ip.geoip.country",
+ "showname": "Source or Destination GeoIP Country: United States",
+ "hide": "yes",
+ "size": "4",
+ "pos": "26",
+ "show": "United States",
+ "value": "18000002"
+ }
+ },
+ {
+ "$": {
+ "name": "ip.geoip.src_city",
+ "showname": "Source GeoIP City: Woodbridge, NJ",
+ "size": "4",
+ "pos": "26",
+ "show": "Woodbridge, NJ",
+ "value": "18000002"
+ }
+ },
+ {
+ "$": {
+ "name": "ip.geoip.city",
+ "showname": "Source or Destination GeoIP City: Woodbridge, NJ",
+ "hide": "yes",
+ "size": "4",
+ "pos": "26",
+ "show": "Woodbridge, NJ",
+ "value": "18000002"
+ }
+ },
+ {
+ "$": {
+ "name": "ip.geoip.src_asnum",
+ "showname": "Source GeoIP AS Number: AS7922 Comcast Cable Communications, LLC",
+ "size": "4",
+ "pos": "26",
+ "show": "AS7922 Comcast Cable Communications, LLC",
+ "value": "18000002"
+ }
+ },
+ {
+ "$": {
+ "name": "ip.geoip.asnum",
+ "showname": "Source or Destination GeoIP AS Number: AS7922 Comcast Cable Communications, LLC",
+ "hide": "yes",
+ "size": "4",
+ "pos": "26",
+ "show": "AS7922 Comcast Cable Communications, LLC",
+ "value": "18000002"
+ }
+ },
+ {
+ "$": {
+ "name": "ip.geoip.src_lat",
+ "showname": "Source GeoIP Latitude: 40.557598",
+ "size": "4",
+ "pos": "26",
+ "show": "40.557598",
+ "value": "18000002"
+ }
+ },
+ {
+ "$": {
+ "name": "ip.geoip.lat",
+ "showname": "Source or Destination GeoIP Latitude: 40.557598",
+ "hide": "yes",
+ "size": "4",
+ "pos": "26",
+ "show": "40.557598",
+ "value": "18000002"
+ }
+ },
+ {
+ "$": {
+ "name": "ip.geoip.src_lon",
+ "showname": "Source GeoIP Longitude: -74.284599",
+ "size": "4",
+ "pos": "26",
+ "show": "-74.284599",
+ "value": "18000002"
+ }
+ },
+ {
+ "$": {
+ "name": "ip.geoip.lon",
+ "showname": "Source or Destination GeoIP Longitude: -74.284599",
+ "hide": "yes",
+ "size": "4",
+ "pos": "26",
+ "show": "-74.284599",
+ "value": "18000002"
+ }
+ }
+ ]
+ },
+ {
+ "$": {
+ "name": "",
+ "show": "Destination GeoIP: United States, Groton, CT, AS7922 Comcast Cable Communications, LLC, United States, Groton, CT, AS7922 Comcast Cable Communications, LLC, 41.353199, -72.038597",
+ "size": "4",
+ "pos": "30",
+ "value": "18800002"
+ },
+ "field": [
+ {
+ "$": {
+ "name": "ip.geoip.dst_country",
+ "showname": "Destination GeoIP Country: United States",
+ "size": "4",
+ "pos": "30",
+ "show": "United States",
+ "value": "18800002"
+ }
+ },
+ {
+ "$": {
+ "name": "ip.geoip.country",
+ "showname": "Source or Destination GeoIP Country: United States",
+ "hide": "yes",
+ "size": "4",
+ "pos": "30",
+ "show": "United States",
+ "value": "18800002"
+ }
+ },
+ {
+ "$": {
+ "name": "ip.geoip.dst_city",
+ "showname": "Destination GeoIP City: Groton, CT",
+ "size": "4",
+ "pos": "30",
+ "show": "Groton, CT",
+ "value": "18800002"
+ }
+ },
+ {
+ "$": {
+ "name": "ip.geoip.city",
+ "showname": "Source or Destination GeoIP City: Groton, CT",
+ "hide": "yes",
+ "size": "4",
+ "pos": "30",
+ "show": "Groton, CT",
+ "value": "18800002"
+ }
+ },
+ {
+ "$": {
+ "name": "ip.geoip.dst_asnum",
+ "showname": "Destination GeoIP AS Number: AS7922 Comcast Cable Communications, LLC",
+ "size": "4",
+ "pos": "30",
+ "show": "AS7922 Comcast Cable Communications, LLC",
+ "value": "18800002"
+ }
+ },
+ {
+ "$": {
+ "name": "ip.geoip.asnum",
+ "showname": "Source or Destination GeoIP AS Number: AS7922 Comcast Cable Communications, LLC",
+ "hide": "yes",
+ "size": "4",
+ "pos": "30",
+ "show": "AS7922 Comcast Cable Communications, LLC",
+ "value": "18800002"
+ }
+ },
+ {
+ "$": {
+ "name": "ip.geoip.dst_country",
+ "showname": "Destination GeoIP Country: United States",
+ "size": "4",
+ "pos": "30",
+ "show": "United States",
+ "value": "18800002"
+ }
+ },
+ {
+ "$": {
+ "name": "ip.geoip.country",
+ "showname": "Source or Destination GeoIP Country: United States",
+ "hide": "yes",
+ "size": "4",
+ "pos": "30",
+ "show": "United States",
+ "value": "18800002"
+ }
+ },
+ {
+ "$": {
+ "name": "ip.geoip.dst_city",
+ "showname": "Destination GeoIP City: Groton, CT",
+ "size": "4",
+ "pos": "30",
+ "show": "Groton, CT",
+ "value": "18800002"
+ }
+ },
+ {
+ "$": {
+ "name": "ip.geoip.city",
+ "showname": "Source or Destination GeoIP City: Groton, CT",
+ "hide": "yes",
+ "size": "4",
+ "pos": "30",
+ "show": "Groton, CT",
+ "value": "18800002"
+ }
+ },
+ {
+ "$": {
+ "name": "ip.geoip.dst_asnum",
+ "showname": "Destination GeoIP AS Number: AS7922 Comcast Cable Communications, LLC",
+ "size": "4",
+ "pos": "30",
+ "show": "AS7922 Comcast Cable Communications, LLC",
+ "value": "18800002"
+ }
+ },
+ {
+ "$": {
+ "name": "ip.geoip.asnum",
+ "showname": "Source or Destination GeoIP AS Number: AS7922 Comcast Cable Communications, LLC",
+ "hide": "yes",
+ "size": "4",
+ "pos": "30",
+ "show": "AS7922 Comcast Cable Communications, LLC",
+ "value": "18800002"
+ }
+ },
+ {
+ "$": {
+ "name": "ip.geoip.dst_lat",
+ "showname": "Destination GeoIP Latitude: 41.353199",
+ "size": "4",
+ "pos": "30",
+ "show": "41.353199",
+ "value": "18800002"
+ }
+ },
+ {
+ "$": {
+ "name": "ip.geoip.lat",
+ "showname": "Source or Destination GeoIP Latitude: 41.353199",
+ "hide": "yes",
+ "size": "4",
+ "pos": "30",
+ "show": "41.353199",
+ "value": "18800002"
+ }
+ },
+ {
+ "$": {
+ "name": "ip.geoip.dst_lon",
+ "showname": "Destination GeoIP Longitude: -72.038597",
+ "size": "4",
+ "pos": "30",
+ "show": "-72.038597",
+ "value": "18800002"
+ }
+ },
+ {
+ "$": {
+ "name": "ip.geoip.lon",
+ "showname": "Source or Destination GeoIP Longitude: -72.038597",
+ "hide": "yes",
+ "size": "4",
+ "pos": "30",
+ "show": "-72.038597",
+ "value": "18800002"
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "$": {
+ "name": "tcp",
+ "showname": "Transmission Control Protocol, Src Port: 2137, Dst Port: 25, Seq: 1, Ack: 1, Len: 34",
+ "size": "32",
+ "pos": "34"
+ },
+ "field": [
+ {
+ "$": {
+ "name": "tcp.srcport",
+ "showname": "Source Port: 2137",
+ "size": "2",
+ "pos": "34",
+ "show": "2137",
+ "value": "0859"
+ }
+ },
+ {
+ "$": {
+ "name": "tcp.dstport",
+ "showname": "Destination Port: 25",
+ "size": "2",
+ "pos": "36",
+ "show": "25",
+ "value": "0019"
+ }
+ },
+ {
+ "$": {
+ "name": "tcp.port",
+ "showname": "Source or Destination Port: 2137",
+ "hide": "yes",
+ "size": "2",
+ "pos": "34",
+ "show": "2137",
+ "value": "0859"
+ }
+ },
+ {
+ "$": {
+ "name": "tcp.port",
+ "showname": "Source or Destination Port: 25",
+ "hide": "yes",
+ "size": "2",
+ "pos": "36",
+ "show": "25",
+ "value": "0019"
+ }
+ },
+ {
+ "$": {
+ "name": "tcp.stream",
+ "showname": "Stream index: 0",
+ "size": "0",
+ "pos": "34",
+ "show": "0"
+ }
+ },
+ {
+ "$": {
+ "name": "tcp.len",
+ "showname": "TCP Segment Len: 34",
+ "size": "1",
+ "pos": "46",
+ "show": "34",
+ "value": "80"
+ }
+ },
+ {
+ "$": {
+ "name": "tcp.seq",
+ "showname": "Sequence number: 1 (relative sequence number)",
+ "size": "4",
+ "pos": "38",
+ "show": "1",
+ "value": "f88900ce"
+ }
+ },
+ {
+ "$": {
+ "name": "tcp.nxtseq",
+ "showname": "Next sequence number: 35 (relative sequence number)",
+ "size": "0",
+ "pos": "34",
+ "show": "35"
+ }
+ },
+ {
+ "$": {
+ "name": "tcp.ack",
+ "showname": "Acknowledgment number: 1 (relative ack number)",
+ "size": "4",
+ "pos": "42",
+ "show": "1",
+ "value": "365aa74f"
+ }
+ },
+ {
+ "$": {
+ "name": "tcp.hdr_len",
+ "showname": "1000 .... = Header Length: 32 bytes (8)",
+ "size": "1",
+ "pos": "46",
+ "show": "32",
+ "value": "80"
+ }
+ },
+ {
+ "$": {
+ "name": "tcp.flags",
+ "showname": "Flags: 0x018 (PSH, ACK)",
+ "size": "2",
+ "pos": "46",
+ "show": "0x00000018",
+ "value": "18",
+ "unmaskedvalue": "8018"
+ },
+ "field": [
+ {
+ "$": {
+ "name": "tcp.flags.res",
+ "showname": "000. .... .... = Reserved: Not set",
+ "size": "1",
+ "pos": "46",
+ "show": "0",
+ "value": "0",
+ "unmaskedvalue": "80"
+ }
+ },
+ {
+ "$": {
+ "name": "tcp.flags.ns",
+ "showname": "...0 .... .... = Nonce: Not set",
+ "size": "1",
+ "pos": "46",
+ "show": "0",
+ "value": "0",
+ "unmaskedvalue": "80"
+ }
+ },
+ {
+ "$": {
+ "name": "tcp.flags.cwr",
+ "showname": ".... 0... .... = Congestion Window Reduced (CWR): Not set",
+ "size": "1",
+ "pos": "47",
+ "show": "0",
+ "value": "0",
+ "unmaskedvalue": "18"
+ }
+ },
+ {
+ "$": {
+ "name": "tcp.flags.ecn",
+ "showname": ".... .0.. .... = ECN-Echo: Not set",
+ "size": "1",
+ "pos": "47",
+ "show": "0",
+ "value": "0",
+ "unmaskedvalue": "18"
+ }
+ },
+ {
+ "$": {
+ "name": "tcp.flags.urg",
+ "showname": ".... ..0. .... = Urgent: Not set",
+ "size": "1",
+ "pos": "47",
+ "show": "0",
+ "value": "0",
+ "unmaskedvalue": "18"
+ }
+ },
+ {
+ "$": {
+ "name": "tcp.flags.ack",
+ "showname": ".... ...1 .... = Acknowledgment: Set",
+ "size": "1",
+ "pos": "47",
+ "show": "1",
+ "value": "1",
+ "unmaskedvalue": "18"
+ }
+ },
+ {
+ "$": {
+ "name": "tcp.flags.push",
+ "showname": ".... .... 1... = Push: Set",
+ "size": "1",
+ "pos": "47",
+ "show": "1",
+ "value": "1",
+ "unmaskedvalue": "18"
+ }
+ },
+ {
+ "$": {
+ "name": "tcp.flags.reset",
+ "showname": ".... .... .0.. = Reset: Not set",
+ "size": "1",
+ "pos": "47",
+ "show": "0",
+ "value": "0",
+ "unmaskedvalue": "18"
+ }
+ },
+ {
+ "$": {
+ "name": "tcp.flags.syn",
+ "showname": ".... .... ..0. = Syn: Not set",
+ "size": "1",
+ "pos": "47",
+ "show": "0",
+ "value": "0",
+ "unmaskedvalue": "18"
+ }
+ },
+ {
+ "$": {
+ "name": "tcp.flags.fin",
+ "showname": ".... .... ...0 = Fin: Not set",
+ "size": "1",
+ "pos": "47",
+ "show": "0",
+ "value": "0",
+ "unmaskedvalue": "18"
+ }
+ },
+ {
+ "$": {
+ "name": "tcp.flags.str",
+ "showname": "TCP Flags: \\\\xc2\\\\xb7\\\\xc2\\\\xb7\\\\xc2\\\\xb7\\\\xc2\\\\xb7\\\\xc2\\\\xb7\\\\xc2\\\\xb7\\\\xc2\\\\xb7AP\\\\xc2\\\\xb7\\\\xc2\\\\xb7\\\\xc2\\\\xb7",
+ "size": "2",
+ "pos": "46",
+ "show": "\\\\xc2\\\\xb7\\\\xc2\\\\xb7\\\\xc2\\\\xb7\\\\xc2\\\\xb7\\\\xc2\\\\xb7\\\\xc2\\\\xb7\\\\xc2\\\\xb7AP\\\\xc2\\\\xb7\\\\xc2\\\\xb7\\\\xc2\\\\xb7",
+ "value": "8018"
+ }
+ }
+ ]
+ },
+ {
+ "$": {
+ "name": "tcp.window_size_value",
+ "showname": "Window size value: 7240",
+ "size": "2",
+ "pos": "48",
+ "show": "7240",
+ "value": "1c48"
+ }
+ },
+ {
+ "$": {
+ "name": "tcp.window_size",
+ "showname": "Calculated window size: 7240",
+ "size": "2",
+ "pos": "48",
+ "show": "7240",
+ "value": "1c48"
+ }
+ },
+ {
+ "$": {
+ "name": "tcp.window_size_scalefactor",
+ "showname": "Window size scaling factor: -1 (unknown)",
+ "size": "2",
+ "pos": "48",
+ "show": "-1",
+ "value": "1c48"
+ }
+ },
+ {
+ "$": {
+ "name": "tcp.checksum",
+ "showname": "Checksum: 0x681f [unverified]",
+ "size": "2",
+ "pos": "50",
+ "show": "0x0000681f",
+ "value": "681f"
+ }
+ },
+ {
+ "$": {
+ "name": "tcp.checksum.status",
+ "showname": "Checksum Status: Unverified",
+ "size": "0",
+ "pos": "50",
+ "show": "2"
+ }
+ },
+ {
+ "$": {
+ "name": "tcp.urgent_pointer",
+ "showname": "Urgent pointer: 0",
+ "size": "2",
+ "pos": "52",
+ "show": "0",
+ "value": "0000"
+ }
+ },
+ {
+ "$": {
+ "name": "tcp.options",
+ "showname": "Options: (12 bytes), No-Operation (NOP), No-Operation (NOP), Timestamps",
+ "size": "12",
+ "pos": "54",
+ "show": "01:01:08:0a:eb:83:4b:08:e8:8c:de:cb",
+ "value": "0101080aeb834b08e88cdecb"
+ },
+ "field": [
+ {
+ "$": {
+ "name": "tcp.options.nop",
+ "showname": "TCP Option - No-Operation (NOP)",
+ "size": "1",
+ "pos": "54",
+ "show": "01",
+ "value": "01"
+ },
+ "field": [
+ {
+ "$": {
+ "name": "tcp.option_kind",
+ "showname": "Kind: No-Operation (1)",
+ "size": "1",
+ "pos": "54",
+ "show": "1",
+ "value": "01"
+ }
+ }
+ ]
+ },
+ {
+ "$": {
+ "name": "tcp.options.nop",
+ "showname": "TCP Option - No-Operation (NOP)",
+ "size": "1",
+ "pos": "55",
+ "show": "01",
+ "value": "01"
+ },
+ "field": [
+ {
+ "$": {
+ "name": "tcp.option_kind",
+ "showname": "Kind: No-Operation (1)",
+ "size": "1",
+ "pos": "55",
+ "show": "1",
+ "value": "01"
+ }
+ }
+ ]
+ },
+ {
+ "$": {
+ "name": "tcp.options.timestamp",
+ "showname": "TCP Option - Timestamps: TSval 3951250184, TSecr 3901546187",
+ "size": "10",
+ "pos": "56",
+ "show": "08:0a:eb:83:4b:08:e8:8c:de:cb",
+ "value": "080aeb834b08e88cdecb"
+ },
+ "field": [
+ {
+ "$": {
+ "name": "tcp.option_kind",
+ "showname": "Kind: Time Stamp Option (8)",
+ "size": "1",
+ "pos": "56",
+ "show": "8",
+ "value": "08"
+ }
+ },
+ {
+ "$": {
+ "name": "tcp.option_len",
+ "showname": "Length: 10",
+ "size": "1",
+ "pos": "57",
+ "show": "10",
+ "value": "0a"
+ }
+ },
+ {
+ "$": {
+ "name": "tcp.options.timestamp.tsval",
+ "showname": "Timestamp value: 3951250184",
+ "size": "4",
+ "pos": "58",
+ "show": "3951250184",
+ "value": "eb834b08"
+ }
+ },
+ {
+ "$": {
+ "name": "tcp.options.timestamp.tsecr",
+ "showname": "Timestamp echo reply: 3901546187",
+ "size": "4",
+ "pos": "62",
+ "show": "3901546187",
+ "value": "e88cdecb"
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "$": {
+ "name": "tcp.analysis",
+ "showname": "SEQ/ACK analysis",
+ "size": "0",
+ "pos": "34",
+ "show": "",
+ "value": ""
+ },
+ "field": [
+ {
+ "$": {
+ "name": "tcp.analysis.bytes_in_flight",
+ "showname": "Bytes in flight: 34",
+ "size": "0",
+ "pos": "34",
+ "show": "34"
+ }
+ },
+ {
+ "$": {
+ "name": "tcp.analysis.push_bytes_sent",
+ "showname": "Bytes sent since last PSH flag: 34",
+ "size": "0",
+ "pos": "34",
+ "show": "34"
+ }
+ }
+ ]
+ },
+ {
+ "$": {
+ "name": "tcp.payload",
+ "showname": "TCP payload (34 bytes)",
+ "size": "34",
+ "pos": "66",
+ "show": "45:48:4c:4f:20:63:6c:69:65:6e:74:2d:31:38:30:30:30:30:30:33:2e:65:78:61:6d:70:6c:65:2e:69:6e:74:0d:0a",
+ "value": "45484c4f20636c69656e742d31383030303030332e6578616d706c652e696e740d0a"
+ }
+ }
+ ]
+ },
+ {
+ "$": {
+ "name": "smtp",
+ "showname": "Simple Mail Transfer Protocol",
+ "size": "34",
+ "pos": "66"
+ },
+ "field": [
+ {
+ "$": {
+ "name": "smtp.req",
+ "showname": "Request: True",
+ "hide": "yes",
+ "size": "0",
+ "pos": "66",
+ "show": "1"
+ }
+ },
+ {
+ "$": {
+ "name": "smtp.command_line",
+ "showname": "Command Line: EHLO client-18000003.example.int\\\\r\\\\n",
+ "size": "34",
+ "pos": "66",
+ "show": "EHLO client-18000003.example.int\\\\xd\\\\xa",
+ "value": "45484c4f20636c69656e742d31383030303030332e6578616d706c652e696e740d0a"
+ },
+ "field": [
+ {
+ "$": {
+ "name": "smtp.req.command",
+ "showname": "Command: EHLO",
+ "size": "4",
+ "pos": "66",
+ "show": "EHLO",
+ "value": "45484c4f"
+ }
+ },
+ {
+ "$": {
+ "name": "smtp.req.parameter",
+ "showname": "Request parameter: client-18000003.example.int",
+ "size": "27",
+ "pos": "71",
+ "show": "client-18000003.example.int",
+ "value": "636c69656e742d31383030303030332e6578616d706c652e696e74"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+}
+`
+}
+
+function pdml() {
+ return `<?xml version="1.0" encoding="utf-8"?>
+ <?xml-stylesheet type="text/xsl" href="pdml2html.xsl"?>
+ <!-- You can find pdml2html.xsl in /usr/share/wireshark or at https://code.wireshark.org/review/gitweb?p=wireshark.git;a=blob_plain;f=pdml2html.xsl. -->
+ <pdml version="0" creator="wireshark/2.4.2" time="Tue Mar 27 21:55:25 2018" capture_file="./metron-platform/metron-api/src/test/resources/test-tcp-packet.pcap">
+ <packet>
+ <proto name="geninfo" pos="0" showname="General information" size="104">
+ <field name="num" pos="0" show="1" showname="Number" value="1" size="104"/>
+ <field name="len" pos="0" show="104" showname="Frame Length" value="68" size="104"/>
+ <field name="caplen" pos="0" show="104" showname="Captured Length" value="68" size="104"/>
+ <field name="timestamp" pos="0" show="Mar 26, 2014 19:59:40.024362000 GMT" showname="Captured Time" value="1395863980.024362000" size="104"/>
+ </proto>
+ <proto name="frame" showname="Frame 1: 104 bytes on wire (832 bits), 104 bytes captured (832 bits)" size="104" pos="0">
+ <field name="frame.encap_type" showname="Encapsulation type: Ethernet (1)" size="0" pos="0" show="1"/>
+ <field name="frame.time" showname="Arrival Time: Mar 26, 2014 19:59:40.024362000 GMT" size="0" pos="0" show="Mar 26, 2014 19:59:40.024362000 GMT"/>
+ <field name="frame.offset_shift" showname="Time shift for this packet: 0.000000000 seconds" size="0" pos="0" show="0.000000000"/>
+ <field name="frame.time_epoch" showname="Epoch Time: 1395863980.024362000 seconds" size="0" pos="0" show="1395863980.024362000"/>
+ <field name="frame.time_delta" showname="Time delta from previous captured frame: 0.000000000 seconds" size="0" pos="0" show="0.000000000"/>
+ <field name="frame.time_delta_displayed" showname="Time delta from previous displayed frame: 0.000000000 seconds" size="0" pos="0" show="0.000000000"/>
+ <field name="frame.time_relative" showname="Time since reference or first frame: 0.000000000 seconds" size="0" pos="0" show="0.000000000"/>
+ <field name="frame.number" showname="Frame Number: 1" size="0" pos="0" show="1"/>
+ <field name="frame.len" showname="Frame Length: 104 bytes (832 bits)" size="0" pos="0" show="104"/>
+ <field name="frame.cap_len" showname="Capture Length: 104 bytes (832 bits)" size="0" pos="0" show="104"/>
+ <field name="frame.marked" showname="Frame is marked: False" size="0" pos="0" show="0"/>
+ <field name="frame.ignored" showname="Frame is ignored: False" size="0" pos="0" show="0"/>
+ <field name="frame.protocols" showname="Protocols in frame: eth:ethertype:ip:tcp:smtp" size="0" pos="0" show="eth:ethertype:ip:tcp:smtp"/>
+ </proto>
+ <proto name="eth" showname="Ethernet II, Src: MS-NLB-PhysServer-26_c5:01:00:02 (02:1a:c5:01:00:02), Dst: MS-NLB-PhysServer-26_c5:05:00:02 (02:1a:c5:05:00:02)" size="14" pos="0">
+ <field name="eth.dst" showname="Destination: MS-NLB-PhysServer-26_c5:05:00:02 (02:1a:c5:05:00:02)" size="6" pos="0" show="02:1a:c5:05:00:02" value="021ac5050002">
+ <field name="eth.dst_resolved" showname="Destination (resolved): MS-NLB-PhysServer-26_c5:05:00:02" hide="yes" size="6" pos="0" show="MS-NLB-PhysServer-26_c5:05:00:02" value="021ac5050002"/>
+ <field name="eth.addr" showname="Address: MS-NLB-PhysServer-26_c5:05:00:02 (02:1a:c5:05:00:02)" size="6" pos="0" show="02:1a:c5:05:00:02" value="021ac5050002"/>
+ <field name="eth.addr_resolved" showname="Address (resolved): MS-NLB-PhysServer-26_c5:05:00:02" hide="yes" size="6" pos="0" show="MS-NLB-PhysServer-26_c5:05:00:02" value="021ac5050002"/>
+ <field name="eth.lg" showname=".... ..1. .... .... .... .... = LG bit: Locally administered address (this is NOT the factory default)" size="3" pos="0" show="1" value="1" unmaskedvalue="021ac5"/>
+ <field name="eth.ig" showname=".... ...0 .... .... .... .... = IG bit: Individual address (unicast)" size="3" pos="0" show="0" value="0" unmaskedvalue="021ac5"/>
+ </field>
+ <field name="eth.src" showname="Source: MS-NLB-PhysServer-26_c5:01:00:02 (02:1a:c5:01:00:02)" size="6" pos="6" show="02:1a:c5:01:00:02" value="021ac5010002">
+ <field name="eth.src_resolved" showname="Source (resolved): MS-NLB-PhysServer-26_c5:01:00:02" hide="yes" size="6" pos="6" show="MS-NLB-PhysServer-26_c5:01:00:02" value="021ac5010002"/>
+ <field name="eth.addr" showname="Address: MS-NLB-PhysServer-26_c5:01:00:02 (02:1a:c5:01:00:02)" size="6" pos="6" show="02:1a:c5:01:00:02" value="021ac5010002"/>
+ <field name="eth.addr_resolved" showname="Address (resolved): MS-NLB-PhysServer-26_c5:01:00:02" hide="yes" size="6" pos="6" show="MS-NLB-PhysServer-26_c5:01:00:02" value="021ac5010002"/>
+ <field name="eth.lg" showname=".... ..1. .... .... .... .... = LG bit: Locally administered address (this is NOT the factory default)" size="3" pos="6" show="1" value="1" unmaskedvalue="021ac5"/>
+ <field name="eth.ig" showname=".... ...0 .... .... .... .... = IG bit: Individual address (unicast)" size="3" pos="6" show="0" value="0" unmaskedvalue="021ac5"/>
+ </field>
+ <field name="eth.type" showname="Type: IPv4 (0x0800)" size="2" pos="12" show="0x00000800" value="0800"/>
+ <field name="eth.fcs" showname="Frame check sequence: 0x26469e92 [correct]" size="4" pos="100" show="0x26469e92" value="26469e92"/>
+ <field name="eth.fcs.status" showname="FCS Status: Good" size="0" pos="100" show="1"/>
+ </proto>
+ <proto name="ip" showname="Internet Protocol Version 4, Src: 24.0.0.2, Dst: 24.128.0.2" size="20" pos="14">
+ <field name="ip.version" showname="0100 .... = Version: 4" size="1" pos="14" show="4" value="4" unmaskedvalue="45"/>
+ <field name="ip.hdr_len" showname=".... 0101 = Header Length: 20 bytes (5)" size="1" pos="14" show="20" value="45"/>
+ <field name="ip.dsfield" showname="Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT)" size="1" pos="15" show="0x00000000" value="00">
+ <field name="ip.dsfield.dscp" showname="0000 00.. = Differentiated Services Codepoint: Default (0)" size="1" pos="15" show="0" value="0" unmaskedvalue="00"/>
+ <field name="ip.dsfield.ecn" showname=".... ..00 = Explicit Congestion Notification: Not ECN-Capable Transport (0)" size="1" pos="15" show="0" value="0" unmaskedvalue="00"/>
+ </field>
+ <field name="ip.len" showname="Total Length: 86" size="2" pos="16" show="86" value="0056"/>
+ <field name="ip.id" showname="Identification: 0xcff6 (53238)" size="2" pos="18" show="0x0000cff6" value="cff6"/>
+ <field name="ip.flags" showname="Flags: 0x02 (Don't Fragment)" size="1" pos="20" show="0x00000002" value="40">
+ <field name="ip.flags.rb" showname="0... .... = Reserved bit: Not set" size="1" pos="20" show="0" value="40"/>
+ <field name="ip.flags.df" showname=".1.. .... = Don't fragment: Set" size="1" pos="20" show="1" value="40"/>
+ <field name="ip.flags.mf" showname="..0. .... = More fragments: Not set" size="1" pos="20" show="0" value="40"/>
+ </field>
+ <field name="ip.frag_offset" showname="Fragment offset: 0" size="2" pos="20" show="0" value="4000"/>
+ <field name="ip.ttl" showname="Time to live: 32" size="1" pos="22" show="32" value="20"/>
+ <field name="ip.proto" showname="Protocol: TCP (6)" size="1" pos="23" show="6" value="06"/>
+ <field name="ip.checksum" showname="Header checksum: 0x5a28 [validation disabled]" size="2" pos="24" show="0x00005a28" value="5a28"/>
+ <field name="ip.checksum.status" showname="Header checksum status: Unverified" size="0" pos="24" show="2"/>
+ <field name="ip.src" showname="Source: 24.0.0.2" size="4" pos="26" show="24.0.0.2" value="18000002"/>
+ <field name="ip.addr" showname="Source or Destination Address: 24.0.0.2" hide="yes" size="4" pos="26" show="24.0.0.2" value="18000002"/>
+ <field name="ip.src_host" showname="Source Host: 24.0.0.2" hide="yes" size="4" pos="26" show="24.0.0.2" value="18000002"/>
+ <field name="ip.host" showname="Source or Destination Host: 24.0.0.2" hide="yes" size="4" pos="26" show="24.0.0.2" value="18000002"/>
+ <field name="ip.dst" showname="Destination: 24.128.0.2" size="4" pos="30" show="24.128.0.2" value="18800002"/>
+ <field name="ip.addr" showname="Source or Destination Address: 24.128.0.2" hide="yes" size="4" pos="30" show="24.128.0.2" value="18800002"/>
+ <field name="ip.dst_host" showname="Destination Host: 24.128.0.2" hide="yes" size="4" pos="30" show="24.128.0.2" value="18800002"/>
+ <field name="ip.host" showname="Source or Destination Host: 24.128.0.2" hide="yes" size="4" pos="30" show="24.128.0.2" value="18800002"/>
+ <field name="" show="Source GeoIP: United States, Woodbridge, NJ, AS7922 Comcast Cable Communications, LLC, United States, Woodbridge, NJ, AS7922 Comcast Cable Communications, LLC, 40.557598, -74.284599" size="4" pos="26" value="18000002">
+ <field name="ip.geoip.src_country" showname="Source GeoIP Country: United States" size="4" pos="26" show="United States" value="18000002"/>
+ <field name="ip.geoip.country" showname="Source or Destination GeoIP Country: United States" hide="yes" size="4" pos="26" show="United States" value="18000002"/>
+ <field name="ip.geoip.src_city" showname="Source GeoIP City: Woodbridge, NJ" size="4" pos="26" show="Woodbridge, NJ" value="18000002"/>
+ <field name="ip.geoip.city" showname="Source or Destination GeoIP City: Woodbridge, NJ" hide="yes" size="4" pos="26" show="Woodbridge, NJ" value="18000002"/>
+ <field name="ip.geoip.src_asnum" showname="Source GeoIP AS Number: AS7922 Comcast Cable Communications, LLC" size="4" pos="26" show="AS7922 Comcast Cable Communications, LLC" value="18000002"/>
+ <field name="ip.geoip.asnum" showname="Source or Destination GeoIP AS Number: AS7922 Comcast Cable Communications, LLC" hide="yes" size="4" pos="26" show="AS7922 Comcast Cable Communications, LLC" value="18000002"/>
+ <field name="ip.geoip.src_country" showname="Source GeoIP Country: United States" size="4" pos="26" show="United States" value="18000002"/>
+ <field name="ip.geoip.country" showname="Source or Destination GeoIP Country: United States" hide="yes" size="4" pos="26" show="United States" value="18000002"/>
+ <field name="ip.geoip.src_city" showname="Source GeoIP City: Woodbridge, NJ" size="4" pos="26" show="Woodbridge, NJ" value="18000002"/>
+ <field name="ip.geoip.city" showname="Source or Destination GeoIP City: Woodbridge, NJ" hide="yes" size="4" pos="26" show="Woodbridge, NJ" value="18000002"/>
+ <field name="ip.geoip.src_asnum" showname="Source GeoIP AS Number: AS7922 Comcast Cable Communications, LLC" size="4" pos="26" show="AS7922 Comcast Cable Communications, LLC" value="18000002"/>
+ <field name="ip.geoip.asnum" showname="Source or Destination GeoIP AS Number: AS7922 Comcast Cable Communications, LLC" hide="yes" size="4" pos="26" show="AS7922 Comcast Cable Communications, LLC" value="18000002"/>
+ <field name="ip.geoip.src_lat" showname="Source GeoIP Latitude: 40.557598" size="4" pos="26" show="40.557598" value="18000002"/>
+ <field name="ip.geoip.lat" showname="Source or Destination GeoIP Latitude: 40.557598" hide="yes" size="4" pos="26" show="40.557598" value="18000002"/>
+ <field name="ip.geoip.src_lon" showname="Source GeoIP Longitude: -74.284599" size="4" pos="26" show="-74.284599" value="18000002"/>
+ <field name="ip.geoip.lon" showname="Source or Destination GeoIP Longitude: -74.284599" hide="yes" size="4" pos="26" show="-74.284599" value="18000002"/>
+ </field>
+ <field name="" show="Destination GeoIP: United States, Groton, CT, AS7922 Comcast Cable Communications, LLC, United States, Groton, CT, AS7922 Comcast Cable Communications, LLC, 41.353199, -72.038597" size="4" pos="30" value="18800002">
+ <field name="ip.geoip.dst_country" showname="Destination GeoIP Country: United States" size="4" pos="30" show="United States" value="18800002"/>
+ <field name="ip.geoip.country" showname="Source or Destination GeoIP Country: United States" hide="yes" size="4" pos="30" show="United States" value="18800002"/>
+ <field name="ip.geoip.dst_city" showname="Destination GeoIP City: Groton, CT" size="4" pos="30" show="Groton, CT" value="18800002"/>
+ <field name="ip.geoip.city" showname="Source or Destination GeoIP City: Groton, CT" hide="yes" size="4" pos="30" show="Groton, CT" value="18800002"/>
+ <field name="ip.geoip.dst_asnum" showname="Destination GeoIP AS Number: AS7922 Comcast Cable Communications, LLC" size="4" pos="30" show="AS7922 Comcast Cable Communications, LLC" value="18800002"/>
+ <field name="ip.geoip.asnum" showname="Source or Destination GeoIP AS Number: AS7922 Comcast Cable Communications, LLC" hide="yes" size="4" pos="30" show="AS7922 Comcast Cable Communications, LLC" value="18800002"/>
+ <field name="ip.geoip.dst_country" showname="Destination GeoIP Country: United States" size="4" pos="30" show="United States" value="18800002"/>
+ <field name="ip.geoip.country" showname="Source or Destination GeoIP Country: United States" hide="yes" size="4" pos="30" show="United States" value="18800002"/>
+ <field name="ip.geoip.dst_city" showname="Destination GeoIP City: Groton, CT" size="4" pos="30" show="Groton, CT" value="18800002"/>
+ <field name="ip.geoip.city" showname="Source or Destination GeoIP City: Groton, CT" hide="yes" size="4" pos="30" show="Groton, CT" value="18800002"/>
+ <field name="ip.geoip.dst_asnum" showname="Destination GeoIP AS Number: AS7922 Comcast Cable Communications, LLC" size="4" pos="30" show="AS7922 Comcast Cable Communications, LLC" value="18800002"/>
+ <field name="ip.geoip.asnum" showname="Source or Destination GeoIP AS Number: AS7922 Comcast Cable Communications, LLC" hide="yes" size="4" pos="30" show="AS7922 Comcast Cable Communications, LLC" value="18800002"/>
+ <field name="ip.geoip.dst_lat" showname="Destination GeoIP Latitude: 41.353199" size="4" pos="30" show="41.353199" value="18800002"/>
+ <field name="ip.geoip.lat" showname="Source or Destination GeoIP Latitude: 41.353199" hide="yes" size="4" pos="30" show="41.353199" value="18800002"/>
+ <field name="ip.geoip.dst_lon" showname="Destination GeoIP Longitude: -72.038597" size="4" pos="30" show="-72.038597" value="18800002"/>
+ <field name="ip.geoip.lon" showname="Source or Destination GeoIP Longitude: -72.038597" hide="yes" size="4" pos="30" show="-72.038597" value="18800002"/>
+ </field>
+ </proto>
+ <proto name="tcp" showname="Transmission Control Protocol, Src Port: 2137, Dst Port: 25, Seq: 1, Ack: 1, Len: 34" size="32" pos="34">
+ <field name="tcp.srcport" showname="Source Port: 2137" size="2" pos="34" show="2137" value="0859"/>
+ <field name="tcp.dstport" showname="Destination Port: 25" size="2" pos="36" show="25" value="0019"/>
+ <field name="tcp.port" showname="Source or Destination Port: 2137" hide="yes" size="2" pos="34" show="2137" value="0859"/>
+ <field name="tcp.port" showname="Source or Destination Port: 25" hide="yes" size="2" pos="36" show="25" value="0019"/>
+ <field name="tcp.stream" showname="Stream index: 0" size="0" pos="34" show="0"/>
+ <field name="tcp.len" showname="TCP Segment Len: 34" size="1" pos="46" show="34" value="80"/>
+ <field name="tcp.seq" showname="Sequence number: 1 (relative sequence number)" size="4" pos="38" show="1" value="f88900ce"/>
+ <field name="tcp.nxtseq" showname="Next sequence number: 35 (relative sequence number)" size="0" pos="34" show="35"/>
+ <field name="tcp.ack" showname="Acknowledgment number: 1 (relative ack number)" size="4" pos="42" show="1" value="365aa74f"/>
+ <field name="tcp.hdr_len" showname="1000 .... = Header Length: 32 bytes (8)" size="1" pos="46" show="32" value="80"/>
+ <field name="tcp.flags" showname="Flags: 0x018 (PSH, ACK)" size="2" pos="46" show="0x00000018" value="18" unmaskedvalue="8018">
+ <field name="tcp.flags.res" showname="000. .... .... = Reserved: Not set" size="1" pos="46" show="0" value="0" unmaskedvalue="80"/>
+ <field name="tcp.flags.ns" showname="...0 .... .... = Nonce: Not set" size="1" pos="46" show="0" value="0" unmaskedvalue="80"/>
+ <field name="tcp.flags.cwr" showname=".... 0... .... = Congestion Window Reduced (CWR): Not set" size="1" pos="47" show="0" value="0" unmaskedvalue="18"/>
+ <field name="tcp.flags.ecn" showname=".... .0.. .... = ECN-Echo: Not set" size="1" pos="47" show="0" value="0" unmaskedvalue="18"/>
+ <field name="tcp.flags.urg" showname=".... ..0. .... = Urgent: Not set" size="1" pos="47" show="0" value="0" unmaskedvalue="18"/>
+ <field name="tcp.flags.ack" showname=".... ...1 .... = Acknowledgment: Set" size="1" pos="47" show="1" value="1" unmaskedvalue="18"/>
+ <field name="tcp.flags.push" showname=".... .... 1... = Push: Set" size="1" pos="47" show="1" value="1" unmaskedvalue="18"/>
+ <field name="tcp.flags.reset" showname=".... .... .0.. = Reset: Not set" size="1" pos="47" show="0" value="0" unmaskedvalue="18"/>
+ <field name="tcp.flags.syn" showname=".... .... ..0. = Syn: Not set" size="1" pos="47" show="0" value="0" unmaskedvalue="18"/>
+ <field name="tcp.flags.fin" showname=".... .... ...0 = Fin: Not set" size="1" pos="47" show="0" value="0" unmaskedvalue="18"/>
+ <field name="tcp.flags.str" showname="TCP Flags: \\xc2\\xb7\\xc2\\xb7\\xc2\\xb7\\xc2\\xb7\\xc2\\xb7\\xc2\\xb7\\xc2\\xb7AP\\xc2\\xb7\\xc2\\xb7\\xc2\\xb7" size="2" pos="46" show="\\xc2\\xb7\\xc2\\xb7\\xc2\\xb7\\xc2\\xb7\\xc2\\xb7\\xc2\\xb7\\xc2\\xb7AP\\xc2\\xb7\\xc2\\xb7\\xc2\\xb7" value="8018"/>
+ </field>
+ <field name="tcp.window_size_value" showname="Window size value: 7240" size="2" pos="48" show="7240" value="1c48"/>
+ <field name="tcp.window_size" showname="Calculated window size: 7240" size="2" pos="48" show="7240" value="1c48"/>
+ <field name="tcp.window_size_scalefactor" showname="Window size scaling factor: -1 (unknown)" size="2" pos="48" show="-1" value="1c48"/>
+ <field name="tcp.checksum" showname="Checksum: 0x681f [unverified]" size="2" pos="50" show="0x0000681f" value="681f"/>
+ <field name="tcp.checksum.status" showname="Checksum Status: Unverified" size="0" pos="50" show="2"/>
+ <field name="tcp.urgent_pointer" showname="Urgent pointer: 0" size="2" pos="52" show="0" value="0000"/>
+ <field name="tcp.options" showname="Options: (12 bytes), No-Operation (NOP), No-Operation (NOP), Timestamps" size="12" pos="54" show="01:01:08:0a:eb:83:4b:08:e8:8c:de:cb" value="0101080aeb834b08e88cdecb">
+ <field name="tcp.options.nop" showname="TCP Option - No-Operation (NOP)" size="1" pos="54" show="01" value="01">
+ <field name="tcp.option_kind" showname="Kind: No-Operation (1)" size="1" pos="54" show="1" value="01"/>
+ </field>
+ <field name="tcp.options.nop" showname="TCP Option - No-Operation (NOP)" size="1" pos="55" show="01" value="01">
+ <field name="tcp.option_kind" showname="Kind: No-Operation (1)" size="1" pos="55" show="1" value="01"/>
+ </field>
+ <field name="tcp.options.timestamp" showname="TCP Option - Timestamps: TSval 3951250184, TSecr 3901546187" size="10" pos="56" show="08:0a:eb:83:4b:08:e8:8c:de:cb" value="080aeb834b08e88cdecb">
+ <field name="tcp.option_kind" showname="Kind: Time Stamp Option (8)" size="1" pos="56" show="8" value="08"/>
+ <field name="tcp.option_len" showname="Length: 10" size="1" pos="57" show="10" value="0a"/>
+ <field name="tcp.options.timestamp.tsval" showname="Timestamp value: 3951250184" size="4" pos="58" show="3951250184" value="eb834b08"/>
+ <field name="tcp.options.timestamp.tsecr" showname="Timestamp echo reply: 3901546187" size="4" pos="62" show="3901546187" value="e88cdecb"/>
+ </field>
+ </field>
+ <field name="tcp.analysis" showname="SEQ/ACK analysis" size="0" pos="34" show="" value="">
+ <field name="tcp.analysis.bytes_in_flight" showname="Bytes in flight: 34" size="0" pos="34" show="34"/>
+ <field name="tcp.analysis.push_bytes_sent" showname="Bytes sent since last PSH flag: 34" size="0" pos="34" show="34"/>
+ </field>
+ <field name="tcp.payload" showname="TCP payload (34 bytes)" size="34" pos="66" show="45:48:4c:4f:20:63:6c:69:65:6e:74:2d:31:38:30:30:30:30:30:33:2e:65:78:61:6d:70:6c:65:2e:69:6e:74:0d:0a" value="45484c4f20636c69656e742d31383030303030332e6578616d706c652e696e740d0a"/>
+ </proto>
+ <proto name="smtp" showname="Simple Mail Transfer Protocol" size="34" pos="66">
+ <field name="smtp.req" showname="Request: True" hide="yes" size="0" pos="66" show="1"/>
+ <field name="smtp.command_line" showname="Command Line: EHLO client-18000003.example.int\\r\\n" size="34" pos="66" show="EHLO client-18000003.example.int\\xd\\xa" value="45484c4f20636c69656e742d31383030303030332e6578616d706c652e696e740d0a">
+ <field name="smtp.req.command" showname="Command: EHLO" size="4" pos="66" show="EHLO" value="45484c4f"/>
+ <field name="smtp.req.parameter" showname="Request parameter: client-18000003.example.int" size="27" pos="71" show="client-18000003.example.int" value="636c69656e742d31383030303030332e6578616d706c652e696e74"/>
+ </field>
+ </proto>
+ </packet>
+
+
+ </pdml>`
+}
http://git-wip-us.apache.org/repos/asf/metron/blob/d5eb56a9/metron-interface/metron-alerts/src/app/pcap/service/pcap.service.ts
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/src/app/pcap/service/pcap.service.ts b/metron-interface/metron-alerts/src/app/pcap/service/pcap.service.ts
new file mode 100644
index 0000000..5f6f33c
--- /dev/null
+++ b/metron-interface/metron-alerts/src/app/pcap/service/pcap.service.ts
@@ -0,0 +1,68 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import {Injectable, NgZone} from '@angular/core';
+import {Observable, Subject} from 'rxjs/Rx';
+import {Http, Headers, RequestOptions, Response} from '@angular/http';
+import {HttpUtil} from '../../utils/httpUtil';
+
+import 'rxjs/add/operator/map';
+
+import {PcapRequest} from '../model/pcap.request';
+import {Pdml} from '../model/pdml';
+
+export class PcapStatusResponse {
+ jobStatus: string;
+ percentComplete: number;
+ pageTotal: number;
+}
+
+@Injectable()
+export class PcapService {
+
+ private statusInterval = 4;
+ defaultHeaders = {'Content-Type': 'application/json', 'X-Requested-With': 'XMLHttpRequest'};
+
+ constructor(private http: Http, private ngZone: NgZone) {
+ }
+
+ public pollStatus(id: string): Observable<{}> {
+ return Observable.interval(this.statusInterval * 1000).switchMap(() => {
+ return this.getStatus(id);
+ });
+ }
+
+ public submitRequest(pcapRequest: PcapRequest): Observable<string> {
+ return this.http.post('/api/v1/pcap/fixed', pcapRequest, new RequestOptions({headers: new Headers(this.defaultHeaders)}))
+ .map(result => JSON.parse(result.text()).jobId)
+ .catch(HttpUtil.handleError)
+ .onErrorResumeNext();
+ }
+
+ public getStatus(id: string): Observable<PcapStatusResponse> {
+ return this.http.get(`/api/v1/pcap/${id}`,
+ new RequestOptions({headers: new Headers(this.defaultHeaders)}))
+ .map(HttpUtil.extractData)
+ .catch(HttpUtil.handleError);
+ }
+ public getPackets(id: string, pageId: number): Observable<Pdml> {
+ return this.http.get(`/api/v1/pcap/${id}/pdml?page=${pageId}`, new RequestOptions({headers: new Headers(this.defaultHeaders)}))
+ .map(HttpUtil.extractData)
+ .catch(HttpUtil.handleError)
+ .onErrorResumeNext();
+ }
+}
[2/5] metron git commit: METRON-1671 Create PCAP UI (tiborm via
merrimanr) closes apache/metron#1103
Posted by rm...@apache.org.
http://git-wip-us.apache.org/repos/asf/metron/blob/d5eb56a9/metron-interface/metron-alerts/src/app/pcap/pcap-packet/pcap-packet.component.spec.ts
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/src/app/pcap/pcap-packet/pcap-packet.component.spec.ts b/metron-interface/metron-alerts/src/app/pcap/pcap-packet/pcap-packet.component.spec.ts
new file mode 100644
index 0000000..155e1f8
--- /dev/null
+++ b/metron-interface/metron-alerts/src/app/pcap/pcap-packet/pcap-packet.component.spec.ts
@@ -0,0 +1,1283 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { PcapPacketComponent } from './pcap-packet.component';
+import { PdmlPacket } from '../model/pdml';
+
+describe('PcapPacketComponent', () => {
+ let component: PcapPacketComponent;
+ let fixture: ComponentFixture<PcapPacketComponent>;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [ PcapPacketComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(PcapPacketComponent);
+ component = fixture.componentInstance;
+ component.packet = fakePacket as PdmlPacket;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
+
+const fakePacket = {
+ name: "something",
+ expanded: false,
+ protos: [
+ {
+ "name": "geninfo",
+ "pos": "0",
+ "showname": "General information",
+ "size": "722",
+ "hide": null,
+ "fields": [
+ {
+ "name": "num",
+ "pos": "0",
+ "showname": "Number",
+ "size": "722",
+ "value": "1",
+ "show": "1",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "len",
+ "pos": "0",
+ "showname": "Frame Length",
+ "size": "722",
+ "value": "2d2",
+ "show": "722",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "caplen",
+ "pos": "0",
+ "showname": "Captured Length",
+ "size": "722",
+ "value": "2d2",
+ "show": "722",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "timestamp",
+ "pos": "0",
+ "showname": "Captured Time",
+ "size": "722",
+ "value": "1458240269.373968000",
+ "show": "Mar 17, 2016 18:44:29.373968000 UTC",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ }
+ ]
+ },
+ {
+ "name": "frame",
+ "pos": "0",
+ "showname": "Frame 1: 722 bytes on wire (5776 bits), 722 bytes captured (5776 bits)",
+ "size": "722",
+ "hide": null,
+ "fields": [
+ {
+ "name": "frame.dlt",
+ "pos": "0",
+ "showname": "WTAP_ENCAP: 1",
+ "size": "0",
+ "value": null,
+ "show": "1",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "frame.time",
+ "pos": "0",
+ "showname": "Arrival Time: Mar 17, 2016 18:44:29.373968000 UTC",
+ "size": "0",
+ "value": null,
+ "show": "Mar 17, 2016 18:44:29.373968000",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "frame.offset_shift",
+ "pos": "0",
+ "showname": "Time shift for this packet: 0.000000000 seconds",
+ "size": "0",
+ "value": null,
+ "show": "0.000000000",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "frame.time_epoch",
+ "pos": "0",
+ "showname": "Epoch Time: 1458240269.373968000 seconds",
+ "size": "0",
+ "value": null,
+ "show": "1458240269.373968000",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "frame.time_delta",
+ "pos": "0",
+ "showname": "Time delta from previous captured frame: 0.000000000 seconds",
+ "size": "0",
+ "value": null,
+ "show": "0.000000000",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "frame.time_delta_displayed",
+ "pos": "0",
+ "showname": "Time delta from previous displayed frame: 0.000000000 seconds",
+ "size": "0",
+ "value": null,
+ "show": "0.000000000",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "frame.time_relative",
+ "pos": "0",
+ "showname": "Time since reference or first frame: 0.000000000 seconds",
+ "size": "0",
+ "value": null,
+ "show": "0.000000000",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "frame.number",
+ "pos": "0",
+ "showname": "Frame Number: 1",
+ "size": "0",
+ "value": null,
+ "show": "1",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "frame.len",
+ "pos": "0",
+ "showname": "Frame Length: 722 bytes (5776 bits)",
+ "size": "0",
+ "value": null,
+ "show": "722",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "frame.cap_len",
+ "pos": "0",
+ "showname": "Capture Length: 722 bytes (5776 bits)",
+ "size": "0",
+ "value": null,
+ "show": "722",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "frame.marked",
+ "pos": "0",
+ "showname": "Frame is marked: False",
+ "size": "0",
+ "value": null,
+ "show": "0",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "frame.ignored",
+ "pos": "0",
+ "showname": "Frame is ignored: False",
+ "size": "0",
+ "value": null,
+ "show": "0",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "frame.protocols",
+ "pos": "0",
+ "showname": "Protocols in frame: eth:ip:tcp:ssh",
+ "size": "0",
+ "value": null,
+ "show": "eth:ip:tcp:ssh",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ }
+ ]
+ },
+ {
+ "name": "eth",
+ "pos": "0",
+ "showname": "Ethernet II, Src: CadmusCo_96:a4:7a (08:00:27:96:a4:7a), Dst: 0a:00:27:00:00:00 (0a:00:27:00:00:00)",
+ "size": "14",
+ "hide": null,
+ "fields": [
+ {
+ "name": "eth.dst",
+ "pos": "0",
+ "showname": "Destination: 0a:00:27:00:00:00 (0a:00:27:00:00:00)",
+ "size": "6",
+ "value": "0a0027000000",
+ "show": "0a:00:27:00:00:00",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": [
+ {
+ "name": "eth.addr",
+ "pos": "0",
+ "showname": "Address: 0a:00:27:00:00:00 (0a:00:27:00:00:00)",
+ "size": "6",
+ "value": "0a0027000000",
+ "show": "0a:00:27:00:00:00",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "eth.lg",
+ "pos": "0",
+ "showname": ".... ..1. .... .... .... .... = LG bit: Locally administered address (this is NOT the factory default)",
+ "size": "3",
+ "value": "1",
+ "show": "1",
+ "unmaskedvalue": "0a0027",
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "eth.ig",
+ "pos": "0",
+ "showname": ".... ...0 .... .... .... .... = IG bit: Individual address (unicast)",
+ "size": "3",
+ "value": "0",
+ "show": "0",
+ "unmaskedvalue": "0a0027",
+ "hide": null,
+ "fields": null,
+ "protos": null
+ }
+ ],
+ "protos": null
+ },
+ {
+ "name": "eth.src",
+ "pos": "6",
+ "showname": "Source: CadmusCo_96:a4:7a (08:00:27:96:a4:7a)",
+ "size": "6",
+ "value": "08002796a47a",
+ "show": "08:00:27:96:a4:7a",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": [
+ {
+ "name": "eth.addr",
+ "pos": "6",
+ "showname": "Address: CadmusCo_96:a4:7a (08:00:27:96:a4:7a)",
+ "size": "6",
+ "value": "08002796a47a",
+ "show": "08:00:27:96:a4:7a",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "eth.lg",
+ "pos": "6",
+ "showname": ".... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)",
+ "size": "3",
+ "value": "0",
+ "show": "0",
+ "unmaskedvalue": "080027",
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "eth.ig",
+ "pos": "6",
+ "showname": ".... ...0 .... .... .... .... = IG bit: Individual address (unicast)",
+ "size": "3",
+ "value": "0",
+ "show": "0",
+ "unmaskedvalue": "080027",
+ "hide": null,
+ "fields": null,
+ "protos": null
+ }
+ ],
+ "protos": null
+ },
+ {
+ "name": "eth.type",
+ "pos": "12",
+ "showname": "Type: IP (0x0800)",
+ "size": "2",
+ "value": "0800",
+ "show": "0x0800",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ }
+ ]
+ },
+ {
+ "name": "ip",
+ "pos": "14",
+ "showname": "Internet Protocol Version 4, Src: 192.168.66.121 (192.168.66.121), Dst: 192.168.66.1 (192.168.66.1)",
+ "size": "20",
+ "hide": null,
+ "fields": [
+ {
+ "name": "ip.version",
+ "pos": "14",
+ "showname": "Version: 4",
+ "size": "1",
+ "value": "45",
+ "show": "4",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "ip.hdr_len",
+ "pos": "14",
+ "showname": "Header length: 20 bytes",
+ "size": "1",
+ "value": "45",
+ "show": "20",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "ip.dsfield",
+ "pos": "15",
+ "showname": "Differentiated Services Field: 0x10 (DSCP 0x04: Unknown DSCP; ECN: 0x00: Not-ECT (Not ECN-Capable Transport))",
+ "size": "1",
+ "value": "10",
+ "show": "16",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": [
+ {
+ "name": "ip.dsfield.dscp",
+ "pos": "15",
+ "showname": "0001 00.. = Differentiated Services Codepoint: Unknown (0x04)",
+ "size": "1",
+ "value": "4",
+ "show": "0x04",
+ "unmaskedvalue": "10",
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "ip.dsfield.ecn",
+ "pos": "15",
+ "showname": ".... ..00 = Explicit Congestion Notification: Not-ECT (Not ECN-Capable Transport) (0x00)",
+ "size": "1",
+ "value": "0",
+ "show": "0x00",
+ "unmaskedvalue": "10",
+ "hide": null,
+ "fields": null,
+ "protos": null
+ }
+ ],
+ "protos": null
+ },
+ {
+ "name": "ip.len",
+ "pos": "16",
+ "showname": "Total Length: 708",
+ "size": "2",
+ "value": "02c4",
+ "show": "708",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "ip.id",
+ "pos": "18",
+ "showname": "Identification: 0x7cd9 (31961)",
+ "size": "2",
+ "value": "7cd9",
+ "show": "0x7cd9",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "ip.flags",
+ "pos": "20",
+ "showname": "Flags: 0x02 (Don't Fragment)",
+ "size": "1",
+ "value": "40",
+ "show": "0x02",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": [
+ {
+ "name": "ip.flags.rb",
+ "pos": "20",
+ "showname": "0... .... = Reserved bit: Not set",
+ "size": "1",
+ "value": "40",
+ "show": "0",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "ip.flags.df",
+ "pos": "20",
+ "showname": ".1.. .... = Don't fragment: Set",
+ "size": "1",
+ "value": "40",
+ "show": "1",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "ip.flags.mf",
+ "pos": "20",
+ "showname": "..0. .... = More fragments: Not set",
+ "size": "1",
+ "value": "40",
+ "show": "0",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ }
+ ],
+ "protos": null
+ },
+ {
+ "name": "ip.frag_offset",
+ "pos": "20",
+ "showname": "Fragment offset: 0",
+ "size": "2",
+ "value": "4000",
+ "show": "0",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "ip.ttl",
+ "pos": "22",
+ "showname": "Time to live: 64",
+ "size": "1",
+ "value": "40",
+ "show": "64",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "ip.proto",
+ "pos": "23",
+ "showname": "Protocol: TCP (6)",
+ "size": "1",
+ "value": "06",
+ "show": "6",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "ip.checksum",
+ "pos": "24",
+ "showname": "Header checksum: 0xb57f [correct]",
+ "size": "2",
+ "value": "b57f",
+ "show": "0xb57f",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": [
+ {
+ "name": "ip.checksum_good",
+ "pos": "24",
+ "showname": "Good: True",
+ "size": "2",
+ "value": "b57f",
+ "show": "1",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "ip.checksum_bad",
+ "pos": "24",
+ "showname": "Bad: False",
+ "size": "2",
+ "value": "b57f",
+ "show": "0",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ }
+ ],
+ "protos": null
+ },
+ {
+ "name": "ip.src",
+ "pos": "26",
+ "showname": "Source: 192.168.66.121 (192.168.66.121)",
+ "size": "4",
+ "value": "c0a84279",
+ "show": "192.168.66.121",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "ip.addr",
+ "pos": "26",
+ "showname": "Source or Destination Address: 192.168.66.121 (192.168.66.121)",
+ "size": "4",
+ "value": "c0a84279",
+ "show": "192.168.66.121",
+ "unmaskedvalue": null,
+ "hide": "yes",
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "ip.src_host",
+ "pos": "26",
+ "showname": "Source Host: 192.168.66.121",
+ "size": "4",
+ "value": "c0a84279",
+ "show": "192.168.66.121",
+ "unmaskedvalue": null,
+ "hide": "yes",
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "ip.host",
+ "pos": "26",
+ "showname": "Source or Destination Host: 192.168.66.121",
+ "size": "4",
+ "value": "c0a84279",
+ "show": "192.168.66.121",
+ "unmaskedvalue": null,
+ "hide": "yes",
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "ip.dst",
+ "pos": "30",
+ "showname": "Destination: 192.168.66.1 (192.168.66.1)",
+ "size": "4",
+ "value": "c0a84201",
+ "show": "192.168.66.1",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "ip.addr",
+ "pos": "30",
+ "showname": "Source or Destination Address: 192.168.66.1 (192.168.66.1)",
+ "size": "4",
+ "value": "c0a84201",
+ "show": "192.168.66.1",
+ "unmaskedvalue": null,
+ "hide": "yes",
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "ip.dst_host",
+ "pos": "30",
+ "showname": "Destination Host: 192.168.66.1",
+ "size": "4",
+ "value": "c0a84201",
+ "show": "192.168.66.1",
+ "unmaskedvalue": null,
+ "hide": "yes",
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "ip.host",
+ "pos": "30",
+ "showname": "Source or Destination Host: 192.168.66.1",
+ "size": "4",
+ "value": "c0a84201",
+ "show": "192.168.66.1",
+ "unmaskedvalue": null,
+ "hide": "yes",
+ "fields": null,
+ "protos": null
+ }
+ ]
+ },
+ {
+ "name": "tcp",
+ "pos": "34",
+ "showname": "Transmission Control Protocol, Src Port: ssh (22), Dst Port: 55791 (55791), Seq: 1, Ack: 1, Len: 656",
+ "size": "32",
+ "hide": null,
+ "fields": [
+ {
+ "name": "tcp.srcport",
+ "pos": "34",
+ "showname": "Source port: ssh (22)",
+ "size": "2",
+ "value": "0016",
+ "show": "22",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "tcp.dstport",
+ "pos": "36",
+ "showname": "Destination port: 55791 (55791)",
+ "size": "2",
+ "value": "d9ef",
+ "show": "55791",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "tcp.port",
+ "pos": "34",
+ "showname": "Source or Destination Port: 22",
+ "size": "2",
+ "value": "0016",
+ "show": "22",
+ "unmaskedvalue": null,
+ "hide": "yes",
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "tcp.port",
+ "pos": "36",
+ "showname": "Source or Destination Port: 55791",
+ "size": "2",
+ "value": "d9ef",
+ "show": "55791",
+ "unmaskedvalue": null,
+ "hide": "yes",
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "tcp.stream",
+ "pos": "34",
+ "showname": "Stream index: 0",
+ "size": "0",
+ "value": null,
+ "show": "0",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "tcp.len",
+ "pos": "46",
+ "showname": "TCP Segment Len: 656",
+ "size": "1",
+ "value": "80",
+ "show": "656",
+ "unmaskedvalue": null,
+ "hide": "yes",
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "tcp.seq",
+ "pos": "38",
+ "showname": "Sequence number: 1 (relative sequence number)",
+ "size": "4",
+ "value": "12903044",
+ "show": "1",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "tcp.nxtseq",
+ "pos": "34",
+ "showname": "Next sequence number: 657 (relative sequence number)",
+ "size": "0",
+ "value": null,
+ "show": "657",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "tcp.ack",
+ "pos": "42",
+ "showname": "Acknowledgment number: 1 (relative ack number)",
+ "size": "4",
+ "value": "8b92f3e7",
+ "show": "1",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "tcp.hdr_len",
+ "pos": "46",
+ "showname": "Header length: 32 bytes",
+ "size": "1",
+ "value": "80",
+ "show": "32",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "tcp.flags",
+ "pos": "46",
+ "showname": "Flags: 0x018 (PSH, ACK)",
+ "size": "2",
+ "value": "18",
+ "show": "0x0018",
+ "unmaskedvalue": "8018",
+ "hide": null,
+ "fields": [
+ {
+ "name": "tcp.flags.res",
+ "pos": "46",
+ "showname": "000. .... .... = Reserved: Not set",
+ "size": "1",
+ "value": "0",
+ "show": "0",
+ "unmaskedvalue": "80",
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "tcp.flags.ns",
+ "pos": "46",
+ "showname": "...0 .... .... = Nonce: Not set",
+ "size": "1",
+ "value": "0",
+ "show": "0",
+ "unmaskedvalue": "80",
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "tcp.flags.cwr",
+ "pos": "47",
+ "showname": ".... 0... .... = Congestion Window Reduced (CWR): Not set",
+ "size": "1",
+ "value": "0",
+ "show": "0",
+ "unmaskedvalue": "18",
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "tcp.flags.ecn",
+ "pos": "47",
+ "showname": ".... .0.. .... = ECN-Echo: Not set",
+ "size": "1",
+ "value": "0",
+ "show": "0",
+ "unmaskedvalue": "18",
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "tcp.flags.urg",
+ "pos": "47",
+ "showname": ".... ..0. .... = Urgent: Not set",
+ "size": "1",
+ "value": "0",
+ "show": "0",
+ "unmaskedvalue": "18",
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "tcp.flags.ack",
+ "pos": "47",
+ "showname": ".... ...1 .... = Acknowledgment: Set",
+ "size": "1",
+ "value": "1",
+ "show": "1",
+ "unmaskedvalue": "18",
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "tcp.flags.push",
+ "pos": "47",
+ "showname": ".... .... 1... = Push: Set",
+ "size": "1",
+ "value": "1",
+ "show": "1",
+ "unmaskedvalue": "18",
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "tcp.flags.reset",
+ "pos": "47",
+ "showname": ".... .... .0.. = Reset: Not set",
+ "size": "1",
+ "value": "0",
+ "show": "0",
+ "unmaskedvalue": "18",
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "tcp.flags.syn",
+ "pos": "47",
+ "showname": ".... .... ..0. = Syn: Not set",
+ "size": "1",
+ "value": "0",
+ "show": "0",
+ "unmaskedvalue": "18",
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "tcp.flags.fin",
+ "pos": "47",
+ "showname": ".... .... ...0 = Fin: Not set",
+ "size": "1",
+ "value": "0",
+ "show": "0",
+ "unmaskedvalue": "18",
+ "hide": null,
+ "fields": null,
+ "protos": null
+ }
+ ],
+ "protos": null
+ },
+ {
+ "name": "tcp.window_size_value",
+ "pos": "48",
+ "showname": "Window size value: 501",
+ "size": "2",
+ "value": "01f5",
+ "show": "501",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "tcp.window_size",
+ "pos": "48",
+ "showname": "Calculated window size: 501",
+ "size": "2",
+ "value": "01f5",
+ "show": "501",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "tcp.window_size_scalefactor",
+ "pos": "48",
+ "showname": "Window size scaling factor: -1 (unknown)",
+ "size": "2",
+ "value": "01f5",
+ "show": "-1",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "tcp.checksum",
+ "pos": "50",
+ "showname": "Checksum: 0x0882 [validation disabled]",
+ "size": "2",
+ "value": "0882",
+ "show": "0x0882",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": [
+ {
+ "name": "tcp.checksum_good",
+ "pos": "50",
+ "showname": "Good Checksum: False",
+ "size": "2",
+ "value": "0882",
+ "show": "0",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "tcp.checksum_bad",
+ "pos": "50",
+ "showname": "Bad Checksum: False",
+ "size": "2",
+ "value": "0882",
+ "show": "0",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ }
+ ],
+ "protos": null
+ },
+ {
+ "name": "tcp.options",
+ "pos": "54",
+ "showname": "Options: (12 bytes), No-Operation (NOP), No-Operation (NOP), Timestamps",
+ "size": "12",
+ "value": "0101080a0014f4f811bdb98f",
+ "show": "01:01:08:0a:00:14:f4:f8:11:bd:b9:8f",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": [
+ {
+ "name": "",
+ "pos": "54",
+ "showname": null,
+ "size": "1",
+ "value": "01",
+ "show": "No-Operation (NOP)",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": [
+ {
+ "name": "ip.opt.type",
+ "pos": "54",
+ "showname": "Type: 1",
+ "size": "1",
+ "value": "01",
+ "show": "1",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": [
+ {
+ "name": "ip.opt.type.copy",
+ "pos": "54",
+ "showname": "0... .... = Copy on fragmentation: No",
+ "size": "1",
+ "value": "0",
+ "show": "0",
+ "unmaskedvalue": "01",
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "ip.opt.type.class",
+ "pos": "54",
+ "showname": ".00. .... = Class: Control (0)",
+ "size": "1",
+ "value": "0",
+ "show": "0",
+ "unmaskedvalue": "01",
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "ip.opt.type.number",
+ "pos": "54",
+ "showname": "...0 0001 = Number: No-Operation (NOP) (1)",
+ "size": "1",
+ "value": "1",
+ "show": "1",
+ "unmaskedvalue": "01",
+ "hide": null,
+ "fields": null,
+ "protos": null
+ }
+ ],
+ "protos": null
+ }
+ ],
+ "protos": null
+ },
+ {
+ "name": "",
+ "pos": "55",
+ "showname": null,
+ "size": "1",
+ "value": "01",
+ "show": "No-Operation (NOP)",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": [
+ {
+ "name": "ip.opt.type",
+ "pos": "55",
+ "showname": "Type: 1",
+ "size": "1",
+ "value": "01",
+ "show": "1",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": [
+ {
+ "name": "ip.opt.type.copy",
+ "pos": "55",
+ "showname": "0... .... = Copy on fragmentation: No",
+ "size": "1",
+ "value": "0",
+ "show": "0",
+ "unmaskedvalue": "01",
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "ip.opt.type.class",
+ "pos": "55",
+ "showname": ".00. .... = Class: Control (0)",
+ "size": "1",
+ "value": "0",
+ "show": "0",
+ "unmaskedvalue": "01",
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "ip.opt.type.number",
+ "pos": "55",
+ "showname": "...0 0001 = Number: No-Operation (NOP) (1)",
+ "size": "1",
+ "value": "1",
+ "show": "1",
+ "unmaskedvalue": "01",
+ "hide": null,
+ "fields": null,
+ "protos": null
+ }
+ ],
+ "protos": null
+ }
+ ],
+ "protos": null
+ },
+ {
+ "name": "",
+ "pos": "56",
+ "showname": null,
+ "size": "10",
+ "value": "080a0014f4f811bdb98f",
+ "show": "Timestamps: TSval 1373432, TSecr 297646479",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": [
+ {
+ "name": "tcp.option_kind",
+ "pos": "56",
+ "showname": "Kind: Timestamp (8)",
+ "size": "1",
+ "value": "08",
+ "show": "8",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "tcp.option_len",
+ "pos": "57",
+ "showname": "Length: 10",
+ "size": "1",
+ "value": "0a",
+ "show": "10",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "tcp.options.timestamp.tsval",
+ "pos": "58",
+ "showname": "Timestamp value: 1373432",
+ "size": "4",
+ "value": "0014f4f8",
+ "show": "1373432",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "tcp.options.timestamp.tsecr",
+ "pos": "62",
+ "showname": "Timestamp echo reply: 297646479",
+ "size": "4",
+ "value": "11bdb98f",
+ "show": "297646479",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ }
+ ],
+ "protos": null
+ }
+ ],
+ "protos": null
+ },
+ {
+ "name": "tcp.analysis",
+ "pos": "34",
+ "showname": "SEQ/ACK analysis",
+ "size": "0",
+ "value": "",
+ "show": "",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": [
+ {
+ "name": "tcp.analysis.bytes_in_flight",
+ "pos": "34",
+ "showname": "Bytes in flight: 656",
+ "size": "0",
+ "value": null,
+ "show": "656",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ }
+ ],
+ "protos": null
+ }
+ ]
+ },
+ {
+ "name": "ssh",
+ "pos": "66",
+ "showname": "SSH Protocol",
+ "size": "656",
+ "hide": null,
+ "fields": [
+ {
+ "name": "ssh.encrypted_packet",
+ "pos": "66",
+ "showname": "Encrypted Packet: 5b2bfe1fa006867834412184af9f5b239737763adead7140...",
+ "size": "656",
+ "value": "5b2bfe1fa006867834412184af9f5b239737763adead71408fc01b88e548b2cc86f341a39771c6ed16f2b0bb3e6ab6109e73c7d68ca7545852f91930e4633c17fb9dc7aa794b0d820d0fa3ac65bf0f013e5449d5953d2943506657e2b76b548e67f5c9ce1a4c53db1b52465bde7208baf11f3fe01975418b4db186a38ad32947d1908b62e532da4b729353a932423d25f5f734484076aa4143c6a74937a4ea49448e261ae1ecb6b07bbdf5c98d0855940a19018c88263b8936f7b3e9a4b6cd98090fa10a10e37ad20fe5d833071ad6d5b2886ba85ec72affb83e316443dbe29dbf643e6aa05595c90765cf85f6da55cc1c09d8dccc7d05da022429ad602a559a044b7e2663b0c153a3011bf824ef8d1fa56cba957c5f5d2276a1c9e92de65782f406848c6e20f634c5d1fea843a8bf1a4058e85553f5838f7299958fbf54be84e46c5a3c3965f8bed7fe03a9a1168a892e0073adeb54deca171a318d11fc1a8179f91632310213da327965a40bc6fe18eae55e8da6b57d7ef9f3a05b42381bcb3db8f8efd6d0c638a2cdd46efb0b8f1274e98672f644b2275947e626b02e5166f86c2dd4a67b81e213f8c064927a396815db589f10e5e521ffedb13f8edbe2de01c6fc8bf0e12c82212e497794aa045e9b6fcca83b4cad0a3b5e6ca2d1feaf8887b4d64f22989396e
cfa8f7f1835eed422580505109fed36797bdc10a9168d5148daef6a8710c3df1d6366c9763ab4ebd359d86a8ea14819252fb52ba423422d1f60b0179316b3729e479ba07e88cb886938c8daae65d470dde91e5336e0fc4221a72cc49057d878aa5924875d097483e94bc44a4ea93aee8780e56c50a405932841f50da156e1f90559a7c4f76999442fb433a26fc703dea656bbe03790ac3c9c5318ff5f81d87d483524bbfe7ff167",
+ "show": "5b:2b:fe:1f:a0:06:86:78:34:41:21:84:af:9f:5b:23:97:37:76:3a:de:ad:71:40:8f:c0:1b:88:e5:48:b2:cc:86:f3:41:a3:97:71:c6:ed:16:f2:b0:bb:3e:6a:b6:10:9e:73:c7:d6:8c:a7:54:58:52:f9:19:30:e4:63:3c:17:fb:9d:c7:aa:79:4b:0d:82:0d:0f:a3:ac:65:bf:0f:01:3e:54:49:d5:95:3d:29:43:50:66:57:e2:b7:6b:54:8e:67:f5:c9:ce:1a:4c:53:db:1b:52:46:5b:de:72:08:ba:f1:1f:3f:e0:19:75:41:8b:4d:b1:86:a3:8a:d3:29:47:d1:90:8b:62:e5:32:da:4b:72:93:53:a9:32:42:3d:25:f5:f7:34:48:40:76:aa:41:43:c6:a7:49:37:a4:ea:49:44:8e:26:1a:e1:ec:b6:b0:7b:bd:f5:c9:8d:08:55:94:0a:19:01:8c:88:26:3b:89:36:f7:b3:e9:a4:b6:cd:98:09:0f:a1:0a:10:e3:7a:d2:0f:e5:d8:33:07:1a:d6:d5:b2:88:6b:a8:5e:c7:2a:ff:b8:3e:31:64:43:db:e2:9d:bf:64:3e:6a:a0:55:95:c9:07:65:cf:85:f6:da:55:cc:1c:09:d8:dc:cc:7d:05:da:02:24:29:ad:60:2a:55:9a:04:4b:7e:26:63:b0:c1:53:a3:01:1b:f8:24:ef:8d:1f:a5:6c:ba:95:7c:5f:5d:22:76:a1:c9:e9:2d:e6:57:82:f4:06:84:8c:6e:20:f6:34:c5:d1:fe:a8:43:a8:bf:1a:40:58:e8:55:53:f5:83:8f:72:99:95:8f:bf:54:be:84:e4:6c:5a:3c:39:65:
f8:be:d7:fe:03:a9:a1:16:8a:89:2e:00:73:ad:eb:54:de:ca:17:1a:31:8d:11:fc:1a:81:79:f9:16:32:31:02:13:da:32:79:65:a4:0b:c6:fe:18:ea:e5:5e:8d:a6:b5:7d:7e:f9:f3:a0:5b:42:38:1b:cb:3d:b8:f8:ef:d6:d0:c6:38:a2:cd:d4:6e:fb:0b:8f:12:74:e9:86:72:f6:44:b2:27:59:47:e6:26:b0:2e:51:66:f8:6c:2d:d4:a6:7b:81:e2:13:f8:c0:64:92:7a:39:68:15:db:58:9f:10:e5:e5:21:ff:ed:b1:3f:8e:db:e2:de:01:c6:fc:8b:f0:e1:2c:82:21:2e:49:77:94:aa:04:5e:9b:6f:cc:a8:3b:4c:ad:0a:3b:5e:6c:a2:d1:fe:af:88:87:b4:d6:4f:22:98:93:96:ec:fa:8f:7f:18:35:ee:d4:22:58:05:05:10:9f:ed:36:79:7b:dc:10:a9:16:8d:51:48:da:ef:6a:87:10:c3:df:1d:63:66:c9:76:3a:b4:eb:d3:59:d8:6a:8e:a1:48:19:25:2f:b5:2b:a4:23:42:2d:1f:60:b0:17:93:16:b3:72:9e:47:9b:a0:7e:88:cb:88:69:38:c8:da:ae:65:d4:70:dd:e9:1e:53:36:e0:fc:42:21:a7:2c:c4:90:57:d8:78:aa:59:24:87:5d:09:74:83:e9:4b:c4:4a:4e:a9:3a:ee:87:80:e5:6c:50:a4:05:93:28:41:f5:0d:a1:56:e1:f9:05:59:a7:c4:f7:69:99:44:2f:b4:33:a2:6f:c7:03:de:a6:56:bb:e0:37:90:ac:3c:9c:53:18:ff:5f:81:d8:7d:48:35:24:bb:fe:7f:f1:67",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ }
+ ]
+ }
+ ]
+};
http://git-wip-us.apache.org/repos/asf/metron/blob/d5eb56a9/metron-interface/metron-alerts/src/app/pcap/pcap-packet/pcap-packet.component.ts
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/src/app/pcap/pcap-packet/pcap-packet.component.ts b/metron-interface/metron-alerts/src/app/pcap/pcap-packet/pcap-packet.component.ts
new file mode 100644
index 0000000..f1bbe2d
--- /dev/null
+++ b/metron-interface/metron-alerts/src/app/pcap/pcap-packet/pcap-packet.component.ts
@@ -0,0 +1,39 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import { Component, OnInit, Input } from '@angular/core';
+
+import { PdmlPacket } from '../model/pdml'
+
+@Component({
+ selector: 'app-pcap-packet',
+ templateUrl: './pcap-packet.component.html',
+ styleUrls: ['./pcap-packet.component.scss']
+})
+export class PcapPacketComponent implements OnInit {
+ @Input() packet: PdmlPacket
+
+ constructor() { }
+
+ ngOnInit() {
+ }
+
+ toggle() {
+ this.packet.expanded = !this.packet.expanded
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/metron/blob/d5eb56a9/metron-interface/metron-alerts/src/app/pcap/pcap-panel/pcap-panel.component.html
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/src/app/pcap/pcap-panel/pcap-panel.component.html b/metron-interface/metron-alerts/src/app/pcap/pcap-panel/pcap-panel.component.html
new file mode 100644
index 0000000..b373914
--- /dev/null
+++ b/metron-interface/metron-alerts/src/app/pcap/pcap-panel/pcap-panel.component.html
@@ -0,0 +1,31 @@
+<!--
+ Licensed to the Apache Software
+ Foundation (ASF) under one or more contributor license agreements. See the
+ NOTICE file distributed with this work for additional information regarding
+ copyright ownership. The ASF licenses this file to You under the Apache License,
+ Version 2.0 (the "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0
+ Unless required by applicable law or agreed to in writing, software distributed
+ under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES
+ OR CONDITIONS OF ANY KIND, either express or implied. See the License for
+ the specific language governing permissions and limitations under the License.
+ -->
+<div class="panel my-4">
+ <div class="panel-header">
+ <app-pcap-filters [queryRunning]="queryRunning" (search)="onSearch($event)"></app-pcap-filters>
+ </div>
+
+ <div *ngIf="queryRunning" class="progress pcap-progress-background">
+ <div class="progress-bar progress-bar-animated pcap-progress" role="progressbar" attr.aria-valuenow="{{progressWidth}}" aria-valuemin="0" aria-valuemax="100" [ngStyle]="{'max-width': progressWidth + '%', 'transition-duration':'1000ms'}">{{progressWidth}}%</div>
+ </div>
+
+ <div *ngIf="errorMsg" class="alert alert-danger" role="alert">
+ {{ errorMsg }}
+ </div>
+
+ <div class="panel-body" *ngIf="pdml">
+ <app-pcap-list [packets]="pdml.packets"></app-pcap-list>
+ </div>
+
+</div>
http://git-wip-us.apache.org/repos/asf/metron/blob/d5eb56a9/metron-interface/metron-alerts/src/app/pcap/pcap-panel/pcap-panel.component.scss
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/src/app/pcap/pcap-panel/pcap-panel.component.scss b/metron-interface/metron-alerts/src/app/pcap/pcap-panel/pcap-panel.component.scss
new file mode 100644
index 0000000..a8cc2ce
--- /dev/null
+++ b/metron-interface/metron-alerts/src/app/pcap/pcap-panel/pcap-panel.component.scss
@@ -0,0 +1,52 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+@import "../../../vendor.scss";
+@import "../../../styles.scss";
+@import "../../../variables.scss";
+
+.pcap-progress-background {
+ background-color: #2E2E2E;
+}
+
+.pcap-progress {
+ background-color: #0F6F9E;
+ transition-duration:2s;
+ animation-duration: 2s;
+}
+
+.progress-bar {
+ width: 0;
+ animation: progress 1.5s ease-in-out forwards;
+}
+
+@keyframes progress {
+ from {
+ width: 0;
+ }
+ to {
+ width: 100%;
+ }
+}
+@keyframes show {
+ from {
+ opacity: 0;
+ }
+ to {
+ opacity: 1;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/metron/blob/d5eb56a9/metron-interface/metron-alerts/src/app/pcap/pcap-panel/pcap-panel.component.spec.ts
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/src/app/pcap/pcap-panel/pcap-panel.component.spec.ts b/metron-interface/metron-alerts/src/app/pcap/pcap-panel/pcap-panel.component.spec.ts
new file mode 100644
index 0000000..82b29f2
--- /dev/null
+++ b/metron-interface/metron-alerts/src/app/pcap/pcap-panel/pcap-panel.component.spec.ts
@@ -0,0 +1,68 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { PcapPanelComponent } from './pcap-panel.component';
+import { Component, Input } from '../../../../node_modules/@angular/core';
+import { PdmlPacket } from '../model/pdml';
+import { PcapService } from '../service/pcap.service';
+
+@Component({
+ selector: 'app-pcap-filters',
+ template: '',
+})
+class FakeFilterComponent {
+ @Input() queryRunning: boolean;
+}
+
+@Component({
+ selector: 'app-pcap-list',
+ template: '',
+})
+class FakePcapListComponent {
+ @Input() packets: PdmlPacket[];
+}
+
+describe('PcapPanelComponent', () => {
+ let component: PcapPanelComponent;
+ let fixture: ComponentFixture<PcapPanelComponent>;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [
+ FakeFilterComponent,
+ FakePcapListComponent,
+ PcapPanelComponent,
+ ],
+ providers: [
+ { provide: PcapService, useValue: {} },
+ ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(PcapPanelComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
http://git-wip-us.apache.org/repos/asf/metron/blob/d5eb56a9/metron-interface/metron-alerts/src/app/pcap/pcap-panel/pcap-panel.component.ts
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/src/app/pcap/pcap-panel/pcap-panel.component.ts b/metron-interface/metron-alerts/src/app/pcap/pcap-panel/pcap-panel.component.ts
new file mode 100644
index 0000000..fd49ec7
--- /dev/null
+++ b/metron-interface/metron-alerts/src/app/pcap/pcap-panel/pcap-panel.component.ts
@@ -0,0 +1,75 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import { Component, OnInit, Input } from '@angular/core';
+
+import { PcapService, PcapStatusResponse } from '../service/pcap.service'
+import { PcapRequest } from '../model/pcap.request'
+import { Pdml } from '../model/pdml'
+import {Subscription} from "rxjs/Rx";
+
+@Component({
+ selector: 'app-pcap-panel',
+ templateUrl: './pcap-panel.component.html',
+ styleUrls: ['./pcap-panel.component.scss']
+})
+export class PcapPanelComponent implements OnInit {
+
+ @Input() pdml: Pdml = null;
+
+ @Input() pcapRequest: PcapRequest;
+
+ statusSubscription: Subscription;
+ queryRunning: boolean = false;
+ progressWidth: number = 0;
+ selectedPage: number = 1;
+ errorMsg: string;
+
+ constructor(private pcapService: PcapService ) { }
+
+ ngOnInit() {
+ }
+
+ onSearch(pcapRequest) {
+ console.log(pcapRequest);
+ this.pdml = null;
+ this.progressWidth = 0;
+ this.pcapService.submitRequest(pcapRequest).subscribe(id => {
+ this.queryRunning = true;
+ this.errorMsg = null;
+ this.statusSubscription = this.pcapService.pollStatus(id).subscribe((statusResponse: PcapStatusResponse) => {
+ if ('SUCCEEDED' === statusResponse.jobStatus) {
+ this.statusSubscription.unsubscribe();
+ this.queryRunning = false;
+ this.pcapService.getPackets(id, this.selectedPage).toPromise().then(pdml => {
+ this.pdml = pdml;
+ });
+ } else if ('FAILED' === statusResponse.jobStatus) {
+ this.statusSubscription.unsubscribe();
+ this.queryRunning = false;
+ this.errorMsg = `Query status: ${statusResponse.jobStatus}. Check your filter criteria and try again!`;
+ } else if (this.progressWidth < 100) {
+ this.progressWidth = Math.trunc(statusResponse.percentComplete);
+ }
+ }, (error: any) => {
+ this.statusSubscription.unsubscribe();
+ this.queryRunning = false;
+ this.errorMsg = `Response status: ${error.responseCode}. Something went wrong with your status request!`;
+ });
+ });
+ }
+}
http://git-wip-us.apache.org/repos/asf/metron/blob/d5eb56a9/metron-interface/metron-alerts/src/app/pcap/pcap.module.ts
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/src/app/pcap/pcap.module.ts b/metron-interface/metron-alerts/src/app/pcap/pcap.module.ts
new file mode 100644
index 0000000..c66b965
--- /dev/null
+++ b/metron-interface/metron-alerts/src/app/pcap/pcap.module.ts
@@ -0,0 +1,50 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import {NgModule} from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { FormsModule } from '@angular/forms';
+import { HttpModule } from '@angular/http';
+
+import { routing } from './pcap.routing';
+
+import { PcapListComponent } from './pcap-list/pcap-list.component';
+import { PcapPacketComponent } from './pcap-packet/pcap-packet.component';
+import { PcapFiltersComponent } from './pcap-filters/pcap-filters.component';
+import { PcapPanelComponent } from './pcap-panel/pcap-panel.component';
+import { PcapPacketLineComponent } from './pcap-packet-line/pcap-packet-line.component';
+
+import { PcapService } from './service/pcap.service'
+
+@NgModule({
+ imports: [
+ routing,
+ CommonModule,
+ FormsModule,
+ HttpModule
+ ],
+ declarations: [
+ PcapListComponent,
+ PcapPacketComponent,
+ PcapFiltersComponent,
+ PcapPanelComponent,
+ PcapPacketLineComponent
+ ],
+ exports: [ PcapPanelComponent ],
+ providers: [ PcapService ]
+})
+export class PcapModule {}
http://git-wip-us.apache.org/repos/asf/metron/blob/d5eb56a9/metron-interface/metron-alerts/src/app/pcap/pcap.routing.ts
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/src/app/pcap/pcap.routing.ts b/metron-interface/metron-alerts/src/app/pcap/pcap.routing.ts
new file mode 100644
index 0000000..25ee0ed
--- /dev/null
+++ b/metron-interface/metron-alerts/src/app/pcap/pcap.routing.ts
@@ -0,0 +1,27 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import { Routes, RouterModule } from '@angular/router';
+import { ModuleWithProviders } from '@angular/core';
+
+import {PcapPanelComponent} from './pcap-panel/pcap-panel.component';
+
+export const routes: Routes = [
+ {path: '', component: PcapPanelComponent},
+];
+
+export const routing: ModuleWithProviders = RouterModule.forChild(routes);
[4/5] metron git commit: METRON-1671 Create PCAP UI (tiborm via
merrimanr) closes apache/metron#1103
Posted by rm...@apache.org.
http://git-wip-us.apache.org/repos/asf/metron/blob/d5eb56a9/metron-interface/metron-alerts/package-lock.json
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/package-lock.json b/metron-interface/metron-alerts/package-lock.json
index 3ace2b7..7d3ad99 100644
--- a/metron-interface/metron-alerts/package-lock.json
+++ b/metron-interface/metron-alerts/package-lock.json
@@ -1,6 +1,6 @@
{
"name": "metron-alerts",
- "version": "0.4.3",
+ "version": "0.5.1",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@@ -12,66 +12,66 @@
"requires": {
"@ngtools/json-schema": "1.1.0",
"@ngtools/webpack": "1.5.3",
- "autoprefixer": "6.7.7",
- "chalk": "2.3.0",
- "circular-dependency-plugin": "3.0.0",
- "common-tags": "1.5.1",
- "core-object": "3.1.5",
- "css-loader": "0.28.7",
- "cssnano": "3.10.0",
- "denodeify": "1.2.1",
- "diff": "3.2.0",
- "ember-cli-normalize-entity-name": "1.0.0",
- "ember-cli-string-utils": "1.1.0",
- "exports-loader": "0.6.4",
- "extract-text-webpack-plugin": "2.1.2",
- "file-loader": "0.10.1",
- "fs-extra": "4.0.2",
- "get-caller-file": "1.0.2",
- "glob": "7.1.2",
- "heimdalljs": "0.2.5",
- "heimdalljs-logger": "0.1.9",
- "html-webpack-plugin": "2.30.1",
- "inflection": "1.12.0",
- "inquirer": "3.3.0",
- "isbinaryfile": "3.0.2",
- "istanbul-instrumenter-loader": "2.0.0",
- "json-loader": "0.5.7",
- "karma-source-map-support": "1.2.0",
- "less": "2.7.3",
- "less-loader": "4.0.5",
- "license-webpack-plugin": "0.4.3",
- "lodash": "4.17.4",
- "memory-fs": "0.4.1",
- "minimatch": "3.0.4",
- "node-modules-path": "1.0.1",
- "node-sass": "4.5.3",
- "nopt": "4.0.1",
- "opn": "5.1.0",
- "portfinder": "1.0.13",
- "postcss-loader": "1.3.3",
- "postcss-url": "5.1.2",
- "raw-loader": "0.5.1",
- "resolve": "1.3.3",
- "rsvp": "3.6.2",
- "rxjs": "5.4.0",
- "sass-loader": "6.0.6",
- "script-loader": "0.7.2",
- "semver": "5.3.0",
- "silent-error": "1.1.0",
- "source-map-loader": "0.2.3",
- "style-loader": "0.13.2",
- "stylus": "0.54.5",
- "stylus-loader": "3.0.1",
+ "autoprefixer": "^6.5.3",
+ "chalk": "^2.0.1",
+ "circular-dependency-plugin": "^3.0.0",
+ "common-tags": "^1.3.1",
+ "core-object": "^3.1.0",
+ "css-loader": "^0.28.1",
+ "cssnano": "^3.10.0",
+ "denodeify": "^1.2.1",
+ "diff": "^3.1.0",
+ "ember-cli-normalize-entity-name": "^1.0.0",
+ "ember-cli-string-utils": "^1.0.0",
+ "exports-loader": "^0.6.3",
+ "extract-text-webpack-plugin": "^2.1.0",
+ "file-loader": "^0.10.0",
+ "fs-extra": "^4.0.0",
+ "get-caller-file": "^1.0.0",
+ "glob": "^7.0.3",
+ "heimdalljs": "^0.2.4",
+ "heimdalljs-logger": "^0.1.9",
+ "html-webpack-plugin": "^2.19.0",
+ "inflection": "^1.7.0",
+ "inquirer": "^3.0.0",
+ "isbinaryfile": "^3.0.0",
+ "istanbul-instrumenter-loader": "^2.0.0",
+ "json-loader": "^0.5.4",
+ "karma-source-map-support": "^1.2.0",
+ "less": "^2.7.2",
+ "less-loader": "^4.0.2",
+ "license-webpack-plugin": "^0.4.2",
+ "lodash": "^4.11.1",
+ "memory-fs": "^0.4.1",
+ "minimatch": "^3.0.3",
+ "node-modules-path": "^1.0.0",
+ "node-sass": "^4.3.0",
+ "nopt": "^4.0.1",
+ "opn": "~5.1.0",
+ "portfinder": "~1.0.12",
+ "postcss-loader": "^1.3.3",
+ "postcss-url": "^5.1.2",
+ "raw-loader": "^0.5.1",
+ "resolve": "^1.1.7",
+ "rsvp": "^3.0.17",
+ "rxjs": "^5.0.1",
+ "sass-loader": "^6.0.3",
+ "script-loader": "^0.7.0",
+ "semver": "^5.1.0",
+ "silent-error": "^1.0.0",
+ "source-map-loader": "^0.2.0",
+ "style-loader": "^0.13.1",
+ "stylus": "^0.54.5",
+ "stylus-loader": "^3.0.1",
"temp": "0.8.3",
- "typescript": "2.2.2",
- "url-loader": "0.5.9",
- "walk-sync": "0.3.2",
- "webpack": "2.4.1",
- "webpack-dev-middleware": "1.12.2",
- "webpack-dev-server": "2.4.5",
- "webpack-merge": "2.6.1",
- "zone.js": "0.8.18"
+ "typescript": ">=2.0.0 <2.4.0",
+ "url-loader": "^0.5.7",
+ "walk-sync": "^0.3.1",
+ "webpack": "~2.4.0",
+ "webpack-dev-middleware": "^1.10.2",
+ "webpack-dev-server": "~2.4.5",
+ "webpack-merge": "^2.4.0",
+ "zone.js": "^0.8.14"
},
"dependencies": {
"ansi-styles": {
@@ -80,7 +80,7 @@
"integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
"dev": true,
"requires": {
- "color-convert": "1.9.1"
+ "color-convert": "^1.9.0"
}
},
"chalk": {
@@ -89,9 +89,9 @@
"integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
"dev": true,
"requires": {
- "ansi-styles": "3.2.0",
- "escape-string-regexp": "1.0.5",
- "supports-color": "4.5.0"
+ "ansi-styles": "^3.1.0",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^4.0.0"
}
},
"has-flag": {
@@ -106,7 +106,7 @@
"integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
"dev": true,
"requires": {
- "has-flag": "2.0.0"
+ "has-flag": "^2.0.0"
}
},
"zone.js": {
@@ -134,8 +134,8 @@
"dev": true,
"requires": {
"@angular/tsc-wrapped": "4.1.3",
- "minimist": "1.2.0",
- "reflect-metadata": "0.1.10"
+ "minimist": "^1.2.0",
+ "reflect-metadata": "^0.1.2"
},
"dependencies": {
"minimist": {
@@ -182,7 +182,7 @@
"integrity": "sha1-LWNyyRh78WIerNlguUs5xPlSk80=",
"dev": true,
"requires": {
- "tsickle": "0.21.6"
+ "tsickle": "^0.21.0"
}
},
"@ngtools/json-schema": {
@@ -198,9 +198,9 @@
"dev": true,
"requires": {
"enhanced-resolve": "3.3.0",
- "loader-utils": "1.1.0",
- "magic-string": "0.22.4",
- "source-map": "0.5.6"
+ "loader-utils": "^1.0.2",
+ "magic-string": "^0.22.3",
+ "source-map": "^0.5.6"
}
},
"@types/ace": {
@@ -227,7 +227,7 @@
"integrity": "sha1-YE69GJvDvDShVIaJQE5hoqSqyJY=",
"dev": true,
"requires": {
- "moment": "2.19.2"
+ "moment": "*"
}
},
"@types/node": {
@@ -242,7 +242,7 @@
"integrity": "sha1-040HYaJnOzjAjgULvQieYcw8LRc=",
"dev": true,
"requires": {
- "moment": "2.19.2"
+ "moment": ">=2.14.0"
}
},
"@types/q": {
@@ -269,7 +269,7 @@
"integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=",
"dev": true,
"requires": {
- "mime-types": "2.1.15",
+ "mime-types": "~2.1.11",
"negotiator": "0.6.1"
}
},
@@ -290,7 +290,7 @@
"integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=",
"dev": true,
"requires": {
- "acorn": "4.0.13"
+ "acorn": "^4.0.3"
},
"dependencies": {
"acorn": {
@@ -319,8 +319,8 @@
"integrity": "sha1-1t4Q1a9hMtW9aSQn1G/FOFOQlMc=",
"dev": true,
"requires": {
- "extend": "3.0.1",
- "semver": "5.0.3"
+ "extend": "~3.0.0",
+ "semver": "~5.0.1"
},
"dependencies": {
"semver": {
@@ -337,8 +337,8 @@
"integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=",
"dev": true,
"requires": {
- "co": "4.6.0",
- "json-stable-stringify": "1.0.1"
+ "co": "^4.6.0",
+ "json-stable-stringify": "^1.0.1"
}
},
"ajv-keywords": {
@@ -353,9 +353,9 @@
"integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
"dev": true,
"requires": {
- "kind-of": "3.2.2",
- "longest": "1.0.1",
- "repeat-string": "1.6.1"
+ "kind-of": "^3.0.2",
+ "longest": "^1.0.1",
+ "repeat-string": "^1.5.2"
}
},
"alphanum-sort": {
@@ -376,7 +376,7 @@
"integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=",
"dev": true,
"requires": {
- "string-width": "2.0.0"
+ "string-width": "^2.0.0"
}
},
"ansi-escapes": {
@@ -415,8 +415,8 @@
"integrity": "sha1-o+Uvo5FoyCX/V7AkgSbOWo/5VQc=",
"dev": true,
"requires": {
- "arrify": "1.0.1",
- "micromatch": "2.3.11"
+ "arrify": "^1.0.0",
+ "micromatch": "^2.1.5"
}
},
"app-root-path": {
@@ -431,7 +431,7 @@
"integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=",
"dev": true,
"requires": {
- "default-require-extensions": "1.0.0"
+ "default-require-extensions": "^1.0.0"
}
},
"aproba": {
@@ -446,8 +446,8 @@
"integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=",
"dev": true,
"requires": {
- "delegates": "1.0.0",
- "readable-stream": "2.2.11"
+ "delegates": "^1.0.0",
+ "readable-stream": "^2.0.6"
}
},
"argparse": {
@@ -456,7 +456,7 @@
"integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=",
"dev": true,
"requires": {
- "sprintf-js": "1.0.3"
+ "sprintf-js": "~1.0.2"
}
},
"arr-diff": {
@@ -465,7 +465,7 @@
"integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
"dev": true,
"requires": {
- "arr-flatten": "1.0.3"
+ "arr-flatten": "^1.0.1"
}
},
"arr-flatten": {
@@ -498,7 +498,7 @@
"integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
"dev": true,
"requires": {
- "array-uniq": "1.0.3"
+ "array-uniq": "^1.0.1"
}
},
"array-uniq": {
@@ -544,9 +544,9 @@
"integrity": "sha1-gRfvT37YfNj4kES1v/l6wkOhbJo=",
"dev": true,
"requires": {
- "bn.js": "4.11.8",
- "inherits": "2.0.3",
- "minimalistic-assert": "1.0.0"
+ "bn.js": "^4.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
}
},
"assert": {
@@ -570,7 +570,7 @@
"integrity": "sha1-YqVrJ5yYoR0JhwlqAcw+6463u9c=",
"dev": true,
"requires": {
- "lodash": "4.17.4"
+ "lodash": "^4.14.0"
}
},
"async-each": {
@@ -585,6 +585,12 @@
"integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=",
"dev": true
},
+ "async-limiter": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
+ "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==",
+ "dev": true
+ },
"asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
@@ -602,12 +608,12 @@
"integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=",
"dev": true,
"requires": {
- "browserslist": "1.7.7",
- "caniuse-db": "1.0.30000772",
- "normalize-range": "0.1.2",
- "num2fraction": "1.2.2",
- "postcss": "5.2.18",
- "postcss-value-parser": "3.3.0"
+ "browserslist": "^1.7.6",
+ "caniuse-db": "^1.0.30000634",
+ "normalize-range": "^0.1.2",
+ "num2fraction": "^1.2.2",
+ "postcss": "^5.2.16",
+ "postcss-value-parser": "^3.2.3"
}
},
"aws-sign2": {
@@ -628,9 +634,9 @@
"integrity": "sha1-AnYgvuVnqIwyVhV05/0IAdMxGOQ=",
"dev": true,
"requires": {
- "chalk": "1.1.3",
- "esutils": "2.0.2",
- "js-tokens": "3.0.1"
+ "chalk": "^1.1.0",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.0"
}
},
"babel-generator": {
@@ -639,14 +645,14 @@
"integrity": "sha1-5xX0hsWN7SVknYiJRNUqoHxdlJc=",
"dev": true,
"requires": {
- "babel-messages": "6.23.0",
- "babel-runtime": "6.23.0",
- "babel-types": "6.24.1",
- "detect-indent": "4.0.0",
- "jsesc": "1.3.0",
- "lodash": "4.17.4",
- "source-map": "0.5.6",
- "trim-right": "1.0.1"
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1",
+ "detect-indent": "^4.0.0",
+ "jsesc": "^1.3.0",
+ "lodash": "^4.2.0",
+ "source-map": "^0.5.0",
+ "trim-right": "^1.0.1"
},
"dependencies": {
"jsesc": {
@@ -663,7 +669,7 @@
"integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
"dev": true,
"requires": {
- "babel-runtime": "6.23.0"
+ "babel-runtime": "^6.22.0"
}
},
"babel-runtime": {
@@ -672,8 +678,8 @@
"integrity": "sha1-CpSJ8UTecO+zzkMArM2zKeL8VDs=",
"dev": true,
"requires": {
- "core-js": "2.4.1",
- "regenerator-runtime": "0.10.5"
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.10.0"
}
},
"babel-template": {
@@ -682,11 +688,11 @@
"integrity": "sha1-BK5RTx+Ts6JTfyoPYKWkX7gwgzM=",
"dev": true,
"requires": {
- "babel-runtime": "6.23.0",
- "babel-traverse": "6.24.1",
- "babel-types": "6.24.1",
- "babylon": "6.17.2",
- "lodash": "4.17.4"
+ "babel-runtime": "^6.22.0",
+ "babel-traverse": "^6.24.1",
+ "babel-types": "^6.24.1",
+ "babylon": "^6.11.0",
+ "lodash": "^4.2.0"
}
},
"babel-traverse": {
@@ -695,15 +701,15 @@
"integrity": "sha1-qzZnP9NW+aCUhlnnszjV/q2zFpU=",
"dev": true,
"requires": {
- "babel-code-frame": "6.22.0",
- "babel-messages": "6.23.0",
- "babel-runtime": "6.23.0",
- "babel-types": "6.24.1",
- "babylon": "6.17.2",
- "debug": "2.6.8",
- "globals": "9.18.0",
- "invariant": "2.2.2",
- "lodash": "4.17.4"
+ "babel-code-frame": "^6.22.0",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1",
+ "babylon": "^6.15.0",
+ "debug": "^2.2.0",
+ "globals": "^9.0.0",
+ "invariant": "^2.2.0",
+ "lodash": "^4.2.0"
}
},
"babel-types": {
@@ -712,10 +718,10 @@
"integrity": "sha1-oTaHncFbNga9oNkMH8dDBML/CXU=",
"dev": true,
"requires": {
- "babel-runtime": "6.23.0",
- "esutils": "2.0.2",
- "lodash": "4.17.4",
- "to-fast-properties": "1.0.3"
+ "babel-runtime": "^6.22.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.2.0",
+ "to-fast-properties": "^1.0.1"
}
},
"babylon": {
@@ -767,7 +773,7 @@
"dev": true,
"optional": true,
"requires": {
- "tweetnacl": "0.14.5"
+ "tweetnacl": "^0.14.3"
}
},
"better-assert": {
@@ -803,7 +809,7 @@
"integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
"dev": true,
"requires": {
- "inherits": "2.0.3"
+ "inherits": "~2.0.0"
}
},
"blocking-proxy": {
@@ -812,7 +818,7 @@
"integrity": "sha512-KE8NFMZr3mN2E0HcvCgRtX7DjhiIQrwle+nSVJVC/yqFb9+xznHl2ZcoBp2L9qzkI4t4cBFJ1efXF8Dwi132RA==",
"dev": true,
"requires": {
- "minimist": "1.2.0"
+ "minimist": "^1.2.0"
},
"dependencies": {
"minimist": {
@@ -842,15 +848,15 @@
"dev": true,
"requires": {
"bytes": "2.4.0",
- "content-type": "1.0.2",
+ "content-type": "~1.0.2",
"debug": "2.6.7",
- "depd": "1.1.0",
- "http-errors": "1.6.1",
+ "depd": "~1.1.0",
+ "http-errors": "~1.6.1",
"iconv-lite": "0.4.15",
- "on-finished": "2.3.0",
+ "on-finished": "~2.3.0",
"qs": "6.4.0",
- "raw-body": "2.2.0",
- "type-is": "1.6.15"
+ "raw-body": "~2.2.0",
+ "type-is": "~1.6.15"
},
"dependencies": {
"bytes": {
@@ -888,7 +894,7 @@
"integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
"dev": true,
"requires": {
- "hoek": "2.16.3"
+ "hoek": "2.x.x"
}
},
"bootstrap": {
@@ -896,8 +902,8 @@
"resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.0.0-alpha.6.tgz",
"integrity": "sha1-T1TdM6wN6sOyhAe8LffsYIhpycg=",
"requires": {
- "jquery": "3.2.1",
- "tether": "1.4.0"
+ "jquery": ">=1.9.1",
+ "tether": "^1.4.0"
}
},
"boxen": {
@@ -906,13 +912,13 @@
"integrity": "sha1-sbad1SIwXoB6md7ud329blFnsQI=",
"dev": true,
"requires": {
- "ansi-align": "2.0.0",
- "camelcase": "4.1.0",
- "chalk": "1.1.3",
- "cli-boxes": "1.0.0",
- "string-width": "2.0.0",
- "term-size": "0.1.1",
- "widest-line": "1.0.0"
+ "ansi-align": "^2.0.0",
+ "camelcase": "^4.0.0",
+ "chalk": "^1.1.1",
+ "cli-boxes": "^1.0.0",
+ "string-width": "^2.0.0",
+ "term-size": "^0.1.0",
+ "widest-line": "^1.0.0"
},
"dependencies": {
"camelcase": {
@@ -929,7 +935,7 @@
"integrity": "sha1-Pv/DxQ4ABTH7cg6v+A8K6O8jz1k=",
"dev": true,
"requires": {
- "balanced-match": "0.4.2",
+ "balanced-match": "^0.4.1",
"concat-map": "0.0.1"
}
},
@@ -939,9 +945,9 @@
"integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
"dev": true,
"requires": {
- "expand-range": "1.8.2",
- "preserve": "0.2.0",
- "repeat-element": "1.1.2"
+ "expand-range": "^1.8.1",
+ "preserve": "^0.2.0",
+ "repeat-element": "^1.1.2"
}
},
"brorand": {
@@ -956,12 +962,12 @@
"integrity": "sha1-OLerVe24Bv8tzaGn8WIHc6R3xJ8=",
"dev": true,
"requires": {
- "buffer-xor": "1.0.3",
- "cipher-base": "1.0.4",
- "create-hash": "1.1.3",
- "evp_bytestokey": "1.0.3",
- "inherits": "2.0.3",
- "safe-buffer": "5.0.1"
+ "buffer-xor": "^1.0.3",
+ "cipher-base": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.3",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
}
},
"browserify-cipher": {
@@ -970,9 +976,9 @@
"integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=",
"dev": true,
"requires": {
- "browserify-aes": "1.1.1",
- "browserify-des": "1.0.0",
- "evp_bytestokey": "1.0.3"
+ "browserify-aes": "^1.0.4",
+ "browserify-des": "^1.0.0",
+ "evp_bytestokey": "^1.0.0"
}
},
"browserify-des": {
@@ -981,9 +987,9 @@
"integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=",
"dev": true,
"requires": {
- "cipher-base": "1.0.4",
- "des.js": "1.0.0",
- "inherits": "2.0.3"
+ "cipher-base": "^1.0.1",
+ "des.js": "^1.0.0",
+ "inherits": "^2.0.1"
}
},
"browserify-rsa": {
@@ -992,8 +998,8 @@
"integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
"dev": true,
"requires": {
- "bn.js": "4.11.8",
- "randombytes": "2.0.5"
+ "bn.js": "^4.1.0",
+ "randombytes": "^2.0.1"
}
},
"browserify-sign": {
@@ -1002,13 +1008,13 @@
"integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
"dev": true,
"requires": {
- "bn.js": "4.11.8",
- "browserify-rsa": "4.0.1",
- "create-hash": "1.1.3",
- "create-hmac": "1.1.6",
- "elliptic": "6.4.0",
- "inherits": "2.0.3",
- "parse-asn1": "5.1.0"
+ "bn.js": "^4.1.1",
+ "browserify-rsa": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "create-hmac": "^1.1.2",
+ "elliptic": "^6.0.0",
+ "inherits": "^2.0.1",
+ "parse-asn1": "^5.0.0"
}
},
"browserify-zlib": {
@@ -1017,7 +1023,7 @@
"integrity": "sha1-KGlFnZqjviRf6P4sofRuLn9U1z8=",
"dev": true,
"requires": {
- "pako": "1.0.6"
+ "pako": "~1.0.5"
}
},
"browserslist": {
@@ -1026,8 +1032,8 @@
"integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
"dev": true,
"requires": {
- "caniuse-db": "1.0.30000772",
- "electron-to-chromium": "1.3.27"
+ "caniuse-db": "^1.0.30000639",
+ "electron-to-chromium": "^1.2.7"
}
},
"buffer": {
@@ -1036,11 +1042,17 @@
"integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
"dev": true,
"requires": {
- "base64-js": "1.2.1",
- "ieee754": "1.1.8",
- "isarray": "1.0.0"
+ "base64-js": "^1.0.2",
+ "ieee754": "^1.1.4",
+ "isarray": "^1.0.0"
}
},
+ "buffer-from": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz",
+ "integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ==",
+ "dev": true
+ },
"buffer-xor": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
@@ -1077,8 +1089,8 @@
"integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=",
"dev": true,
"requires": {
- "no-case": "2.3.2",
- "upper-case": "1.1.3"
+ "no-case": "^2.2.0",
+ "upper-case": "^1.1.1"
}
},
"camelcase": {
@@ -1093,8 +1105,8 @@
"integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
"dev": true,
"requires": {
- "camelcase": "2.1.1",
- "map-obj": "1.0.1"
+ "camelcase": "^2.0.0",
+ "map-obj": "^1.0.0"
}
},
"caniuse-api": {
@@ -1103,10 +1115,10 @@
"integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=",
"dev": true,
"requires": {
- "browserslist": "1.7.7",
- "caniuse-db": "1.0.30000772",
- "lodash.memoize": "4.1.2",
- "lodash.uniq": "4.5.0"
+ "browserslist": "^1.3.6",
+ "caniuse-db": "^1.0.30000529",
+ "lodash.memoize": "^4.1.2",
+ "lodash.uniq": "^4.5.0"
}
},
"caniuse-db": {
@@ -1133,8 +1145,8 @@
"integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
"dev": true,
"requires": {
- "align-text": "0.1.4",
- "lazy-cache": "1.0.4"
+ "align-text": "^0.1.3",
+ "lazy-cache": "^1.0.3"
}
},
"chalk": {
@@ -1143,11 +1155,11 @@
"integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
"dev": true,
"requires": {
- "ansi-styles": "2.2.1",
- "escape-string-regexp": "1.0.5",
- "has-ansi": "2.0.0",
- "strip-ansi": "3.0.1",
- "supports-color": "2.0.0"
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
},
"dependencies": {
"supports-color": {
@@ -1170,15 +1182,15 @@
"integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=",
"dev": true,
"requires": {
- "anymatch": "1.3.0",
- "async-each": "1.0.1",
- "fsevents": "1.1.1",
- "glob-parent": "2.0.0",
- "inherits": "2.0.3",
- "is-binary-path": "1.0.1",
- "is-glob": "2.0.1",
- "path-is-absolute": "1.0.1",
- "readdirp": "2.1.0"
+ "anymatch": "^1.3.0",
+ "async-each": "^1.0.0",
+ "fsevents": "^1.0.0",
+ "glob-parent": "^2.0.0",
+ "inherits": "^2.0.1",
+ "is-binary-path": "^1.0.0",
+ "is-glob": "^2.0.0",
+ "path-is-absolute": "^1.0.0",
+ "readdirp": "^2.0.0"
}
},
"cipher-base": {
@@ -1187,8 +1199,8 @@
"integrity": "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94=",
"dev": true,
"requires": {
- "inherits": "2.0.3",
- "safe-buffer": "5.0.1"
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
}
},
"circular-dependency-plugin": {
@@ -1203,7 +1215,7 @@
"integrity": "sha1-TzZ0WzIAhJJVf0ZBLWbVDLmbzlE=",
"dev": true,
"requires": {
- "chalk": "1.1.3"
+ "chalk": "^1.1.3"
}
},
"clean-css": {
@@ -1212,7 +1224,7 @@
"integrity": "sha1-Nc7ornaHpJuYA09w3gDE7dOCYwE=",
"dev": true,
"requires": {
- "source-map": "0.5.6"
+ "source-map": "0.5.x"
}
},
"cli-boxes": {
@@ -1227,7 +1239,7 @@
"integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
"dev": true,
"requires": {
- "restore-cursor": "2.0.0"
+ "restore-cursor": "^2.0.0"
}
},
"cli-width": {
@@ -1242,9 +1254,9 @@
"integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
"dev": true,
"requires": {
- "string-width": "1.0.2",
- "strip-ansi": "3.0.1",
- "wrap-ansi": "2.1.0"
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wrap-ansi": "^2.0.0"
},
"dependencies": {
"is-fullwidth-code-point": {
@@ -1253,7 +1265,7 @@
"integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
"dev": true,
"requires": {
- "number-is-nan": "1.0.1"
+ "number-is-nan": "^1.0.0"
}
},
"string-width": {
@@ -1262,9 +1274,9 @@
"integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
"dev": true,
"requires": {
- "code-point-at": "1.1.0",
- "is-fullwidth-code-point": "1.0.0",
- "strip-ansi": "3.0.1"
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
}
}
}
@@ -1281,10 +1293,10 @@
"integrity": "sha1-NIxhrpzb4O3+BT2R/0zFIdeQ7eg=",
"dev": true,
"requires": {
- "for-own": "1.0.0",
- "is-plain-object": "2.0.4",
- "kind-of": "3.2.2",
- "shallow-clone": "0.1.2"
+ "for-own": "^1.0.0",
+ "is-plain-object": "^2.0.1",
+ "kind-of": "^3.2.2",
+ "shallow-clone": "^0.1.2"
},
"dependencies": {
"for-own": {
@@ -1293,7 +1305,7 @@
"integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
"dev": true,
"requires": {
- "for-in": "1.0.2"
+ "for-in": "^1.0.1"
}
}
}
@@ -1310,7 +1322,7 @@
"integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=",
"dev": true,
"requires": {
- "q": "1.5.0"
+ "q": "^1.1.2"
}
},
"code-point-at": {
@@ -1325,12 +1337,12 @@
"integrity": "sha1-0PcSH2eoQkyS0h07MfNkC4Pe+e0=",
"dev": true,
"requires": {
- "app-root-path": "2.0.1",
- "css-selector-tokenizer": "0.7.0",
- "cssauron": "1.4.0",
- "semver-dsl": "1.0.1",
- "source-map": "0.5.6",
- "sprintf-js": "1.0.3"
+ "app-root-path": "^2.0.1",
+ "css-selector-tokenizer": "^0.7.0",
+ "cssauron": "^1.4.0",
+ "semver-dsl": "^1.0.1",
+ "source-map": "^0.5.6",
+ "sprintf-js": "^1.0.3"
}
},
"color": {
@@ -1339,9 +1351,9 @@
"integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=",
"dev": true,
"requires": {
- "clone": "1.0.3",
- "color-convert": "1.9.1",
- "color-string": "0.3.0"
+ "clone": "^1.0.2",
+ "color-convert": "^1.3.0",
+ "color-string": "^0.3.0"
}
},
"color-convert": {
@@ -1350,7 +1362,7 @@
"integrity": "sha1-wSYRB66y8pTr/+ye2eytUppgl+0=",
"dev": true,
"requires": {
- "color-name": "1.1.3"
+ "color-name": "^1.1.1"
}
},
"color-name": {
@@ -1365,7 +1377,7 @@
"integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=",
"dev": true,
"requires": {
- "color-name": "1.1.3"
+ "color-name": "^1.0.0"
}
},
"colormin": {
@@ -1374,9 +1386,9 @@
"integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=",
"dev": true,
"requires": {
- "color": "0.11.4",
+ "color": "^0.11.0",
"css-color-names": "0.0.4",
- "has": "1.0.1"
+ "has": "^1.0.1"
}
},
"colors": {
@@ -1391,7 +1403,7 @@
"integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=",
"dev": true,
"requires": {
- "lodash": "4.17.4"
+ "lodash": "^4.5.0"
}
},
"combined-stream": {
@@ -1400,7 +1412,7 @@
"integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=",
"dev": true,
"requires": {
- "delayed-stream": "1.0.0"
+ "delayed-stream": "~1.0.0"
}
},
"commander": {
@@ -1415,7 +1427,7 @@
"integrity": "sha1-4uOZMaATzQIlPe/u2Joa1hWifwc=",
"dev": true,
"requires": {
- "babel-runtime": "6.26.0"
+ "babel-runtime": "^6.26.0"
},
"dependencies": {
"babel-runtime": {
@@ -1424,8 +1436,8 @@
"integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
"dev": true,
"requires": {
- "core-js": "2.4.1",
- "regenerator-runtime": "0.11.0"
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
}
},
"regenerator-runtime": {
@@ -1460,7 +1472,7 @@
"integrity": "sha1-/tocf3YXkScyspv4zyYlKiC57s0=",
"dev": true,
"requires": {
- "mime-db": "1.27.0"
+ "mime-db": ">= 1.27.0 < 2"
}
},
"compression": {
@@ -1469,12 +1481,12 @@
"integrity": "sha1-zOsSHsydCcUtetDDNQ6pPd1AK8M=",
"dev": true,
"requires": {
- "accepts": "1.3.3",
+ "accepts": "~1.3.3",
"bytes": "2.3.0",
- "compressible": "2.0.10",
- "debug": "2.2.0",
- "on-headers": "1.0.1",
- "vary": "1.1.1"
+ "compressible": "~2.0.8",
+ "debug": "~2.2.0",
+ "on-headers": "~1.0.1",
+ "vary": "~1.1.0"
},
"dependencies": {
"debug": {
@@ -1500,18 +1512,30 @@
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
"dev": true
},
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
"configstore": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.0.tgz",
"integrity": "sha1-Rd+QcHPibfoc9LLVL1tgVF6qEdE=",
"dev": true,
"requires": {
- "dot-prop": "4.1.1",
- "graceful-fs": "4.1.11",
- "make-dir": "1.0.0",
- "unique-string": "1.0.0",
- "write-file-atomic": "2.1.0",
- "xdg-basedir": "3.0.0"
+ "dot-prop": "^4.1.0",
+ "graceful-fs": "^4.1.2",
+ "make-dir": "^1.0.0",
+ "unique-string": "^1.0.0",
+ "write-file-atomic": "^2.0.0",
+ "xdg-basedir": "^3.0.0"
}
},
"connect": {
@@ -1522,7 +1546,7 @@
"requires": {
"debug": "2.6.7",
"finalhandler": "1.0.3",
- "parseurl": "1.3.1",
+ "parseurl": "~1.3.1",
"utils-merge": "1.0.0"
},
"dependencies": {
@@ -1549,7 +1573,7 @@
"integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
"dev": true,
"requires": {
- "date-now": "0.1.4"
+ "date-now": "^0.1.4"
}
},
"console-control-strings": {
@@ -1614,7 +1638,7 @@
"integrity": "sha1-+mJ7h1Aq3JgEXkRnjpqOw7nA0qk=",
"dev": true,
"requires": {
- "chalk": "2.3.0"
+ "chalk": "^2.0.0"
},
"dependencies": {
"ansi-styles": {
@@ -1623,7 +1647,7 @@
"integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
"dev": true,
"requires": {
- "color-convert": "1.9.1"
+ "color-convert": "^1.9.0"
}
},
"chalk": {
@@ -1632,9 +1656,9 @@
"integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
"dev": true,
"requires": {
- "ansi-styles": "3.2.0",
- "escape-string-regexp": "1.0.5",
- "supports-color": "4.5.0"
+ "ansi-styles": "^3.1.0",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^4.0.0"
}
},
"has-flag": {
@@ -1649,7 +1673,7 @@
"integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
"dev": true,
"requires": {
- "has-flag": "2.0.0"
+ "has-flag": "^2.0.0"
}
}
}
@@ -1666,13 +1690,13 @@
"integrity": "sha1-YXPOvVb6wELB9DkO33r2wHx8uJI=",
"dev": true,
"requires": {
- "is-directory": "0.3.1",
- "js-yaml": "3.7.0",
- "minimist": "1.2.0",
- "object-assign": "4.1.1",
- "os-homedir": "1.0.2",
- "parse-json": "2.2.0",
- "require-from-string": "1.2.1"
+ "is-directory": "^0.3.1",
+ "js-yaml": "^3.4.3",
+ "minimist": "^1.2.0",
+ "object-assign": "^4.1.0",
+ "os-homedir": "^1.0.1",
+ "parse-json": "^2.2.0",
+ "require-from-string": "^1.1.0"
},
"dependencies": {
"minimist": {
@@ -1689,8 +1713,8 @@
"integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=",
"dev": true,
"requires": {
- "bn.js": "4.11.8",
- "elliptic": "6.4.0"
+ "bn.js": "^4.1.0",
+ "elliptic": "^6.0.0"
}
},
"create-error-class": {
@@ -1699,7 +1723,7 @@
"integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=",
"dev": true,
"requires": {
- "capture-stack-trace": "1.0.0"
+ "capture-stack-trace": "^1.0.0"
}
},
"create-hash": {
@@ -1708,10 +1732,10 @@
"integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=",
"dev": true,
"requires": {
- "cipher-base": "1.0.4",
- "inherits": "2.0.3",
- "ripemd160": "2.0.1",
- "sha.js": "2.4.9"
+ "cipher-base": "^1.0.1",
+ "inherits": "^2.0.1",
+ "ripemd160": "^2.0.0",
+ "sha.js": "^2.4.0"
}
},
"create-hmac": {
@@ -1720,12 +1744,12 @@
"integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=",
"dev": true,
"requires": {
- "cipher-base": "1.0.4",
- "create-hash": "1.1.3",
- "inherits": "2.0.3",
- "ripemd160": "2.0.1",
- "safe-buffer": "5.0.1",
- "sha.js": "2.4.9"
+ "cipher-base": "^1.0.3",
+ "create-hash": "^1.1.0",
+ "inherits": "^2.0.1",
+ "ripemd160": "^2.0.0",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
}
},
"cross-spawn": {
@@ -1734,8 +1758,8 @@
"integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=",
"dev": true,
"requires": {
- "lru-cache": "4.1.0",
- "which": "1.2.14"
+ "lru-cache": "^4.0.1",
+ "which": "^1.2.9"
}
},
"cross-spawn-async": {
@@ -1744,8 +1768,8 @@
"integrity": "sha1-hF/wwINKPe2dFg2sptOQkGuyiMw=",
"dev": true,
"requires": {
- "lru-cache": "4.1.0",
- "which": "1.2.14"
+ "lru-cache": "^4.0.0",
+ "which": "^1.2.8"
}
},
"crossvent": {
@@ -1753,7 +1777,7 @@
"resolved": "https://registry.npmjs.org/crossvent/-/crossvent-1.5.4.tgz",
"integrity": "sha1-2ixPj0DJR4JRe/K+7BBEFIGUq5I=",
"requires": {
- "custom-event": "1.0.1"
+ "custom-event": "1.0.0"
}
},
"cryptiles": {
@@ -1762,7 +1786,7 @@
"integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=",
"dev": true,
"requires": {
- "boom": "2.10.1"
+ "boom": "2.x.x"
}
},
"crypto-browserify": {
@@ -1771,17 +1795,17 @@
"integrity": "sha1-OWz58xN/A+S45TLFj2mCVOAPgOw=",
"dev": true,
"requires": {
- "browserify-cipher": "1.0.0",
- "browserify-sign": "4.0.4",
- "create-ecdh": "4.0.0",
- "create-hash": "1.1.3",
- "create-hmac": "1.1.6",
- "diffie-hellman": "5.0.2",
- "inherits": "2.0.3",
- "pbkdf2": "3.0.14",
- "public-encrypt": "4.0.0",
- "randombytes": "2.0.5",
- "randomfill": "1.0.3"
+ "browserify-cipher": "^1.0.0",
+ "browserify-sign": "^4.0.0",
+ "create-ecdh": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "create-hmac": "^1.1.0",
+ "diffie-hellman": "^5.0.0",
+ "inherits": "^2.0.1",
+ "pbkdf2": "^3.0.3",
+ "public-encrypt": "^4.0.0",
+ "randombytes": "^2.0.0",
+ "randomfill": "^1.0.3"
}
},
"crypto-random-string": {
@@ -1802,20 +1826,20 @@
"integrity": "sha1-Xy7pid0y7dkHcX+VMxdlYWCZnBs=",
"dev": true,
"requires": {
- "babel-code-frame": "6.22.0",
- "css-selector-tokenizer": "0.7.0",
- "cssnano": "3.10.0",
- "icss-utils": "2.1.0",
- "loader-utils": "1.1.0",
- "lodash.camelcase": "4.3.0",
- "object-assign": "4.1.1",
- "postcss": "5.2.18",
- "postcss-modules-extract-imports": "1.1.0",
- "postcss-modules-local-by-default": "1.2.0",
- "postcss-modules-scope": "1.1.0",
- "postcss-modules-values": "1.3.0",
- "postcss-value-parser": "3.3.0",
- "source-list-map": "2.0.0"
+ "babel-code-frame": "^6.11.0",
+ "css-selector-tokenizer": "^0.7.0",
+ "cssnano": ">=2.6.1 <4",
+ "icss-utils": "^2.1.0",
+ "loader-utils": "^1.0.2",
+ "lodash.camelcase": "^4.3.0",
+ "object-assign": "^4.0.1",
+ "postcss": "^5.0.6",
+ "postcss-modules-extract-imports": "^1.0.0",
+ "postcss-modules-local-by-default": "^1.0.1",
+ "postcss-modules-scope": "^1.0.0",
+ "postcss-modules-values": "^1.1.0",
+ "postcss-value-parser": "^3.3.0",
+ "source-list-map": "^2.0.0"
}
},
"css-parse": {
@@ -1830,10 +1854,10 @@
"integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
"dev": true,
"requires": {
- "boolbase": "1.0.0",
- "css-what": "2.1.0",
+ "boolbase": "~1.0.0",
+ "css-what": "2.1",
"domutils": "1.5.1",
- "nth-check": "1.0.1"
+ "nth-check": "~1.0.1"
}
},
"css-selector-tokenizer": {
@@ -1842,9 +1866,9 @@
"integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=",
"dev": true,
"requires": {
- "cssesc": "0.1.0",
- "fastparse": "1.1.1",
- "regexpu-core": "1.0.0"
+ "cssesc": "^0.1.0",
+ "fastparse": "^1.1.1",
+ "regexpu-core": "^1.0.0"
}
},
"css-what": {
@@ -1859,7 +1883,7 @@
"integrity": "sha1-pmAt/34EqDBtwNuaVR6S6LVmKtg=",
"dev": true,
"requires": {
- "through": "2.3.8"
+ "through": "X.X.X"
}
},
"cssesc": {
@@ -1874,38 +1898,38 @@
"integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=",
"dev": true,
"requires": {
- "autoprefixer": "6.7.7",
- "decamelize": "1.2.0",
- "defined": "1.0.0",
- "has": "1.0.1",
- "object-assign": "4.1.1",
- "postcss": "5.2.18",
- "postcss-calc": "5.3.1",
- "postcss-colormin": "2.2.2",
- "postcss-convert-values": "2.6.1",
- "postcss-discard-comments": "2.0.4",
- "postcss-discard-duplicates": "2.1.0",
- "postcss-discard-empty": "2.1.0",
- "postcss-discard-overridden": "0.1.1",
- "postcss-discard-unused": "2.2.3",
- "postcss-filter-plugins": "2.0.2",
- "postcss-merge-idents": "2.1.7",
- "postcss-merge-longhand": "2.0.2",
- "postcss-merge-rules": "2.1.2",
- "postcss-minify-font-values": "1.0.5",
- "postcss-minify-gradients": "1.0.5",
- "postcss-minify-params": "1.2.2",
- "postcss-minify-selectors": "2.1.1",
- "postcss-normalize-charset": "1.1.1",
- "postcss-normalize-url": "3.0.8",
- "postcss-ordered-values": "2.2.3",
- "postcss-reduce-idents": "2.4.0",
- "postcss-reduce-initial": "1.0.1",
- "postcss-reduce-transforms": "1.0.4",
- "postcss-svgo": "2.1.6",
- "postcss-unique-selectors": "2.0.2",
- "postcss-value-parser": "3.3.0",
- "postcss-zindex": "2.2.0"
+ "autoprefixer": "^6.3.1",
+ "decamelize": "^1.1.2",
+ "defined": "^1.0.0",
+ "has": "^1.0.1",
+ "object-assign": "^4.0.1",
+ "postcss": "^5.0.14",
+ "postcss-calc": "^5.2.0",
+ "postcss-colormin": "^2.1.8",
+ "postcss-convert-values": "^2.3.4",
+ "postcss-discard-comments": "^2.0.4",
+ "postcss-discard-duplicates": "^2.0.1",
+ "postcss-discard-empty": "^2.0.1",
+ "postcss-discard-overridden": "^0.1.1",
+ "postcss-discard-unused": "^2.2.1",
+ "postcss-filter-plugins": "^2.0.0",
+ "postcss-merge-idents": "^2.1.5",
+ "postcss-merge-longhand": "^2.0.1",
+ "postcss-merge-rules": "^2.0.3",
+ "postcss-minify-font-values": "^1.0.2",
+ "postcss-minify-gradients": "^1.0.1",
+ "postcss-minify-params": "^1.0.4",
+ "postcss-minify-selectors": "^2.0.4",
+ "postcss-normalize-charset": "^1.1.0",
+ "postcss-normalize-url": "^3.0.7",
+ "postcss-ordered-values": "^2.1.0",
+ "postcss-reduce-idents": "^2.2.2",
+ "postcss-reduce-initial": "^1.0.0",
+ "postcss-reduce-transforms": "^1.0.3",
+ "postcss-svgo": "^2.1.1",
+ "postcss-unique-selectors": "^2.0.2",
+ "postcss-value-parser": "^3.2.3",
+ "postcss-zindex": "^2.0.1"
}
},
"csso": {
@@ -1914,8 +1938,8 @@
"integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=",
"dev": true,
"requires": {
- "clap": "1.2.3",
- "source-map": "0.5.6"
+ "clap": "^1.0.9",
+ "source-map": "^0.5.3"
}
},
"currently-unhandled": {
@@ -1924,7 +1948,7 @@
"integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
"dev": true,
"requires": {
- "array-find-index": "1.0.2"
+ "array-find-index": "^1.0.1"
}
},
"custom-event": {
@@ -1938,7 +1962,7 @@
"integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
"dev": true,
"requires": {
- "assert-plus": "1.0.0"
+ "assert-plus": "^1.0.0"
},
"dependencies": {
"assert-plus": {
@@ -1982,7 +2006,7 @@
"integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=",
"dev": true,
"requires": {
- "strip-bom": "2.0.0"
+ "strip-bom": "^2.0.0"
}
},
"defined": {
@@ -1997,13 +2021,13 @@
"integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=",
"dev": true,
"requires": {
- "globby": "5.0.0",
- "is-path-cwd": "1.0.0",
- "is-path-in-cwd": "1.0.0",
- "object-assign": "4.1.1",
- "pify": "2.3.0",
- "pinkie-promise": "2.0.1",
- "rimraf": "2.6.1"
+ "globby": "^5.0.0",
+ "is-path-cwd": "^1.0.0",
+ "is-path-in-cwd": "^1.0.0",
+ "object-assign": "^4.0.1",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0",
+ "rimraf": "^2.2.8"
}
},
"delayed-stream": {
@@ -2036,8 +2060,8 @@
"integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=",
"dev": true,
"requires": {
- "inherits": "2.0.3",
- "minimalistic-assert": "1.0.0"
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
}
},
"destroy": {
@@ -2052,7 +2076,7 @@
"integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
"dev": true,
"requires": {
- "repeating": "2.0.1"
+ "repeating": "^2.0.0"
}
},
"detect-node": {
@@ -2079,9 +2103,9 @@
"integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=",
"dev": true,
"requires": {
- "bn.js": "4.11.8",
- "miller-rabin": "4.0.1",
- "randombytes": "2.0.5"
+ "bn.js": "^4.1.0",
+ "miller-rabin": "^4.0.0",
+ "randombytes": "^2.0.0"
}
},
"directory-encoder": {
@@ -2090,9 +2114,9 @@
"integrity": "sha1-WbTiqk8lQi9sY7UntGL14tDdLFg=",
"dev": true,
"requires": {
- "fs-extra": "0.23.1",
- "handlebars": "1.3.0",
- "img-stats": "0.5.2"
+ "fs-extra": "^0.23.1",
+ "handlebars": "^1.3.0",
+ "img-stats": "^0.5.2"
},
"dependencies": {
"fs-extra": {
@@ -2101,10 +2125,10 @@
"integrity": "sha1-ZhHbpq3yq43Jxp+rN83fiBgVfj0=",
"dev": true,
"requires": {
- "graceful-fs": "4.1.11",
- "jsonfile": "2.4.0",
- "path-is-absolute": "1.0.1",
- "rimraf": "2.6.1"
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^2.1.0",
+ "path-is-absolute": "^1.0.0",
+ "rimraf": "^2.2.8"
}
},
"jsonfile": {
@@ -2113,7 +2137,7 @@
"integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
"dev": true,
"requires": {
- "graceful-fs": "4.1.11"
+ "graceful-fs": "^4.1.6"
}
}
}
@@ -2124,7 +2148,7 @@
"integrity": "sha1-pF71cnuJDJv/5tfIduexnLDhfzs=",
"dev": true,
"requires": {
- "utila": "0.3.3"
+ "utila": "~0.3"
},
"dependencies": {
"utila": {
@@ -2141,10 +2165,10 @@
"integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=",
"dev": true,
"requires": {
- "custom-event": "1.0.1",
- "ent": "2.2.0",
- "extend": "3.0.1",
- "void-elements": "2.0.1"
+ "custom-event": "~1.0.0",
+ "ent": "~2.2.0",
+ "extend": "^3.0.0",
+ "void-elements": "^2.0.0"
}
},
"dom-serializer": {
@@ -2153,8 +2177,8 @@
"integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=",
"dev": true,
"requires": {
- "domelementtype": "1.1.3",
- "entities": "1.1.1"
+ "domelementtype": "~1.1.1",
+ "entities": "~1.1.1"
},
"dependencies": {
"domelementtype": {
@@ -2183,7 +2207,7 @@
"integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=",
"dev": true,
"requires": {
- "domelementtype": "1.3.0"
+ "domelementtype": "1"
}
},
"domutils": {
@@ -2192,8 +2216,8 @@
"integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
"dev": true,
"requires": {
- "dom-serializer": "0.1.0",
- "domelementtype": "1.3.0"
+ "dom-serializer": "0",
+ "domelementtype": "1"
}
},
"dot-prop": {
@@ -2202,7 +2226,7 @@
"integrity": "sha1-qEk/C3te7sglJbXHWH+n3nyoWcE=",
"dev": true,
"requires": {
- "is-obj": "1.0.1"
+ "is-obj": "^1.0.0"
}
},
"dragula": {
@@ -2227,7 +2251,7 @@
"dev": true,
"optional": true,
"requires": {
- "jsbn": "0.1.1"
+ "jsbn": "~0.1.0"
}
},
"ee-first": {
@@ -2248,13 +2272,13 @@
"integrity": "sha1-ELbxOHwDL+9gzFPlIRq/rim0L90=",
"dev": true,
"requires": {
- "body-parser": "1.17.2",
- "chalk": "1.1.3",
+ "body-parser": "1.15.2",
+ "chalk": "^1.1.3",
"express": "5.0.0-alpha.2",
- "lodash": "4.17.4",
- "minimist": "0.0.8",
- "protractor": "4.0.14",
- "q": "1.5.0",
+ "lodash": "4.16.4",
+ "minimist": "^1.2.0",
+ "protractor": "^4.0.9",
+ "q": "2.0.3",
"temp": "0.8.3"
},
"dependencies": {
@@ -2264,7 +2288,7 @@
"integrity": "sha1-5fHzkoxtlf2WVYw27D2dDeSm7Oo=",
"dev": true,
"requires": {
- "mime-types": "2.1.15",
+ "mime-types": "~2.1.6",
"negotiator": "0.5.3"
}
},
@@ -2319,33 +2343,33 @@
"integrity": "sha1-/VQXf2V7akxFQHJ3Au3Ry6o6asU=",
"dev": true,
"requires": {
- "accepts": "1.2.13",
+ "accepts": "~1.2.10",
"array-flatten": "1.1.0",
"content-disposition": "0.5.0",
- "content-type": "1.0.2",
+ "content-type": "~1.0.1",
"cookie": "0.1.3",
"cookie-signature": "1.0.6",
- "debug": "2.2.0",
- "depd": "1.0.1",
+ "debug": "~2.2.0",
+ "depd": "~1.0.1",
"escape-html": "1.0.2",
- "etag": "1.7.0",
+ "etag": "~1.7.0",
"finalhandler": "0.4.0",
"fresh": "0.3.0",
"merge-descriptors": "1.0.0",
- "methods": "1.1.2",
- "on-finished": "2.3.0",
- "parseurl": "1.3.1",
+ "methods": "~1.1.1",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.0",
"path-is-absolute": "1.0.0",
"path-to-regexp": "0.1.6",
- "proxy-addr": "1.0.10",
+ "proxy-addr": "~1.0.8",
"qs": "4.0.0",
- "range-parser": "1.0.3",
- "router": "1.1.5",
+ "range-parser": "~1.0.2",
+ "router": "~1.1.2",
"send": "0.13.0",
- "serve-static": "1.10.3",
- "type-is": "1.6.15",
+ "serve-static": "~1.10.0",
+ "type-is": "~1.6.4",
"utils-merge": "1.0.0",
- "vary": "1.0.1"
+ "vary": "~1.0.0"
}
},
"finalhandler": {
@@ -2354,10 +2378,10 @@
"integrity": "sha1-llpS2ejQXSuFdUhUH7ibU6JJfZs=",
"dev": true,
"requires": {
- "debug": "2.2.0",
+ "debug": "~2.2.0",
"escape-html": "1.0.2",
- "on-finished": "2.3.0",
- "unpipe": "1.0.0"
+ "on-finished": "~2.3.0",
+ "unpipe": "~1.0.0"
}
},
"fresh": {
@@ -2372,8 +2396,8 @@
"integrity": "sha1-GX4izevUGYWF6GlO9nhhl7ke2UI=",
"dev": true,
"requires": {
- "inherits": "2.0.3",
- "statuses": "1.2.1"
+ "inherits": "~2.0.1",
+ "statuses": "1"
}
},
"ipaddr.js": {
@@ -2424,21 +2448,21 @@
"integrity": "sha1-78Sod/rDoYKp3e0mzVhp9HYv0XI=",
"dev": true,
"requires": {
- "@types/jasmine": "2.5.38",
- "@types/node": "6.0.78",
- "@types/q": "0.0.32",
+ "@types/jasmine": "^2.5.36",
+ "@types/node": "^6.0.46",
+ "@types/q": "^0.0.32",
"@types/selenium-webdriver": "2.53.37",
"adm-zip": "0.4.7",
- "chalk": "1.1.3",
- "glob": "7.1.2",
+ "chalk": "^1.1.3",
+ "glob": "^7.0.3",
"jasmine": "2.4.1",
"jasminewd2": "0.0.10",
- "optimist": "0.6.1",
+ "optimist": "~0.6.0",
"q": "1.4.1",
- "saucelabs": "1.3.0",
+ "saucelabs": "~1.3.0",
"selenium-webdriver": "2.53.3",
- "source-map-support": "0.4.15",
- "webdriver-manager": "10.3.0"
+ "source-map-support": "~0.4.0",
+ "webdriver-manager": "^10.3.0"
},
"dependencies": {
"minimist": {
@@ -2459,16 +2483,16 @@
"integrity": "sha1-mTFFiKCx2+aIxEHXQojGyxh1+os=",
"dev": true,
"requires": {
- "adm-zip": "0.4.7",
- "chalk": "1.1.3",
- "del": "2.2.2",
- "glob": "7.1.2",
- "ini": "1.3.4",
- "minimist": "1.2.0",
- "q": "1.4.1",
- "request": "2.81.0",
- "rimraf": "2.6.1",
- "semver": "5.3.0"
+ "adm-zip": "^0.4.7",
+ "chalk": "^1.1.1",
+ "del": "^2.2.0",
+ "glob": "^7.0.3",
+ "ini": "^1.3.4",
+ "minimist": "^1.2.0",
+ "q": "^1.4.1",
+ "request": "^2.78.0",
+ "rimraf": "^2.5.2",
+ "semver": "^5.3.0"
}
}
}
@@ -2479,7 +2503,7 @@
"integrity": "sha1-DUCoL4Afw1VWfS7LZe/j8HfxIcU=",
"dev": true,
"requires": {
- "forwarded": "0.1.0",
+ "forwarded": "~0.1.0",
"ipaddr.js": "1.0.5"
}
},
@@ -2501,8 +2525,8 @@
"integrity": "sha1-zlpuzTEB/tXsCYJ9rCKpwpv7BTU=",
"dev": true,
"requires": {
- "escape-html": "1.0.3",
- "parseurl": "1.3.1",
+ "escape-html": "~1.0.3",
+ "parseurl": "~1.3.1",
"send": "0.13.2"
},
"dependencies": {
@@ -2524,18 +2548,18 @@
"integrity": "sha1-dl52B8gFVFK7pvCwUllTUJhgNt4=",
"dev": true,
"requires": {
- "debug": "2.2.0",
- "depd": "1.1.1",
- "destroy": "1.0.4",
- "escape-html": "1.0.3",
- "etag": "1.7.0",
+ "debug": "~2.2.0",
+ "depd": "~1.1.0",
+ "destroy": "~1.0.4",
+ "escape-html": "~1.0.3",
+ "etag": "~1.7.0",
"fresh": "0.3.0",
- "http-errors": "1.3.1",
+ "http-errors": "~1.3.1",
"mime": "1.3.4",
"ms": "0.7.1",
- "on-finished": "2.3.0",
- "range-parser": "1.0.3",
- "statuses": "1.2.1"
+ "on-finished": "~2.3.0",
+ "range-parser": "~1.0.3",
+ "statuses": "~1.2.1"
}
}
}
@@ -2560,13 +2584,13 @@
"integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=",
"dev": true,
"requires": {
- "bn.js": "4.11.8",
- "brorand": "1.1.0",
- "hash.js": "1.1.3",
- "hmac-drbg": "1.0.1",
- "inherits": "2.0.3",
- "minimalistic-assert": "1.0.0",
- "minimalistic-crypto-utils": "1.0.1"
+ "bn.js": "^4.4.0",
+ "brorand": "^1.0.1",
+ "hash.js": "^1.0.0",
+ "hmac-drbg": "^1.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.0"
}
},
"ember-cli-normalize-entity-name": {
@@ -2575,7 +2599,7 @@
"integrity": "sha1-CxT3vLxZmqEXtf3cgeT9A8S61bc=",
"dev": true,
"requires": {
- "silent-error": "1.1.0"
+ "silent-error": "^1.0.0"
}
},
"ember-cli-string-utils": {
@@ -2690,10 +2714,10 @@
"integrity": "sha1-lQlk7MfwMypCMhtnOzjcj/FVNbM=",
"dev": true,
"requires": {
- "graceful-fs": "4.1.11",
- "memory-fs": "0.4.1",
- "object-assign": "4.1.1",
- "tapable": "0.2.8"
+ "graceful-fs": "^4.1.2",
+ "memory-fs": "^0.4.0",
+ "object-assign": "^4.0.1",
+ "tapable": "^0.2.5"
}
},
"ensure-posix-path": {
@@ -2720,7 +2744,7 @@
"integrity": "sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=",
"dev": true,
"requires": {
- "prr": "0.0.0"
+ "prr": "~0.0.0"
}
},
"error-ex": {
@@ -2729,7 +2753,7 @@
"integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=",
"dev": true,
"requires": {
- "is-arrayish": "0.2.1"
+ "is-arrayish": "^0.2.1"
}
},
"es6-promise": {
@@ -2738,6 +2762,23 @@
"integrity": "sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y=",
"dev": true
},
+ "es6-promisify": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz",
+ "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=",
+ "dev": true,
+ "requires": {
+ "es6-promise": "^4.0.3"
+ },
+ "dependencies": {
+ "es6-promise": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz",
+ "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==",
+ "dev": true
+ }
+ }
+ },
"escape-html": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
@@ -2786,7 +2827,7 @@
"integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=",
"dev": true,
"requires": {
- "original": "1.0.0"
+ "original": ">=0.0.5"
}
},
"evp_bytestokey": {
@@ -2795,8 +2836,8 @@
"integrity": "sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI=",
"dev": true,
"requires": {
- "md5.js": "1.3.4",
- "safe-buffer": "5.1.1"
+ "md5.js": "^1.3.4",
+ "safe-buffer": "^5.1.1"
},
"dependencies": {
"safe-buffer": {
@@ -2813,12 +2854,12 @@
"integrity": "sha1-TrZGejaglfq7KXD/nV4/t7zm68M=",
"dev": true,
"requires": {
- "cross-spawn-async": "2.2.5",
- "is-stream": "1.1.0",
- "npm-run-path": "1.0.0",
- "object-assign": "4.1.1",
- "path-key": "1.0.0",
- "strip-eof": "1.0.0"
+ "cross-spawn-async": "^2.1.1",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^1.0.0",
+ "object-assign": "^4.0.1",
+ "path-key": "^1.0.0",
+ "strip-eof": "^1.0.0"
}
},
"exit": {
@@ -2833,9 +2874,9 @@
"integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=",
"dev": true,
"requires": {
- "array-slice": "0.2.3",
- "array-unique": "0.2.1",
- "braces": "0.1.5"
+ "array-slice": "^0.2.3",
+ "array-unique": "^0.2.1",
+ "braces": "^0.1.2"
},
"dependencies": {
"braces": {
@@ -2844,7 +2885,7 @@
"integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=",
"dev": true,
"requires": {
- "expand-range": "0.1.1"
+ "expand-range": "^0.1.0"
}
},
"expand-range": {
@@ -2853,8 +2894,8 @@
"integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=",
"dev": true,
"requires": {
- "is-number": "0.1.1",
- "repeat-string": "0.2.2"
+ "is-number": "^0.1.1",
+ "repeat-string": "^0.2.2"
}
},
"is-number": {
@@ -2877,7 +2918,7 @@
"integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
"dev": true,
"requires": {
- "is-posix-bracket": "0.1.1"
+ "is-posix-bracket": "^0.1.0"
}
},
"expand-range": {
@@ -2886,7 +2927,7 @@
"integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
"dev": true,
"requires": {
- "fill-range": "2.2.3"
+ "fill-range": "^2.1.0"
}
},
"exports-loader": {
@@ -2895,8 +2936,8 @@
"integrity": "sha1-1w/GEhl1s1/BKDDPUnVL4nQPyIY=",
"dev": true,
"requires": {
- "loader-utils": "1.1.0",
- "source-map": "0.5.6"
+ "loader-utils": "^1.0.2",
+ "source-map": "0.5.x"
}
},
"express": {
@@ -2905,34 +2946,34 @@
"integrity": "sha1-rxB/wUhQRFfy3Kmm8lcdcSm5ezU=",
"dev": true,
"requires": {
- "accepts": "1.3.3",
+ "accepts": "~1.3.3",
"array-flatten": "1.1.1",
"content-disposition": "0.5.2",
- "content-type": "1.0.2",
+ "content-type": "~1.0.2",
"cookie": "0.3.1",
"cookie-signature": "1.0.6",
"debug": "2.6.1",
- "depd": "1.1.0",
- "encodeurl": "1.0.1",
- "escape-html": "1.0.3",
- "etag": "1.8.0",
- "finalhandler": "1.0.3",
+ "depd": "~1.1.0",
+ "encodeurl": "~1.0.1",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.0",
+ "finalhandler": "~1.0.0",
"fresh": "0.5.0",
"merge-descriptors": "1.0.1",
- "methods": "1.1.2",
- "on-finished": "2.3.0",
- "parseurl": "1.3.1",
+ "methods": "~1.1.2",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.1",
"path-to-regexp": "0.1.7",
- "proxy-addr": "1.1.4",
+ "proxy-addr": "~1.1.3",
"qs": "6.4.0",
- "range-parser": "1.2.0",
+ "range-parser": "~1.2.0",
"send": "0.15.1",
"serve-static": "1.12.1",
"setprototypeof": "1.0.3",
- "statuses": "1.3.1",
- "type-is": "1.6.15",
+ "statuses": "~1.3.1",
+ "type-is": "~1.6.14",
"utils-merge": "1.0.0",
- "vary": "1.1.1"
+ "vary": "~1.1.0"
},
"dependencies": {
"debug": {
@@ -2963,18 +3004,18 @@
"dev": true,
"requires": {
"debug": "2.6.1",
- "depd": "1.1.0",
- "destroy": "1.0.4",
- "encodeurl": "1.0.1",
- "escape-html": "1.0.3",
- "etag": "1.8.0",
+ "depd": "~1.1.0",
+ "destroy": "~1.0.4",
+ "encodeurl": "~1.0.1",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.0",
"fresh": "0.5.0",
- "http-errors": "1.6.1",
+ "http-errors": "~1.6.1",
"mime": "1.3.4",
"ms": "0.7.2",
- "on-finished": "2.3.0",
- "range-parser": "1.2.0",
- "statuses": "1.3.1"
+ "on-finished": "~2.3.0",
+ "range-parser": "~1.2.0",
+ "statuses": "~1.3.1"
}
}
}
@@ -2991,9 +3032,9 @@
"integrity": "sha1-PQJqIbf5W1cmOH1CAKwWDTcsO0g=",
"dev": true,
"requires": {
- "chardet": "0.4.2",
- "iconv-lite": "0.4.19",
- "tmp": "0.0.33"
+ "chardet": "^0.4.0",
+ "iconv-lite": "^0.4.17",
+ "tmp": "^0.0.33"
},
"dependencies": {
"tmp": {
@@ -3002,7 +3043,7 @@
"integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
"dev": true,
"requires": {
- "os-tmpdir": "1.0.2"
+ "os-tmpdir": "~1.0.2"
}
}
}
@@ -3013,7 +3054,7 @@
"integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
"dev": true,
"requires": {
- "is-extglob": "1.0.0"
+ "is-extglob": "^1.0.0"
}
},
"extract-text-webpack-plugin": {
@@ -3022,10 +3063,33 @@
"integrity": "sha1-dW7076gVXDaBgz+8NNpTuUF0bWw=",
"dev": true,
"requires": {
- "async": "2.4.1",
- "loader-utils": "1.1.0",
- "schema-utils": "0.3.0",
- "webpack-sources": "1.1.0"
+ "async": "^2.1.2",
+ "loader-utils": "^1.0.2",
+ "schema-utils": "^0.3.0",
+ "webpack-sources": "^1.0.1"
+ }
+ },
+ "extract-zip": {
+ "version": "1.6.7",
+ "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz",
+ "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=",
+ "dev": true,
+ "requires": {
+ "concat-stream": "1.6.2",
+ "debug": "2.6.9",
+ "mkdirp": "0.5.1",
+ "yauzl": "2.4.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
}
},
"extsprintf": {
@@ -3058,7 +3122,16 @@
"integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=",
"dev": true,
"requires": {
- "websocket-driver": "0.7.0"
+ "websocket-driver": ">=0.5.1"
+ }
+ },
+ "fd-slicer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz",
+ "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=",
+ "dev": true,
+ "requires": {
+ "pend": "~1.2.0"
}
},
"figures": {
@@ -3067,7 +3140,7 @@
"integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
"dev": true,
"requires": {
- "escape-string-regexp": "1.0.5"
+ "escape-string-regexp": "^1.0.5"
}
},
"file-loader": {
@@ -3076,7 +3149,7 @@
"integrity": "sha1-gVA0EZiR/GRB+1pkwRvJPCLd2EI=",
"dev": true,
"requires": {
- "loader-utils": "1.1.0"
+ "loader-utils": "^1.0.2"
}
},
"filename-regex": {
@@ -3091,8 +3164,8 @@
"integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=",
"dev": true,
"requires": {
- "glob": "7.1.2",
- "minimatch": "3.0.4"
+ "glob": "^7.0.3",
+ "minimatch": "^3.0.3"
}
},
"fill-range": {
@@ -3101,11 +3174,11 @@
"integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=",
"dev": true,
"requires": {
- "is-number": "2.1.0",
- "isobject": "2.1.0",
- "randomatic": "1.1.6",
- "repeat-element": "1.1.2",
- "repeat-string": "1.6.1"
+ "is-number": "^2.1.0",
+ "isobject": "^2.0.0",
+ "randomatic": "^1.1.3",
+ "repeat-element": "^1.1.2",
+ "repeat-string": "^1.5.2"
}
},
"finalhandler": {
@@ -3115,12 +3188,12 @@
"dev": true,
"requires": {
"debug": "2.6.7",
- "encodeurl": "1.0.1",
- "escape-html": "1.0.3",
- "on-finished": "2.3.0",
- "parseurl": "1.3.1",
- "statuses": "1.3.1",
- "unpipe": "1.0.0"
+ "encodeurl": "~1.0.1",
+ "escape-html": "~1.0.3",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.1",
+ "statuses": "~1.3.1",
+ "unpipe": "~1.0.0"
},
"dependencies": {
"debug": {
@@ -3140,8 +3213,8 @@
"integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
"dev": true,
"requires": {
- "path-exists": "2.1.0",
- "pinkie-promise": "2.0.1"
+ "path-exists": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
}
},
"findup-sync": {
@@ -3150,7 +3223,7 @@
"integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=",
"dev": true,
"requires": {
- "glob": "5.0.15"
+ "glob": "~5.0.0"
},
"dependencies": {
"glob": {
@@ -3159,11 +3232,11 @@
"integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
"dev": true,
"requires": {
- "inflight": "1.0.6",
- "inherits": "2.0.3",
- "minimatch": "3.0.4",
- "once": "1.4.0",
- "path-is-absolute": "1.0.1"
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "2 || 3",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
}
}
}
@@ -3191,7 +3264,7 @@
"integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
"dev": true,
"requires": {
- "for-in": "1.0.2"
+ "for-in": "^1.0.1"
}
},
"forever-agent": {
@@ -3206,9 +3279,9 @@
"integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=",
"dev": true,
"requires": {
- "asynckit": "0.4.0",
- "combined-stream": "1.0.5",
- "mime-types": "2.1.15"
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.5",
+ "mime-types": "^2.1.12"
}
},
"forwarded": {
@@ -3229,7 +3302,7 @@
"integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=",
"dev": true,
"requires": {
- "null-check": "1.0.0"
+ "null-check": "^1.0.0"
}
},
"fs-extra": {
@@ -3238,9 +3311,9 @@
"integrity": "sha1-+RcExT0bRh+JNFKwwwfZmXZHq2s=",
"dev": true,
"requires": {
- "graceful-fs": "4.1.11",
- "jsonfile": "4.0.0",
- "universalify": "0.1.1"
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
}
},
"fs.realpath": {
@@ -3256,8 +3329,8 @@
"dev": true,
"optional": true,
"requires": {
- "nan": "2.6.2",
- "node-pre-gyp": "0.6.33"
+ "nan": "^2.3.0",
+ "node-pre-gyp": "^0.6.29"
},
"dependencies": {
"abbrev": {
@@ -3289,8 +3362,8 @@
"dev": true,
"optional": true,
"requires": {
- "delegates": "1.0.0",
- "readable-stream": "2.2.2"
+ "delegates": "^1.0.0",
+ "readable-stream": "^2.0.0 || ^1.1.13"
}
},
"asn1": {
@@ -3334,7 +3407,7 @@
"dev": true,
"optional": true,
"requires": {
- "tweetnacl": "0.14.5"
+ "tweetnacl": "^0.14.3"
}
},
"block-stream": {
@@ -3342,7 +3415,7 @@
"bundled": true,
"dev": true,
"requires": {
- "inherits": "2.0.3"
+ "inherits": "~2.0.0"
}
},
"boom": {
@@ -3350,7 +3423,7 @@
"bundled": true,
"dev": true,
"requires": {
- "hoek": "2.16.3"
+ "hoek": "2.x.x"
}
},
"brace-expansion": {
@@ -3358,7 +3431,7 @@
"bundled": true,
"dev": true,
"requires": {
- "balanced-match": "0.4.2",
+ "balanced-match": "^0.4.1",
"concat-map": "0.0.1"
}
},
@@ -3379,11 +3452,11 @@
"dev": true,
"optional": true,
"requires": {
- "ansi-styles": "2.2.1",
- "escape-string-regexp": "1.0.5",
- "has-ansi": "2.0.0",
- "strip-ansi": "3.0.1",
- "supports-color": "2.0.0"
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
}
},
"code-point-at": {
@@ -3396,7 +3469,7 @@
"bundled": true,
"dev": true,
"requires": {
- "delayed-stream": "1.0.0"
+ "delayed-stream": "~1.0.0"
}
},
"commander": {
@@ -3405,7 +3478,7 @@
"dev": true,
"optional": true,
"requires": {
- "graceful-readlink": "1.0.1"
+ "graceful-readlink": ">= 1.0.0"
}
},
"concat-map": {
@@ -3429,7 +3502,7 @@
"dev": true,
"optional": true,
"requires": {
- "boom": "2.10.1"
+ "boom": "2.x.x"
}
},
"dashdash": {
@@ -3438,7 +3511,7 @@
"dev": true,
"optional": true,
"requires": {
- "assert-plus": "1.0.0"
+ "assert-plus": "^1.0.0"
},
"dependencies": {
"assert-plus": {
@@ -3481,7 +3554,7 @@
"dev": true,
"optional": true,
"requires": {
- "jsbn": "0.1.1"
+ "jsbn": "~0.1.0"
}
},
"escape-string-regexp": {
@@ -3513,9 +3586,9 @@
"dev": true,
"optional": true,
"requires": {
- "asynckit": "0.4.0",
- "combined-stream": "1.0.5",
- "mime-types": "2.1.14"
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.5",
+ "mime-types": "^2.1.12"
}
},
"fs.realpath": {
@@ -3528,10 +3601,10 @@
"bundled": true,
"dev": true,
"requires": {
- "graceful-fs": "4.1.11",
- "inherits": "2.0.3",
- "mkdirp": "0.5.1",
- "rimraf": "2.5.4"
+ "graceful-fs": "^4.1.2",
+ "inherits": "~2.0.0",
+ "mkdirp": ">=0.5 0",
+ "rimraf": "2"
}
},
"fstream-ignore": {
@@ -3540,9 +3613,9 @@
"dev": true,
"optional": true,
"requires": {
- "fstream": "1.0.10",
- "inherits": "2.0.3",
- "minimatch": "3.0.3"
+ "fstream": "^1.0.0",
+ "inherits": "2",
+ "minimatch": "^3.0.0"
}
},
"gauge": {
@@ -3551,14 +3624,14 @@
"dev": true,
"optional": true,
"requires": {
- "aproba": "1.1.1",
- "console-control-strings": "1.1.0",
- "has-unicode": "2.0.1",
- "object-assign": "4.1.1",
- "signal-exit": "3.0.2",
- "string-width": "1.0.2",
- "strip-ansi": "3.0.1",
- "wide-align": "1.1.0"
+ "aproba": "^1.0.3",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.0",
+ "object-assign": "^4.1.0",
+ "signal-exit": "^3.0.0",
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wide-align": "^1.1.0"
}
},
"generate-function": {
@@ -3573,7 +3646,7 @@
"dev": true,
"optional": true,
"requires": {
- "is-property": "1.0.2"
+ "is-property": "^1.0.0"
}
},
"getpass": {
@@ -3582,7 +3655,7 @@
"dev": true,
"optional": true,
"requires": {
- "assert-plus": "1.0.0"
+ "assert-plus": "^1.0.0"
},
"dependencies": {
"assert-plus": {
@@ -3598,12 +3671,12 @@
"bundled": true,
"dev": true,
"requires": {
- "fs.realpath": "1.0.0",
- "inflight": "1.0.6",
- "inherits": "2.0.3",
- "minimatch": "3.0.3",
- "once": "1.4.0",
- "path-is-absolute": "1.0.1"
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.2",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
}
},
"graceful-fs": {
@@ -3623,10 +3696,10 @@
"dev": true,
"optional": true,
"requires": {
- "chalk": "1.1.3",
- "commander": "2.9.0",
- "is-my-json-valid": "2.15.0",
- "pinkie-promise": "2.0.1"
+ "chalk": "^1.1.1",
+ "commander": "^2.9.0",
+ "is-my-json-valid": "^2.12.4",
+ "pinkie-promise": "^2.0.0"
}
},
"has-ansi": {
@@ -3635,7 +3708,7 @@
"dev": true,
"optional": true,
"requires": {
- "ansi-regex": "2.1.1"
+ "ansi-regex": "^2.0.0"
}
},
"has-unicode": {
@@ -3650,10 +3723,10 @@
"dev": true,
"optional": true,
"requires": {
- "boom": "2.10.1",
- "cryptiles": "2.0.5",
- "hoek": "2.16.3",
- "sntp": "1.0.9"
+ "boom": "2.x.x",
+ "cryptiles": "2.x.x",
+ "hoek": "2.x.x",
+ "sntp": "1.x.x"
}
},
"hoek": {
@@ -3667,9 +3740,9 @@
"dev": true,
"optional": true,
"requires": {
- "assert-plus": "0.2.0",
- "jsprim": "1.3.1",
- "sshpk": "1.10.2"
+ "assert-plus": "^0.2.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
}
},
"inflight": {
@@ -3677,8 +3750,8 @@
"bundled": true,
"dev": true,
"requires": {
- "once": "1.4.0",
- "wrappy": "1.0.2"
+ "once": "^1.3.0",
+ "wrappy": "1"
}
},
"inherits": {
@@ -3697,7 +3770,7 @@
"bundled": true,
"dev": true,
"requires": {
- "number-is-nan": "1.0.1"
+ "number-is-nan": "^1.0.0"
}
},
"is-my-json-valid": {
@@ -3706,10 +3779,10 @@
"dev": true,
"optional": true,
"requires": {
- "generate-function": "2.0.0",
- "generate-object-property": "1.2.0",
- "jsonpointer": "4.0.1",
- "xtend": "4.0.1"
+ "generate-function": "^2.0.0",
+ "generate-object-property": "^1.1.0",
+ "jsonpointer": "^4.0.0",
+ "xtend": "^4.0.0"
}
},
"is-property": {
@@ -3741,7 +3814,7 @@
"dev": true,
"optional": true,
"requires": {
- "jsbn": "0.1.1"
+ "jsbn": "~0.1.0"
}
},
"jsbn": {
@@ -3789,7 +3862,7 @@
"bundled": true,
"dev": true,
"requires": {
- "mime-db": "1.26.0"
+ "mime-db": "~1.26.0"
}
},
"minimatch": {
@@ -3797,7 +3870,7 @@
"bundled": true,
"dev": true,
"requires": {
- "brace-expansion": "1.1.6"
+ "brace-expansion": "^1.0.0"
}
},
"minimist": {
@@ -3825,15 +3898,15 @@
"dev": true,
"optional": true,
"requires": {
- "mkdirp": "0.5.1",
- "nopt": "3.0.6",
- "npmlog": "4.0.2",
- "rc": "1.1.7",
- "request": "2.79.0",
- "rimraf": "2.5.4",
- "semver": "5.3.0",
- "tar": "2.2.1",
- "tar-pack": "3.3.0"
+ "mkdirp": "~0.5.1",
+ "nopt": "~3.0.6",
+ "npmlog": "^4.0.1",
+ "rc": "~1.1.6",
+ "request": "^2.79.0",
+ "rimraf": "~2.5.4",
+ "semver": "~5.3.0",
+ "tar": "~2.2.1",
+ "tar-pack": "~3.3.0"
}
},
"nopt": {
@@ -3842,7 +3915,7 @@
"dev": true,
"optional": true,
"requires": {
- "abbrev": "1.1.0"
+ "abbrev": "1"
}
},
"npmlog": {
@@ -3851,10 +3924,10 @@
"dev": true,
"optional": true,
"requires": {
- "are-we-there-yet": "1.1.2",
- "console-control-strings": "1.1.0",
- "gauge": "2.7.3",
- "set-blocking": "2.0.0"
+ "are-we-there-yet": "~1.1.2",
+ "console-control-strings": "~1.1.0",
+ "gauge": "~2.7.1",
+ "set-blocking": "~2.0.0"
}
},
"number-is-nan": {
@@ -3879,7 +3952,7 @@
"bundled": true,
"dev": true,
"requires": {
- "wrappy": "1.0.2"
+ "wrappy": "1"
}
},
"path-is-absolute": {
@@ -3899,7 +3972,7 @@
"dev": true,
"optional": true,
"requires": {
- "pinkie": "2.0.4"
+ "pinkie": "^2.0.0"
}
},
"process-nextick-args": {
@@ -3925,10 +3998,10 @@
"dev": true,
"optional": true,
"requires": {
- "deep-extend": "0.4.1",
- "ini": "1.3.4",
- "minimist": "1.2.0",
- "strip-json-comments": "2.0.1"
+ "deep-extend": "~0.4.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
},
"dependencies": {
"minimist": {
@@ -3945,13 +4018,13 @@
"dev": true,
"optional": true,
"requires": {
- "buffer-shims": "1.0.0",
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "1.0.0",
- "process-nextick-args": "1.0.7",
- "string_decoder": "0.10.31",
- "util-deprecate": "1.0.2"
+ "buffer-shims": "^1.0.0",
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~1.0.6",
+ "string_decoder": "~0.10.x",
+ "util-deprecate": "~1.0.1"
}
},
"request": {
@@ -3960,26 +4033,26 @@
"dev": true,
"optional": true,
"requires": {
- "aws-sign2": "0.6.0",
- "aws4": "1.6.0",
- "caseless": "0.11.0",
- "combined-stream": "1.0.5",
- "extend": "3.0.0",
- "forever-agent": "0.6.1",
- "form-data": "2.1.2",
- "har-validator": "2.0.6",
- "hawk": "3.1.3",
- "http-signature": "1.1.1",
- "is-typedarray": "1.0.0",
- "isstream": "0.1.2",
- "json-stringify-safe": "5.0.1",
- "mime-types": "2.1.14",
- "oauth-sign": "0.8.2",
- "qs": "6.3.1",
- "stringstream": "0.0.5",
- "tough-cookie": "2.3.2",
- "tunnel-agent": "0.4.3",
- "uuid": "3.0.1"
+ "aws-sign2": "~0.6.0",
+ "aws4": "^1.2.1",
+ "caseless": "~0.11.0",
+ "combined-stream": "~1.0.5",
+ "extend": "~3.0.0",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.1.1",
+ "har-validator": "~2.0.6",
+ "hawk": "~3.1.3",
+ "http-signature": "~1.1.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.7",
+ "oauth-sign": "~0.8.1",
+ "qs": "~6.3.0",
+ "stringstream": "~0.0.4",
+ "tough-cookie": "~2.3.0",
+ "tunnel-agent": "~0.4.1",
+ "uuid": "^3.0.0"
}
},
"rimraf": {
@@ -3987,7 +4060,7 @@
"bundled": true,
"dev": true,
"requires": {
- "glob": "7.1.1"
+ "glob": "^7.0.5"
}
},
"semver": {
@@ -4014,7 +4087,7 @@
"dev": true,
"optional": true,
"requires": {
- "hoek": "2.16.3"
+ "hoek": "2.x.x"
}
},
"sshpk": {
@@ -4023,15 +4096,15 @@
"dev": true,
"optional": true,
"requires": {
- "asn1": "0.2.3",
- "assert-plus": "1.0.0",
- "bcrypt-pbkdf": "1.0.1",
- "dashdash": "1.14.1",
- "ecc-jsbn": "0.1.1",
- "getpass": "0.1.6",
- "jodid25519": "1.0.2",
- "jsbn": "0.1.1",
- "tweetnacl": "0.14.5"
+ "asn1": "~0.2.3",
+ "assert-plus": "^1.0.0",
+ "bcrypt-pbkdf": "^1.0.0",
+ "dashdash": "^1.12.0",
+ "ecc-jsbn": "~0.1.1",
+ "getpass": "^0.1.1",
+ "jodid25519": "^1.0.0",
+ "jsbn": "~0.1.0",
+ "tweetnacl": "~0.14.0"
},
"dependencies": {
"assert-plus": {
@@ -4047,9 +4120,9 @@
"bundled": true,
"dev": true,
"requires": {
- "code-point-at": "1.1.0",
- "is-fullwidth-code-point": "1.0.0",
- "strip-ansi": "3.0.1"
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
}
},
"string_decoder": {
@@ -4068,7 +4141,7 @@
"bundled": true,
"dev": true,
"requires": {
- "ansi-regex": "2.1.1"
+ "ansi-regex": "^2.0.0"
}
},
"strip-json-comments": {
@@ -4088,9 +4161,9 @@
"bundled": true,
"dev": true,
"requires": {
- "block-stream": "0.0.9",
- "fstream": "1.0.10",
- "inherits": "2.0.3"
+ "block-stream": "*",
+ "fstream": "^1.0.2",
+ "inherits": "2"
}
},
"tar-pack": {
@@ -4099,14 +4172,14 @@
"dev": true,
"optional": true,
"requires": {
- "debug": "2.2.0",
- "fstream": "1.0.10",
- "fstream-ignore": "1.0.5",
- "once": "1.3.3",
- "readable-stream": "2.1.5",
- "rimraf": "2.5.4",
- "tar": "2.2.1",
- "uid-number": "0.0.6"
+ "debug": "~2.2.0",
+ "fstream": "~1.0.10",
+ "fstream-ignore": "~1.0.5",
+ "once": "~1.3.3",
+ "readable-stream": "~2.1.4",
+ "rimraf": "~2.5.1",
+ "tar": "~2.2.1",
+ "uid-number": "~0.0.6"
},
"dependencies": {
"once": {
@@ -4115,7 +4188,7 @@
"dev": true,
"optional": true,
"requires": {
- "wrappy": "1.0.2"
+ "wrappy": "1"
}
},
"readable-stream": {
@@ -4124,13 +4197,13 @@
"dev": true,
"optional": true,
"requires": {
- "buffer-shims": "1.0.0",
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "1.0.0",
- "process-nextick-args": "1.0.7",
- "string_decoder": "0.10.31",
- "util-deprecate": "1.0.2"
+ "buffer-shims": "^1.0.0",
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~1.0.6",
+ "string_decoder": "~0.10.x",
+ "util-deprecate": "~1.0.1"
}
}
}
@@ -4141,7 +4214,7 @@
"dev": true,
"optional": true,
"requires": {
- "punycode": "1.4.1"
+ "punycode": "^1.4.1"
}
},
"tunnel-agent": {
@@ -4188,7 +4261,7 @@
"dev": true,
"optional": true,
"requires": {
- "string-width": "1.0.2"
+ "string-width": "^1.0.1"
}
},
"wrappy": {
@@ -4210,10 +4283,10 @@
"integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=",
"dev": true,
"requires": {
- "graceful-fs": "4.1.11",
- "inherits": "2.0.3",
- "mkdirp": "0.5.1",
- "rimraf": "2.6.1"
+ "graceful-fs": "^4.1.2",
+ "inherits": "~2.0.0",
+ "mkdirp": ">=0.5 0",
+ "rimraf": "2"
}
},
"function-bind": {
@@ -4228,14 +4301,14 @@
"integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
"dev": true,
"requires": {
- "aproba": "1.1.2",
- "console-control-strings": "1.1.0",
- "has-unicode": "2.0.1",
- "object-assign": "4.1.1",
- "signal-exit": "3.0.2",
- "string-width": "1.0.2",
- "strip-ansi": "3.0.1",
- "wide-align": "1.1.2"
+ "aproba": "^1.0.3",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.0",
+ "object-assign": "^4.1.0",
+ "signal-exit": "^3.0.0",
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wide-align": "^1.1.0"
},
"dependencies": {
"is-fullwidth-code-point": {
@@ -4244,7 +4317,7 @@
"integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
"dev": true,
"requires": {
- "number-is-nan": "1.0.1"
+ "number-is-nan": "^1.0.0"
}
},
"string-width": {
@@ -4253,9 +4326,9 @@
"integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
"dev": true,
"requires": {
- "code-point-at": "1.1.0",
- "is-fullwidth-code-point": "1.0.0",
- "strip-ansi": "3.0.1"
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
}
}
}
@@ -4266,7 +4339,7 @@
"integrity": "sha1-hHIkZ3rbiHDWeSV+0ziP22HkAQU=",
"dev": true,
"requires": {
- "globule": "1.1.0"
+ "globule": "^1.0.0"
}
},
"get-caller-file": {
@@ -4293,7 +4366,7 @@
"integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
"dev": true,
"requires": {
- "assert-plus": "1.0.0"
+ "assert-plus"
<TRUNCATED>
[3/5] metron git commit: METRON-1671 Create PCAP UI (tiborm via
merrimanr) closes apache/metron#1103
Posted by rm...@apache.org.
http://git-wip-us.apache.org/repos/asf/metron/blob/d5eb56a9/metron-interface/metron-alerts/src/app/app-routing.module.ts
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/src/app/app-routing.module.ts b/metron-interface/metron-alerts/src/app/app-routing.module.ts
index 8357d66..56ad41c 100644
--- a/metron-interface/metron-alerts/src/app/app-routing.module.ts
+++ b/metron-interface/metron-alerts/src/app/app-routing.module.ts
@@ -26,7 +26,8 @@ const routes: Routes = [
{ path: 'alerts-list', loadChildren: 'app/alerts/alerts-list/alerts-list.module#AlertsListModule', canActivate: [AuthGuard]},
{ path: 'save-search', loadChildren: 'app/alerts/save-search/save-search.module#SaveSearchModule', canActivate: [AuthGuard]},
{ path: 'saved-searches', loadChildren: 'app/alerts/saved-searches/saved-searches.module.ts#SavedSearchesModule',
- canActivate: [AuthGuard]}
+ canActivate: [AuthGuard]},
+ { path: 'pcap', loadChildren: 'app/pcap/pcap.module#PcapModule', canActivate: [AuthGuard] }
];
@NgModule({
http://git-wip-us.apache.org/repos/asf/metron/blob/d5eb56a9/metron-interface/metron-alerts/src/app/app.component.html
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/src/app/app.component.html b/metron-interface/metron-alerts/src/app/app.component.html
index 8867a9b..1b992ca 100644
--- a/metron-interface/metron-alerts/src/app/app.component.html
+++ b/metron-interface/metron-alerts/src/app/app.component.html
@@ -16,6 +16,14 @@
<a class="" href="#">
<img alt="" src="../assets/images/logo.png" width="135" height="45">
</a>
+ <ul class="nav ml-4">
+ <li class="nav-item" routerLinkActive="active">
+ <a class="nav-link " routerLink="/alerts-list" routerLinkActive="active">Alerts</a>
+ </li>
+ <li class="nav-item" routerLinkActive="active">
+ <a class="nav-link" routerLink="/pcap" routerLinkActive="active">PCAP</a>
+ </li>
+ </ul>
<div class="logout ml-auto">Logged in as {{authService.currentUser}} - <span class="logout-link" (click)="authService.logout()">Logout</span></div>
</nav>
<div class="container-fluid">
http://git-wip-us.apache.org/repos/asf/metron/blob/d5eb56a9/metron-interface/metron-alerts/src/app/app.component.scss
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/src/app/app.component.scss b/metron-interface/metron-alerts/src/app/app.component.scss
index 8358e7f..8505ee8 100644
--- a/metron-interface/metron-alerts/src/app/app.component.scss
+++ b/metron-interface/metron-alerts/src/app/app.component.scss
@@ -27,6 +27,24 @@
max-height: 50px;
}
+.nav-link
+{
+ padding-bottom: 0;
+ padding-top: 0;
+ color: inherit;
+}
+
+.nav-item.active
+{
+ border-bottom: 3px solid #32abe2;
+ margin-bottom: 5px;
+}
+
+.nav-link.active
+{
+ color: #ffffff;
+}
+
.logout {
padding-left: 10px;
}
http://git-wip-us.apache.org/repos/asf/metron/blob/d5eb56a9/metron-interface/metron-alerts/src/app/app.module.ts
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/src/app/app.module.ts b/metron-interface/metron-alerts/src/app/app.module.ts
index 227eaab..82b4970 100644
--- a/metron-interface/metron-alerts/src/app/app.module.ts
+++ b/metron-interface/metron-alerts/src/app/app.module.ts
@@ -46,8 +46,7 @@ import {MetaAlertService} from './service/meta-alert.service';
import {MetaAlertsModule} from './alerts/meta-alerts/meta-alerts.module';
import {SearchService} from './service/search.service';
import { GlobalConfigService } from './service/global-config.service';
-
-
+import {PcapModule} from './pcap/pcap.module';
export function initConfig(config: ColumnNamesService) {
return () => config.list();
@@ -70,7 +69,8 @@ export function initConfig(config: ColumnNamesService) {
ConfigureRowsModule,
SaveSearchModule,
SavedSearchesModule,
- SwitchModule
+ SwitchModule,
+ PcapModule
],
providers: [{ provide: APP_INITIALIZER, useFactory: initConfig, deps: [ColumnNamesService], multi: true },
{ provide: DataSource, useClass: ElasticSearchLocalstorageImpl },
http://git-wip-us.apache.org/repos/asf/metron/blob/d5eb56a9/metron-interface/metron-alerts/src/app/pcap/model/pcap.request.ts
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/src/app/pcap/model/pcap.request.ts b/metron-interface/metron-alerts/src/app/pcap/model/pcap.request.ts
new file mode 100644
index 0000000..3a27714
--- /dev/null
+++ b/metron-interface/metron-alerts/src/app/pcap/model/pcap.request.ts
@@ -0,0 +1,29 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing software
+ * distributed under the License is distributed on an "AS IS" BASIS
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+export class PcapRequest {
+ startTimeMs: number = 0;
+ endTimeMs: number = 150000000000000000;
+ ipSrcAddr: string = '';
+ ipSrcPort: string = '';
+ ipDstAddr: string = '';
+ ipDstPort: string = '';
+ protocol: string = '';
+ packetFilter: string = '';
+ includeReverse: boolean = false;
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/metron/blob/d5eb56a9/metron-interface/metron-alerts/src/app/pcap/model/pdml.ts
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/src/app/pcap/model/pdml.ts b/metron-interface/metron-alerts/src/app/pcap/model/pdml.ts
new file mode 100644
index 0000000..97fc347
--- /dev/null
+++ b/metron-interface/metron-alerts/src/app/pcap/model/pdml.ts
@@ -0,0 +1,50 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing software
+ * distributed under the License is distributed on an "AS IS" BASIS
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+ export class PdmlField {
+ //public $: any[]
+ public name: string;
+ public fields?: PdmlField[]
+ public show: string;
+ public value: string;
+ public showname: string;
+}
+
+export class PdmlProto {
+ //public $: any
+ public name: string;
+ public showname: string;
+ public fields: PdmlField[]
+
+ public static findField(p: PdmlProto, name: string): PdmlField {
+ return p.fields.find(f => f['name'] == name)
+ }
+}
+
+
+export class PdmlPacket {
+ //public $: any
+ public name: string;
+ public protos: PdmlProto[]
+ public expanded: boolean = false
+}
+
+export class Pdml {
+ public name: string;
+ public packets: PdmlPacket[];
+}
http://git-wip-us.apache.org/repos/asf/metron/blob/d5eb56a9/metron-interface/metron-alerts/src/app/pcap/pcap-filters/pcap-filters.component.html
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/src/app/pcap/pcap-filters/pcap-filters.component.html b/metron-interface/metron-alerts/src/app/pcap/pcap-filters/pcap-filters.component.html
new file mode 100644
index 0000000..abc4cf0
--- /dev/null
+++ b/metron-interface/metron-alerts/src/app/pcap/pcap-filters/pcap-filters.component.html
@@ -0,0 +1,52 @@
+<!--
+ Licensed to the Apache Software
+ Foundation (ASF) under one or more contributor license agreements. See the
+ NOTICE file distributed with this work for additional information regarding
+ copyright ownership. The ASF licenses this file to You under the Apache License,
+ Version 2.0 (the "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0
+ Unless required by applicable law or agreed to in writing, software distributed
+ under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES
+ OR CONDITIONS OF ANY KIND, either express or implied. See the License for
+ the specific language governing permissions and limitations under the License.
+ -->
+<form (ngSubmit)="onSubmit()" #f="ngForm" class="form-inline pcap-search">
+ <div class="form-group">
+ <label for="ip_src_addr">IP Source Address</label>
+ <input name="ip_src_addr" #ip_src_addr="ngModel" class="form-control" pattern="^(?:\d{1,3}\.){3}\d{1,3}(.\d{1,2})?$" [(ngModel)]="model.ipSrcAddr">
+ </div>
+
+ <div class="form-group">
+ <label for="ip_src_port">IP Source Port</label>
+ <input name="ip_src_port" #ip_src_port="ngModel" class="form-control" type="number" [(ngModel)]="model.ipSrcPort">
+ </div>
+
+ <div class="form-group"><label for="ip_dest_addr">IP Dest Address</label>
+ <input name="ip_dest_addr" #ip_dest_addr="ngModel" class="form-control" pattern="^(?:\d{1,3}\.){3}\d{1,3}(.\d{1,2})?$" [(ngModel)]="model.ipDstAddr">
+ </div>
+
+ <div class="form-group">
+ <label for="ip_dest_port">IP Dest Port</label>
+ <input id="ip_dest_port" name="ip_dest_port" #ip_dest_port="ngModel" class="form-control" type="number" [(ngModel)]="model.ipDstPort">
+ </div>
+
+ <div class="form-group">
+ <label for="protocol">Protocol</label>
+ <input id="protocol" name="protocol" #protocol="ngModel" class="form-control" [(ngModel)]="model.protocol">
+ </div>
+
+ <div class="form-group">
+ <label for="includeReverseTraffic">Include Reverse Traffic</label>
+ <input id="includeReverseTraffic" name="includeReverseTraffic" #includeReverseTraffic="ngModel" class="form-control" type="checkbox" [(ngModel)]="model.includeReverse">
+ </div>
+
+ <div class="form-group">
+ <label for="filter">Filter</label>
+ <input id="filter" name="filter" #filter="ngModel" class="form-control" [(ngModel)]="model.packetFilter">
+ </div>
+
+ <div class="form-group">
+ <button type="submit" [ngClass]="{'disabled':!f.form.valid || queryRunning}" class="btn btn-primary btn-search" [disabled]="!f.form.valid || queryRunning"></button>
+ </div>
+</form>
http://git-wip-us.apache.org/repos/asf/metron/blob/d5eb56a9/metron-interface/metron-alerts/src/app/pcap/pcap-filters/pcap-filters.component.scss
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/src/app/pcap/pcap-filters/pcap-filters.component.scss b/metron-interface/metron-alerts/src/app/pcap/pcap-filters/pcap-filters.component.scss
new file mode 100644
index 0000000..80bac08
--- /dev/null
+++ b/metron-interface/metron-alerts/src/app/pcap/pcap-filters/pcap-filters.component.scss
@@ -0,0 +1,69 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+@import "../../../vendor.scss";
+@import "../../../styles.scss";
+@import "../../../variables.scss";
+
+.ng-valid[required], .ng-valid.required {
+
+}
+
+.ng-invalid:not(form) {
+ border-left: 5px solid #a94442; /* red */
+}
+
+.form-group {
+ padding-right: 0.75em;
+ label {
+ margin-right: 1em;
+ }
+}
+
+.btn-search {
+
+ min-width: 42px;
+ padding-left: 0;
+ padding-right: 0;
+ border: 1px solid $blue-chill !important;
+ cursor: pointer;
+
+ &:focus {
+ box-shadow: none;
+ }
+
+ &::before {
+ font-family: "FontAwesome";
+ content: '\f002';
+ color: $piction-blue;
+ }
+}
+
+.pcap-search {
+
+ padding-bottom: 15px;
+
+ label {
+ font-size: 15px;
+ }
+
+ button {
+ padding-top: 6px;
+ padding-bottom: 6px;
+ background: $icon-button-background;
+ }
+}
http://git-wip-us.apache.org/repos/asf/metron/blob/d5eb56a9/metron-interface/metron-alerts/src/app/pcap/pcap-filters/pcap-filters.component.spec.ts
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/src/app/pcap/pcap-filters/pcap-filters.component.spec.ts b/metron-interface/metron-alerts/src/app/pcap/pcap-filters/pcap-filters.component.spec.ts
new file mode 100644
index 0000000..8134f1d
--- /dev/null
+++ b/metron-interface/metron-alerts/src/app/pcap/pcap-filters/pcap-filters.component.spec.ts
@@ -0,0 +1,46 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { PcapFiltersComponent } from './pcap-filters.component';
+import { FormsModule } from '../../../../node_modules/@angular/forms';
+
+describe('PcapFiltersComponent', () => {
+ let component: PcapFiltersComponent;
+ let fixture: ComponentFixture<PcapFiltersComponent>;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ imports: [
+ FormsModule
+ ],
+ declarations: [ PcapFiltersComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(PcapFiltersComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
http://git-wip-us.apache.org/repos/asf/metron/blob/d5eb56a9/metron-interface/metron-alerts/src/app/pcap/pcap-filters/pcap-filters.component.ts
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/src/app/pcap/pcap-filters/pcap-filters.component.ts b/metron-interface/metron-alerts/src/app/pcap/pcap-filters/pcap-filters.component.ts
new file mode 100644
index 0000000..e16d71b
--- /dev/null
+++ b/metron-interface/metron-alerts/src/app/pcap/pcap-filters/pcap-filters.component.ts
@@ -0,0 +1,41 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
+import { PcapRequest } from '../model/pcap.request'
+
+@Component({
+ selector: 'app-pcap-filters',
+ templateUrl: './pcap-filters.component.html',
+ styleUrls: ['./pcap-filters.component.scss']
+})
+export class PcapFiltersComponent implements OnInit {
+
+ @Input() queryRunning: boolean = true;
+ @Output() search: EventEmitter<PcapRequest> = new EventEmitter<PcapRequest>();
+
+ model = new PcapRequest();
+
+ constructor() { }
+
+ ngOnInit() {
+ }
+
+ onSubmit() {
+ this.search.emit(this.model)
+ }
+}
http://git-wip-us.apache.org/repos/asf/metron/blob/d5eb56a9/metron-interface/metron-alerts/src/app/pcap/pcap-list/pcap-list.component.html
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/src/app/pcap/pcap-list/pcap-list.component.html b/metron-interface/metron-alerts/src/app/pcap/pcap-list/pcap-list.component.html
new file mode 100644
index 0000000..92dfb1d
--- /dev/null
+++ b/metron-interface/metron-alerts/src/app/pcap/pcap-list/pcap-list.component.html
@@ -0,0 +1,37 @@
+<!--
+ Licensed to the Apache Software
+ Foundation (ASF) under one or more contributor license agreements. See the
+ NOTICE file distributed with this work for additional information regarding
+ copyright ownership. The ASF licenses this file to You under the Apache License,
+ Version 2.0 (the "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0
+ Unless required by applicable law or agreed to in writing, software distributed
+ under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES
+ OR CONDITIONS OF ANY KIND, either express or implied. See the License for
+ the specific language governing permissions and limitations under the License.
+ -->
+<div class="table-wrapper">
+ <table class="table table-sm">
+ <thead>
+ <tr>
+ <th scope="col">Timestamp</th>
+ <th scope="col">Source Addr</th>
+ <th scope="col">Source Port</th>
+ <th scope="col">Dest Addr</th>
+ <th scope="col">Dest Port</th>
+ <th scope="col">Protocol</th>
+ </tr>
+ </thead>
+ <tbody>
+ <ng-container *ngFor="let packet of packets">
+ <tr (click)="toggle(packet)" app-pcap-packet-line [packet]="packet"></tr>
+ <tr *ngIf="packet.expanded">
+ <td colspan="6" class="pcap-packet">
+ <app-pcap-packet [packet]="packet"></app-pcap-packet>
+ </td>
+ </tr>
+ </ng-container>
+ </tbody>
+ </table>
+</div>
http://git-wip-us.apache.org/repos/asf/metron/blob/d5eb56a9/metron-interface/metron-alerts/src/app/pcap/pcap-list/pcap-list.component.scss
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/src/app/pcap/pcap-list/pcap-list.component.scss b/metron-interface/metron-alerts/src/app/pcap/pcap-list/pcap-list.component.scss
new file mode 100644
index 0000000..b724782
--- /dev/null
+++ b/metron-interface/metron-alerts/src/app/pcap/pcap-list/pcap-list.component.scss
@@ -0,0 +1,21 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+.pcap-packet {
+ padding-top: 0;
+ border-top: none;
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/metron/blob/d5eb56a9/metron-interface/metron-alerts/src/app/pcap/pcap-list/pcap-list.component.spec.ts
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/src/app/pcap/pcap-list/pcap-list.component.spec.ts b/metron-interface/metron-alerts/src/app/pcap/pcap-list/pcap-list.component.spec.ts
new file mode 100644
index 0000000..1ac8c70
--- /dev/null
+++ b/metron-interface/metron-alerts/src/app/pcap/pcap-list/pcap-list.component.spec.ts
@@ -0,0 +1,70 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { PcapListComponent } from './pcap-list.component';
+import { FormsModule } from '../../../../node_modules/@angular/forms';
+import { PdmlPacket } from '../model/pdml';
+import { Component, Input } from '@angular/core';
+import { PcapPacketLineComponent } from '../pcap-packet-line/pcap-packet-line.component';
+import { PcapPacketComponent } from '../pcap-packet/pcap-packet.component';
+
+@Component({
+ selector: '[app-pcap-packet-line]',
+ template: ``,
+})
+class FakePcapPacketLineComponent {
+ @Input() packet: PdmlPacket;
+}
+
+@Component({
+ selector: 'app-pcap-packet',
+ template: ``,
+})
+class FakePcapPacketComponent {
+ @Input() packet: PdmlPacket;
+}
+
+describe('PcapListComponent', () => {
+ let component: PcapListComponent;
+ let fixture: ComponentFixture<PcapListComponent>;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ imports: [
+ FormsModule
+ ],
+ declarations: [
+ FakePcapPacketLineComponent,
+ FakePcapPacketComponent,
+ PcapListComponent,
+ ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(PcapListComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
http://git-wip-us.apache.org/repos/asf/metron/blob/d5eb56a9/metron-interface/metron-alerts/src/app/pcap/pcap-list/pcap-list.component.ts
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/src/app/pcap/pcap-list/pcap-list.component.ts b/metron-interface/metron-alerts/src/app/pcap/pcap-list/pcap-list.component.ts
new file mode 100644
index 0000000..fbc1aec
--- /dev/null
+++ b/metron-interface/metron-alerts/src/app/pcap/pcap-list/pcap-list.component.ts
@@ -0,0 +1,39 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import { Component, OnInit, Input } from '@angular/core';
+import { Pdml,PdmlPacket } from '../model/pdml'
+
+@Component({
+ selector: 'app-pcap-list',
+ templateUrl: './pcap-list.component.html',
+ styleUrls: ['./pcap-list.component.scss']
+})
+export class PcapListComponent implements OnInit {
+
+ @Input() packets: PdmlPacket[]
+
+ constructor() { }
+
+ ngOnInit() {
+ }
+
+ toggle(packet) {
+ packet.expanded= !packet.expanded
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/metron/blob/d5eb56a9/metron-interface/metron-alerts/src/app/pcap/pcap-packet-line/pcap-packet-line.component.html
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/src/app/pcap/pcap-packet-line/pcap-packet-line.component.html b/metron-interface/metron-alerts/src/app/pcap/pcap-packet-line/pcap-packet-line.component.html
new file mode 100644
index 0000000..25724ee
--- /dev/null
+++ b/metron-interface/metron-alerts/src/app/pcap/pcap-packet-line/pcap-packet-line.component.html
@@ -0,0 +1,19 @@
+<!--
+ Licensed to the Apache Software
+ Foundation (ASF) under one or more contributor license agreements. See the
+ NOTICE file distributed with this work for additional information regarding
+ copyright ownership. The ASF licenses this file to You under the Apache License,
+ Version 2.0 (the "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0
+ Unless required by applicable law or agreed to in writing, software distributed
+ under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES
+ OR CONDITIONS OF ANY KIND, either express or implied. See the License for
+ the specific language governing permissions and limitations under the License.
+ -->
+<td class="timestamp">{{ip.timestamp.value}} <span class="date">{{ip.timestamp.show}}</span></td>
+<td class="ip-addr">{{ip.ipSrcAddr.show}}</td>
+<td class="ip-port">{{ip.ipSrcPort.show}}</td>
+<td class="ip-addr">{{ip.ipDestAddr.show}}</td>
+<td class="ip-port">{{ip.ipDestPort.show}}</td>
+<td class="ip-protocol">{{ip.protocol.showname}}</td>
http://git-wip-us.apache.org/repos/asf/metron/blob/d5eb56a9/metron-interface/metron-alerts/src/app/pcap/pcap-packet-line/pcap-packet-line.component.scss
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/src/app/pcap/pcap-packet-line/pcap-packet-line.component.scss b/metron-interface/metron-alerts/src/app/pcap/pcap-packet-line/pcap-packet-line.component.scss
new file mode 100644
index 0000000..a3f036c
--- /dev/null
+++ b/metron-interface/metron-alerts/src/app/pcap/pcap-packet-line/pcap-packet-line.component.scss
@@ -0,0 +1,17 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/metron/blob/d5eb56a9/metron-interface/metron-alerts/src/app/pcap/pcap-packet-line/pcap-packet-line.component.spec.ts
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/src/app/pcap/pcap-packet-line/pcap-packet-line.component.spec.ts b/metron-interface/metron-alerts/src/app/pcap/pcap-packet-line/pcap-packet-line.component.spec.ts
new file mode 100644
index 0000000..e01f9c6
--- /dev/null
+++ b/metron-interface/metron-alerts/src/app/pcap/pcap-packet-line/pcap-packet-line.component.spec.ts
@@ -0,0 +1,1283 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { PcapPacketLineComponent } from './pcap-packet-line.component';
+import { PdmlPacket } from '../model/pdml';
+
+describe('PcapPacketLineComponent', () => {
+ let component: PcapPacketLineComponent;
+ let fixture: ComponentFixture<PcapPacketLineComponent>;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [ PcapPacketLineComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(PcapPacketLineComponent);
+ component = fixture.componentInstance;
+ component.packet = fakePacket as PdmlPacket;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
+
+const fakePacket = {
+ name: "something",
+ expanded: false,
+ protos: [
+ {
+ "name": "geninfo",
+ "pos": "0",
+ "showname": "General information",
+ "size": "722",
+ "hide": null,
+ "fields": [
+ {
+ "name": "num",
+ "pos": "0",
+ "showname": "Number",
+ "size": "722",
+ "value": "1",
+ "show": "1",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "len",
+ "pos": "0",
+ "showname": "Frame Length",
+ "size": "722",
+ "value": "2d2",
+ "show": "722",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "caplen",
+ "pos": "0",
+ "showname": "Captured Length",
+ "size": "722",
+ "value": "2d2",
+ "show": "722",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "timestamp",
+ "pos": "0",
+ "showname": "Captured Time",
+ "size": "722",
+ "value": "1458240269.373968000",
+ "show": "Mar 17, 2016 18:44:29.373968000 UTC",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ }
+ ]
+ },
+ {
+ "name": "frame",
+ "pos": "0",
+ "showname": "Frame 1: 722 bytes on wire (5776 bits), 722 bytes captured (5776 bits)",
+ "size": "722",
+ "hide": null,
+ "fields": [
+ {
+ "name": "frame.dlt",
+ "pos": "0",
+ "showname": "WTAP_ENCAP: 1",
+ "size": "0",
+ "value": null,
+ "show": "1",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "frame.time",
+ "pos": "0",
+ "showname": "Arrival Time: Mar 17, 2016 18:44:29.373968000 UTC",
+ "size": "0",
+ "value": null,
+ "show": "Mar 17, 2016 18:44:29.373968000",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "frame.offset_shift",
+ "pos": "0",
+ "showname": "Time shift for this packet: 0.000000000 seconds",
+ "size": "0",
+ "value": null,
+ "show": "0.000000000",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "frame.time_epoch",
+ "pos": "0",
+ "showname": "Epoch Time: 1458240269.373968000 seconds",
+ "size": "0",
+ "value": null,
+ "show": "1458240269.373968000",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "frame.time_delta",
+ "pos": "0",
+ "showname": "Time delta from previous captured frame: 0.000000000 seconds",
+ "size": "0",
+ "value": null,
+ "show": "0.000000000",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "frame.time_delta_displayed",
+ "pos": "0",
+ "showname": "Time delta from previous displayed frame: 0.000000000 seconds",
+ "size": "0",
+ "value": null,
+ "show": "0.000000000",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "frame.time_relative",
+ "pos": "0",
+ "showname": "Time since reference or first frame: 0.000000000 seconds",
+ "size": "0",
+ "value": null,
+ "show": "0.000000000",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "frame.number",
+ "pos": "0",
+ "showname": "Frame Number: 1",
+ "size": "0",
+ "value": null,
+ "show": "1",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "frame.len",
+ "pos": "0",
+ "showname": "Frame Length: 722 bytes (5776 bits)",
+ "size": "0",
+ "value": null,
+ "show": "722",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "frame.cap_len",
+ "pos": "0",
+ "showname": "Capture Length: 722 bytes (5776 bits)",
+ "size": "0",
+ "value": null,
+ "show": "722",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "frame.marked",
+ "pos": "0",
+ "showname": "Frame is marked: False",
+ "size": "0",
+ "value": null,
+ "show": "0",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "frame.ignored",
+ "pos": "0",
+ "showname": "Frame is ignored: False",
+ "size": "0",
+ "value": null,
+ "show": "0",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "frame.protocols",
+ "pos": "0",
+ "showname": "Protocols in frame: eth:ip:tcp:ssh",
+ "size": "0",
+ "value": null,
+ "show": "eth:ip:tcp:ssh",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ }
+ ]
+ },
+ {
+ "name": "eth",
+ "pos": "0",
+ "showname": "Ethernet II, Src: CadmusCo_96:a4:7a (08:00:27:96:a4:7a), Dst: 0a:00:27:00:00:00 (0a:00:27:00:00:00)",
+ "size": "14",
+ "hide": null,
+ "fields": [
+ {
+ "name": "eth.dst",
+ "pos": "0",
+ "showname": "Destination: 0a:00:27:00:00:00 (0a:00:27:00:00:00)",
+ "size": "6",
+ "value": "0a0027000000",
+ "show": "0a:00:27:00:00:00",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": [
+ {
+ "name": "eth.addr",
+ "pos": "0",
+ "showname": "Address: 0a:00:27:00:00:00 (0a:00:27:00:00:00)",
+ "size": "6",
+ "value": "0a0027000000",
+ "show": "0a:00:27:00:00:00",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "eth.lg",
+ "pos": "0",
+ "showname": ".... ..1. .... .... .... .... = LG bit: Locally administered address (this is NOT the factory default)",
+ "size": "3",
+ "value": "1",
+ "show": "1",
+ "unmaskedvalue": "0a0027",
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "eth.ig",
+ "pos": "0",
+ "showname": ".... ...0 .... .... .... .... = IG bit: Individual address (unicast)",
+ "size": "3",
+ "value": "0",
+ "show": "0",
+ "unmaskedvalue": "0a0027",
+ "hide": null,
+ "fields": null,
+ "protos": null
+ }
+ ],
+ "protos": null
+ },
+ {
+ "name": "eth.src",
+ "pos": "6",
+ "showname": "Source: CadmusCo_96:a4:7a (08:00:27:96:a4:7a)",
+ "size": "6",
+ "value": "08002796a47a",
+ "show": "08:00:27:96:a4:7a",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": [
+ {
+ "name": "eth.addr",
+ "pos": "6",
+ "showname": "Address: CadmusCo_96:a4:7a (08:00:27:96:a4:7a)",
+ "size": "6",
+ "value": "08002796a47a",
+ "show": "08:00:27:96:a4:7a",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "eth.lg",
+ "pos": "6",
+ "showname": ".... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)",
+ "size": "3",
+ "value": "0",
+ "show": "0",
+ "unmaskedvalue": "080027",
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "eth.ig",
+ "pos": "6",
+ "showname": ".... ...0 .... .... .... .... = IG bit: Individual address (unicast)",
+ "size": "3",
+ "value": "0",
+ "show": "0",
+ "unmaskedvalue": "080027",
+ "hide": null,
+ "fields": null,
+ "protos": null
+ }
+ ],
+ "protos": null
+ },
+ {
+ "name": "eth.type",
+ "pos": "12",
+ "showname": "Type: IP (0x0800)",
+ "size": "2",
+ "value": "0800",
+ "show": "0x0800",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ }
+ ]
+ },
+ {
+ "name": "ip",
+ "pos": "14",
+ "showname": "Internet Protocol Version 4, Src: 192.168.66.121 (192.168.66.121), Dst: 192.168.66.1 (192.168.66.1)",
+ "size": "20",
+ "hide": null,
+ "fields": [
+ {
+ "name": "ip.version",
+ "pos": "14",
+ "showname": "Version: 4",
+ "size": "1",
+ "value": "45",
+ "show": "4",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "ip.hdr_len",
+ "pos": "14",
+ "showname": "Header length: 20 bytes",
+ "size": "1",
+ "value": "45",
+ "show": "20",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "ip.dsfield",
+ "pos": "15",
+ "showname": "Differentiated Services Field: 0x10 (DSCP 0x04: Unknown DSCP; ECN: 0x00: Not-ECT (Not ECN-Capable Transport))",
+ "size": "1",
+ "value": "10",
+ "show": "16",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": [
+ {
+ "name": "ip.dsfield.dscp",
+ "pos": "15",
+ "showname": "0001 00.. = Differentiated Services Codepoint: Unknown (0x04)",
+ "size": "1",
+ "value": "4",
+ "show": "0x04",
+ "unmaskedvalue": "10",
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "ip.dsfield.ecn",
+ "pos": "15",
+ "showname": ".... ..00 = Explicit Congestion Notification: Not-ECT (Not ECN-Capable Transport) (0x00)",
+ "size": "1",
+ "value": "0",
+ "show": "0x00",
+ "unmaskedvalue": "10",
+ "hide": null,
+ "fields": null,
+ "protos": null
+ }
+ ],
+ "protos": null
+ },
+ {
+ "name": "ip.len",
+ "pos": "16",
+ "showname": "Total Length: 708",
+ "size": "2",
+ "value": "02c4",
+ "show": "708",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "ip.id",
+ "pos": "18",
+ "showname": "Identification: 0x7cd9 (31961)",
+ "size": "2",
+ "value": "7cd9",
+ "show": "0x7cd9",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "ip.flags",
+ "pos": "20",
+ "showname": "Flags: 0x02 (Don't Fragment)",
+ "size": "1",
+ "value": "40",
+ "show": "0x02",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": [
+ {
+ "name": "ip.flags.rb",
+ "pos": "20",
+ "showname": "0... .... = Reserved bit: Not set",
+ "size": "1",
+ "value": "40",
+ "show": "0",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "ip.flags.df",
+ "pos": "20",
+ "showname": ".1.. .... = Don't fragment: Set",
+ "size": "1",
+ "value": "40",
+ "show": "1",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "ip.flags.mf",
+ "pos": "20",
+ "showname": "..0. .... = More fragments: Not set",
+ "size": "1",
+ "value": "40",
+ "show": "0",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ }
+ ],
+ "protos": null
+ },
+ {
+ "name": "ip.frag_offset",
+ "pos": "20",
+ "showname": "Fragment offset: 0",
+ "size": "2",
+ "value": "4000",
+ "show": "0",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "ip.ttl",
+ "pos": "22",
+ "showname": "Time to live: 64",
+ "size": "1",
+ "value": "40",
+ "show": "64",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "ip.proto",
+ "pos": "23",
+ "showname": "Protocol: TCP (6)",
+ "size": "1",
+ "value": "06",
+ "show": "6",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "ip.checksum",
+ "pos": "24",
+ "showname": "Header checksum: 0xb57f [correct]",
+ "size": "2",
+ "value": "b57f",
+ "show": "0xb57f",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": [
+ {
+ "name": "ip.checksum_good",
+ "pos": "24",
+ "showname": "Good: True",
+ "size": "2",
+ "value": "b57f",
+ "show": "1",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "ip.checksum_bad",
+ "pos": "24",
+ "showname": "Bad: False",
+ "size": "2",
+ "value": "b57f",
+ "show": "0",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ }
+ ],
+ "protos": null
+ },
+ {
+ "name": "ip.src",
+ "pos": "26",
+ "showname": "Source: 192.168.66.121 (192.168.66.121)",
+ "size": "4",
+ "value": "c0a84279",
+ "show": "192.168.66.121",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "ip.addr",
+ "pos": "26",
+ "showname": "Source or Destination Address: 192.168.66.121 (192.168.66.121)",
+ "size": "4",
+ "value": "c0a84279",
+ "show": "192.168.66.121",
+ "unmaskedvalue": null,
+ "hide": "yes",
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "ip.src_host",
+ "pos": "26",
+ "showname": "Source Host: 192.168.66.121",
+ "size": "4",
+ "value": "c0a84279",
+ "show": "192.168.66.121",
+ "unmaskedvalue": null,
+ "hide": "yes",
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "ip.host",
+ "pos": "26",
+ "showname": "Source or Destination Host: 192.168.66.121",
+ "size": "4",
+ "value": "c0a84279",
+ "show": "192.168.66.121",
+ "unmaskedvalue": null,
+ "hide": "yes",
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "ip.dst",
+ "pos": "30",
+ "showname": "Destination: 192.168.66.1 (192.168.66.1)",
+ "size": "4",
+ "value": "c0a84201",
+ "show": "192.168.66.1",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "ip.addr",
+ "pos": "30",
+ "showname": "Source or Destination Address: 192.168.66.1 (192.168.66.1)",
+ "size": "4",
+ "value": "c0a84201",
+ "show": "192.168.66.1",
+ "unmaskedvalue": null,
+ "hide": "yes",
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "ip.dst_host",
+ "pos": "30",
+ "showname": "Destination Host: 192.168.66.1",
+ "size": "4",
+ "value": "c0a84201",
+ "show": "192.168.66.1",
+ "unmaskedvalue": null,
+ "hide": "yes",
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "ip.host",
+ "pos": "30",
+ "showname": "Source or Destination Host: 192.168.66.1",
+ "size": "4",
+ "value": "c0a84201",
+ "show": "192.168.66.1",
+ "unmaskedvalue": null,
+ "hide": "yes",
+ "fields": null,
+ "protos": null
+ }
+ ]
+ },
+ {
+ "name": "tcp",
+ "pos": "34",
+ "showname": "Transmission Control Protocol, Src Port: ssh (22), Dst Port: 55791 (55791), Seq: 1, Ack: 1, Len: 656",
+ "size": "32",
+ "hide": null,
+ "fields": [
+ {
+ "name": "tcp.srcport",
+ "pos": "34",
+ "showname": "Source port: ssh (22)",
+ "size": "2",
+ "value": "0016",
+ "show": "22",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "tcp.dstport",
+ "pos": "36",
+ "showname": "Destination port: 55791 (55791)",
+ "size": "2",
+ "value": "d9ef",
+ "show": "55791",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "tcp.port",
+ "pos": "34",
+ "showname": "Source or Destination Port: 22",
+ "size": "2",
+ "value": "0016",
+ "show": "22",
+ "unmaskedvalue": null,
+ "hide": "yes",
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "tcp.port",
+ "pos": "36",
+ "showname": "Source or Destination Port: 55791",
+ "size": "2",
+ "value": "d9ef",
+ "show": "55791",
+ "unmaskedvalue": null,
+ "hide": "yes",
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "tcp.stream",
+ "pos": "34",
+ "showname": "Stream index: 0",
+ "size": "0",
+ "value": null,
+ "show": "0",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "tcp.len",
+ "pos": "46",
+ "showname": "TCP Segment Len: 656",
+ "size": "1",
+ "value": "80",
+ "show": "656",
+ "unmaskedvalue": null,
+ "hide": "yes",
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "tcp.seq",
+ "pos": "38",
+ "showname": "Sequence number: 1 (relative sequence number)",
+ "size": "4",
+ "value": "12903044",
+ "show": "1",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "tcp.nxtseq",
+ "pos": "34",
+ "showname": "Next sequence number: 657 (relative sequence number)",
+ "size": "0",
+ "value": null,
+ "show": "657",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "tcp.ack",
+ "pos": "42",
+ "showname": "Acknowledgment number: 1 (relative ack number)",
+ "size": "4",
+ "value": "8b92f3e7",
+ "show": "1",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "tcp.hdr_len",
+ "pos": "46",
+ "showname": "Header length: 32 bytes",
+ "size": "1",
+ "value": "80",
+ "show": "32",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "tcp.flags",
+ "pos": "46",
+ "showname": "Flags: 0x018 (PSH, ACK)",
+ "size": "2",
+ "value": "18",
+ "show": "0x0018",
+ "unmaskedvalue": "8018",
+ "hide": null,
+ "fields": [
+ {
+ "name": "tcp.flags.res",
+ "pos": "46",
+ "showname": "000. .... .... = Reserved: Not set",
+ "size": "1",
+ "value": "0",
+ "show": "0",
+ "unmaskedvalue": "80",
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "tcp.flags.ns",
+ "pos": "46",
+ "showname": "...0 .... .... = Nonce: Not set",
+ "size": "1",
+ "value": "0",
+ "show": "0",
+ "unmaskedvalue": "80",
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "tcp.flags.cwr",
+ "pos": "47",
+ "showname": ".... 0... .... = Congestion Window Reduced (CWR): Not set",
+ "size": "1",
+ "value": "0",
+ "show": "0",
+ "unmaskedvalue": "18",
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "tcp.flags.ecn",
+ "pos": "47",
+ "showname": ".... .0.. .... = ECN-Echo: Not set",
+ "size": "1",
+ "value": "0",
+ "show": "0",
+ "unmaskedvalue": "18",
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "tcp.flags.urg",
+ "pos": "47",
+ "showname": ".... ..0. .... = Urgent: Not set",
+ "size": "1",
+ "value": "0",
+ "show": "0",
+ "unmaskedvalue": "18",
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "tcp.flags.ack",
+ "pos": "47",
+ "showname": ".... ...1 .... = Acknowledgment: Set",
+ "size": "1",
+ "value": "1",
+ "show": "1",
+ "unmaskedvalue": "18",
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "tcp.flags.push",
+ "pos": "47",
+ "showname": ".... .... 1... = Push: Set",
+ "size": "1",
+ "value": "1",
+ "show": "1",
+ "unmaskedvalue": "18",
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "tcp.flags.reset",
+ "pos": "47",
+ "showname": ".... .... .0.. = Reset: Not set",
+ "size": "1",
+ "value": "0",
+ "show": "0",
+ "unmaskedvalue": "18",
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "tcp.flags.syn",
+ "pos": "47",
+ "showname": ".... .... ..0. = Syn: Not set",
+ "size": "1",
+ "value": "0",
+ "show": "0",
+ "unmaskedvalue": "18",
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "tcp.flags.fin",
+ "pos": "47",
+ "showname": ".... .... ...0 = Fin: Not set",
+ "size": "1",
+ "value": "0",
+ "show": "0",
+ "unmaskedvalue": "18",
+ "hide": null,
+ "fields": null,
+ "protos": null
+ }
+ ],
+ "protos": null
+ },
+ {
+ "name": "tcp.window_size_value",
+ "pos": "48",
+ "showname": "Window size value: 501",
+ "size": "2",
+ "value": "01f5",
+ "show": "501",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "tcp.window_size",
+ "pos": "48",
+ "showname": "Calculated window size: 501",
+ "size": "2",
+ "value": "01f5",
+ "show": "501",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "tcp.window_size_scalefactor",
+ "pos": "48",
+ "showname": "Window size scaling factor: -1 (unknown)",
+ "size": "2",
+ "value": "01f5",
+ "show": "-1",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "tcp.checksum",
+ "pos": "50",
+ "showname": "Checksum: 0x0882 [validation disabled]",
+ "size": "2",
+ "value": "0882",
+ "show": "0x0882",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": [
+ {
+ "name": "tcp.checksum_good",
+ "pos": "50",
+ "showname": "Good Checksum: False",
+ "size": "2",
+ "value": "0882",
+ "show": "0",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "tcp.checksum_bad",
+ "pos": "50",
+ "showname": "Bad Checksum: False",
+ "size": "2",
+ "value": "0882",
+ "show": "0",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ }
+ ],
+ "protos": null
+ },
+ {
+ "name": "tcp.options",
+ "pos": "54",
+ "showname": "Options: (12 bytes), No-Operation (NOP), No-Operation (NOP), Timestamps",
+ "size": "12",
+ "value": "0101080a0014f4f811bdb98f",
+ "show": "01:01:08:0a:00:14:f4:f8:11:bd:b9:8f",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": [
+ {
+ "name": "",
+ "pos": "54",
+ "showname": null,
+ "size": "1",
+ "value": "01",
+ "show": "No-Operation (NOP)",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": [
+ {
+ "name": "ip.opt.type",
+ "pos": "54",
+ "showname": "Type: 1",
+ "size": "1",
+ "value": "01",
+ "show": "1",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": [
+ {
+ "name": "ip.opt.type.copy",
+ "pos": "54",
+ "showname": "0... .... = Copy on fragmentation: No",
+ "size": "1",
+ "value": "0",
+ "show": "0",
+ "unmaskedvalue": "01",
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "ip.opt.type.class",
+ "pos": "54",
+ "showname": ".00. .... = Class: Control (0)",
+ "size": "1",
+ "value": "0",
+ "show": "0",
+ "unmaskedvalue": "01",
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "ip.opt.type.number",
+ "pos": "54",
+ "showname": "...0 0001 = Number: No-Operation (NOP) (1)",
+ "size": "1",
+ "value": "1",
+ "show": "1",
+ "unmaskedvalue": "01",
+ "hide": null,
+ "fields": null,
+ "protos": null
+ }
+ ],
+ "protos": null
+ }
+ ],
+ "protos": null
+ },
+ {
+ "name": "",
+ "pos": "55",
+ "showname": null,
+ "size": "1",
+ "value": "01",
+ "show": "No-Operation (NOP)",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": [
+ {
+ "name": "ip.opt.type",
+ "pos": "55",
+ "showname": "Type: 1",
+ "size": "1",
+ "value": "01",
+ "show": "1",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": [
+ {
+ "name": "ip.opt.type.copy",
+ "pos": "55",
+ "showname": "0... .... = Copy on fragmentation: No",
+ "size": "1",
+ "value": "0",
+ "show": "0",
+ "unmaskedvalue": "01",
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "ip.opt.type.class",
+ "pos": "55",
+ "showname": ".00. .... = Class: Control (0)",
+ "size": "1",
+ "value": "0",
+ "show": "0",
+ "unmaskedvalue": "01",
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "ip.opt.type.number",
+ "pos": "55",
+ "showname": "...0 0001 = Number: No-Operation (NOP) (1)",
+ "size": "1",
+ "value": "1",
+ "show": "1",
+ "unmaskedvalue": "01",
+ "hide": null,
+ "fields": null,
+ "protos": null
+ }
+ ],
+ "protos": null
+ }
+ ],
+ "protos": null
+ },
+ {
+ "name": "",
+ "pos": "56",
+ "showname": null,
+ "size": "10",
+ "value": "080a0014f4f811bdb98f",
+ "show": "Timestamps: TSval 1373432, TSecr 297646479",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": [
+ {
+ "name": "tcp.option_kind",
+ "pos": "56",
+ "showname": "Kind: Timestamp (8)",
+ "size": "1",
+ "value": "08",
+ "show": "8",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "tcp.option_len",
+ "pos": "57",
+ "showname": "Length: 10",
+ "size": "1",
+ "value": "0a",
+ "show": "10",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "tcp.options.timestamp.tsval",
+ "pos": "58",
+ "showname": "Timestamp value: 1373432",
+ "size": "4",
+ "value": "0014f4f8",
+ "show": "1373432",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ },
+ {
+ "name": "tcp.options.timestamp.tsecr",
+ "pos": "62",
+ "showname": "Timestamp echo reply: 297646479",
+ "size": "4",
+ "value": "11bdb98f",
+ "show": "297646479",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ }
+ ],
+ "protos": null
+ }
+ ],
+ "protos": null
+ },
+ {
+ "name": "tcp.analysis",
+ "pos": "34",
+ "showname": "SEQ/ACK analysis",
+ "size": "0",
+ "value": "",
+ "show": "",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": [
+ {
+ "name": "tcp.analysis.bytes_in_flight",
+ "pos": "34",
+ "showname": "Bytes in flight: 656",
+ "size": "0",
+ "value": null,
+ "show": "656",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ }
+ ],
+ "protos": null
+ }
+ ]
+ },
+ {
+ "name": "ssh",
+ "pos": "66",
+ "showname": "SSH Protocol",
+ "size": "656",
+ "hide": null,
+ "fields": [
+ {
+ "name": "ssh.encrypted_packet",
+ "pos": "66",
+ "showname": "Encrypted Packet: 5b2bfe1fa006867834412184af9f5b239737763adead7140...",
+ "size": "656",
+ "value": "5b2bfe1fa006867834412184af9f5b239737763adead71408fc01b88e548b2cc86f341a39771c6ed16f2b0bb3e6ab6109e73c7d68ca7545852f91930e4633c17fb9dc7aa794b0d820d0fa3ac65bf0f013e5449d5953d2943506657e2b76b548e67f5c9ce1a4c53db1b52465bde7208baf11f3fe01975418b4db186a38ad32947d1908b62e532da4b729353a932423d25f5f734484076aa4143c6a74937a4ea49448e261ae1ecb6b07bbdf5c98d0855940a19018c88263b8936f7b3e9a4b6cd98090fa10a10e37ad20fe5d833071ad6d5b2886ba85ec72affb83e316443dbe29dbf643e6aa05595c90765cf85f6da55cc1c09d8dccc7d05da022429ad602a559a044b7e2663b0c153a3011bf824ef8d1fa56cba957c5f5d2276a1c9e92de65782f406848c6e20f634c5d1fea843a8bf1a4058e85553f5838f7299958fbf54be84e46c5a3c3965f8bed7fe03a9a1168a892e0073adeb54deca171a318d11fc1a8179f91632310213da327965a40bc6fe18eae55e8da6b57d7ef9f3a05b42381bcb3db8f8efd6d0c638a2cdd46efb0b8f1274e98672f644b2275947e626b02e5166f86c2dd4a67b81e213f8c064927a396815db589f10e5e521ffedb13f8edbe2de01c6fc8bf0e12c82212e497794aa045e9b6fcca83b4cad0a3b5e6ca2d1feaf8887b4d64f22989396e
cfa8f7f1835eed422580505109fed36797bdc10a9168d5148daef6a8710c3df1d6366c9763ab4ebd359d86a8ea14819252fb52ba423422d1f60b0179316b3729e479ba07e88cb886938c8daae65d470dde91e5336e0fc4221a72cc49057d878aa5924875d097483e94bc44a4ea93aee8780e56c50a405932841f50da156e1f90559a7c4f76999442fb433a26fc703dea656bbe03790ac3c9c5318ff5f81d87d483524bbfe7ff167",
+ "show": "5b:2b:fe:1f:a0:06:86:78:34:41:21:84:af:9f:5b:23:97:37:76:3a:de:ad:71:40:8f:c0:1b:88:e5:48:b2:cc:86:f3:41:a3:97:71:c6:ed:16:f2:b0:bb:3e:6a:b6:10:9e:73:c7:d6:8c:a7:54:58:52:f9:19:30:e4:63:3c:17:fb:9d:c7:aa:79:4b:0d:82:0d:0f:a3:ac:65:bf:0f:01:3e:54:49:d5:95:3d:29:43:50:66:57:e2:b7:6b:54:8e:67:f5:c9:ce:1a:4c:53:db:1b:52:46:5b:de:72:08:ba:f1:1f:3f:e0:19:75:41:8b:4d:b1:86:a3:8a:d3:29:47:d1:90:8b:62:e5:32:da:4b:72:93:53:a9:32:42:3d:25:f5:f7:34:48:40:76:aa:41:43:c6:a7:49:37:a4:ea:49:44:8e:26:1a:e1:ec:b6:b0:7b:bd:f5:c9:8d:08:55:94:0a:19:01:8c:88:26:3b:89:36:f7:b3:e9:a4:b6:cd:98:09:0f:a1:0a:10:e3:7a:d2:0f:e5:d8:33:07:1a:d6:d5:b2:88:6b:a8:5e:c7:2a:ff:b8:3e:31:64:43:db:e2:9d:bf:64:3e:6a:a0:55:95:c9:07:65:cf:85:f6:da:55:cc:1c:09:d8:dc:cc:7d:05:da:02:24:29:ad:60:2a:55:9a:04:4b:7e:26:63:b0:c1:53:a3:01:1b:f8:24:ef:8d:1f:a5:6c:ba:95:7c:5f:5d:22:76:a1:c9:e9:2d:e6:57:82:f4:06:84:8c:6e:20:f6:34:c5:d1:fe:a8:43:a8:bf:1a:40:58:e8:55:53:f5:83:8f:72:99:95:8f:bf:54:be:84:e4:6c:5a:3c:39:65:
f8:be:d7:fe:03:a9:a1:16:8a:89:2e:00:73:ad:eb:54:de:ca:17:1a:31:8d:11:fc:1a:81:79:f9:16:32:31:02:13:da:32:79:65:a4:0b:c6:fe:18:ea:e5:5e:8d:a6:b5:7d:7e:f9:f3:a0:5b:42:38:1b:cb:3d:b8:f8:ef:d6:d0:c6:38:a2:cd:d4:6e:fb:0b:8f:12:74:e9:86:72:f6:44:b2:27:59:47:e6:26:b0:2e:51:66:f8:6c:2d:d4:a6:7b:81:e2:13:f8:c0:64:92:7a:39:68:15:db:58:9f:10:e5:e5:21:ff:ed:b1:3f:8e:db:e2:de:01:c6:fc:8b:f0:e1:2c:82:21:2e:49:77:94:aa:04:5e:9b:6f:cc:a8:3b:4c:ad:0a:3b:5e:6c:a2:d1:fe:af:88:87:b4:d6:4f:22:98:93:96:ec:fa:8f:7f:18:35:ee:d4:22:58:05:05:10:9f:ed:36:79:7b:dc:10:a9:16:8d:51:48:da:ef:6a:87:10:c3:df:1d:63:66:c9:76:3a:b4:eb:d3:59:d8:6a:8e:a1:48:19:25:2f:b5:2b:a4:23:42:2d:1f:60:b0:17:93:16:b3:72:9e:47:9b:a0:7e:88:cb:88:69:38:c8:da:ae:65:d4:70:dd:e9:1e:53:36:e0:fc:42:21:a7:2c:c4:90:57:d8:78:aa:59:24:87:5d:09:74:83:e9:4b:c4:4a:4e:a9:3a:ee:87:80:e5:6c:50:a4:05:93:28:41:f5:0d:a1:56:e1:f9:05:59:a7:c4:f7:69:99:44:2f:b4:33:a2:6f:c7:03:de:a6:56:bb:e0:37:90:ac:3c:9c:53:18:ff:5f:81:d8:7d:48:35:24:bb:fe:7f:f1:67",
+ "unmaskedvalue": null,
+ "hide": null,
+ "fields": null,
+ "protos": null
+ }
+ ]
+ }
+ ]
+};
http://git-wip-us.apache.org/repos/asf/metron/blob/d5eb56a9/metron-interface/metron-alerts/src/app/pcap/pcap-packet-line/pcap-packet-line.component.ts
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/src/app/pcap/pcap-packet-line/pcap-packet-line.component.ts b/metron-interface/metron-alerts/src/app/pcap/pcap-packet-line/pcap-packet-line.component.ts
new file mode 100644
index 0000000..bb160a0
--- /dev/null
+++ b/metron-interface/metron-alerts/src/app/pcap/pcap-packet-line/pcap-packet-line.component.ts
@@ -0,0 +1,55 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import { Component, OnInit, Input } from '@angular/core';
+import { PdmlPacket, PdmlProto, PdmlField } from '../model/pdml'
+
+@Component({
+ selector: '[app-pcap-packet-line]',
+ templateUrl: './pcap-packet-line.component.html',
+ styleUrls: ['./pcap-packet-line.component.scss']
+})
+export class PcapPacketLineComponent implements OnInit {
+
+ @Input() packet: PdmlPacket
+
+ ip: {
+ timestamp: PdmlField,
+ ipSrcAddr: PdmlField, ipSrcPort: PdmlField,
+ ipDestAddr: PdmlField, ipDestPort: PdmlField,
+ protocol: PdmlField
+ }
+
+ constructor() { }
+
+ ngOnInit() {
+ const genProto: PdmlProto = this.packet.protos.filter(p => p.name == "geninfo")[0]
+ const ipProto: PdmlProto = this.packet.protos.filter(p => p.name == "ip")[0]
+ const tcpProto: PdmlProto = this.packet.protos.filter(p => p.name == "tcp")[0]
+
+ this.ip = {
+ timestamp: PdmlProto.findField(genProto,'timestamp'),
+ ipSrcAddr: PdmlProto.findField(ipProto,'ip.src'),
+ ipSrcPort: PdmlProto.findField(tcpProto,'tcp.srcport'),
+ ipDestAddr: PdmlProto.findField(ipProto,'ip.dst'),
+ ipDestPort: PdmlProto.findField(tcpProto,'tcp.dstport'),
+ protocol: PdmlProto.findField(ipProto,'ip.proto')
+ };
+ }
+
+
+}
http://git-wip-us.apache.org/repos/asf/metron/blob/d5eb56a9/metron-interface/metron-alerts/src/app/pcap/pcap-packet/pcap-packet.component.html
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/src/app/pcap/pcap-packet/pcap-packet.component.html b/metron-interface/metron-alerts/src/app/pcap/pcap-packet/pcap-packet.component.html
new file mode 100644
index 0000000..750c315
--- /dev/null
+++ b/metron-interface/metron-alerts/src/app/pcap/pcap-packet/pcap-packet.component.html
@@ -0,0 +1,21 @@
+<!--
+ Licensed to the Apache Software
+ Foundation (ASF) under one or more contributor license agreements. See the
+ NOTICE file distributed with this work for additional information regarding
+ copyright ownership. The ASF licenses this file to You under the Apache License,
+ Version 2.0 (the "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0
+ Unless required by applicable law or agreed to in writing, software distributed
+ under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES
+ OR CONDITIONS OF ANY KIND, either express or implied. See the License for
+ the specific language governing permissions and limitations under the License.
+ -->
+<div class="proto" *ngFor="let proto of packet.protos" (click)="proto.expanded = !proto.expanded">
+ <div class="proto-header">{{ proto.showname }}</div>
+ <div class="proto-fields" *ngIf="proto.expanded">
+ <div *ngFor="let field of proto.fields">
+ <span class="field-name">{{ field.name}}</span> {{ field.showname}}
+ </div>
+ </div>
+</div>
http://git-wip-us.apache.org/repos/asf/metron/blob/d5eb56a9/metron-interface/metron-alerts/src/app/pcap/pcap-packet/pcap-packet.component.scss
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/src/app/pcap/pcap-packet/pcap-packet.component.scss b/metron-interface/metron-alerts/src/app/pcap/pcap-packet/pcap-packet.component.scss
new file mode 100644
index 0000000..e9d4662
--- /dev/null
+++ b/metron-interface/metron-alerts/src/app/pcap/pcap-packet/pcap-packet.component.scss
@@ -0,0 +1,36 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+@import "../../../_variables.scss";
+
+.proto-header {
+ font-weight: bold;
+ border-top: 1px solid $table-border-color;
+}
+
+.proto {
+ margin-left: 1em;
+}
+
+.proto-fields {
+ margin-left: 1em;
+}
+
+
+.field-name {
+ display: none
+}
[5/5] metron git commit: METRON-1671 Create PCAP UI (tiborm via
merrimanr) closes apache/metron#1103
Posted by rm...@apache.org.
METRON-1671 Create PCAP UI (tiborm via merrimanr) closes apache/metron#1103
Project: http://git-wip-us.apache.org/repos/asf/metron/repo
Commit: http://git-wip-us.apache.org/repos/asf/metron/commit/d5eb56a9
Tree: http://git-wip-us.apache.org/repos/asf/metron/tree/d5eb56a9
Diff: http://git-wip-us.apache.org/repos/asf/metron/diff/d5eb56a9
Branch: refs/heads/feature/METRON-1554-pcap-query-panel
Commit: d5eb56a967ac7b925d0a843c027a2b0dde66de06
Parents: 7dff4de
Author: tiborm <ti...@gmail.com>
Authored: Wed Aug 1 11:31:50 2018 -0500
Committer: rmerriman <me...@gmail.com>
Committed: Wed Aug 1 11:31:50 2018 -0500
----------------------------------------------------------------------
.../metron-alerts/package-lock.json | 3719 +++++++++---------
.../metron-alerts/src/app/app-routing.module.ts | 3 +-
.../metron-alerts/src/app/app.component.html | 8 +
.../metron-alerts/src/app/app.component.scss | 18 +
.../metron-alerts/src/app/app.module.ts | 6 +-
.../src/app/pcap/model/pcap.request.ts | 29 +
.../metron-alerts/src/app/pcap/model/pdml.ts | 50 +
.../pcap-filters/pcap-filters.component.html | 52 +
.../pcap-filters/pcap-filters.component.scss | 69 +
.../pcap-filters/pcap-filters.component.spec.ts | 46 +
.../pcap/pcap-filters/pcap-filters.component.ts | 41 +
.../app/pcap/pcap-list/pcap-list.component.html | 37 +
.../app/pcap/pcap-list/pcap-list.component.scss | 21 +
.../pcap/pcap-list/pcap-list.component.spec.ts | 70 +
.../app/pcap/pcap-list/pcap-list.component.ts | 39 +
.../pcap-packet-line.component.html | 19 +
.../pcap-packet-line.component.scss | 17 +
.../pcap-packet-line.component.spec.ts | 1283 ++++++
.../pcap-packet-line.component.ts | 55 +
.../pcap/pcap-packet/pcap-packet.component.html | 21 +
.../pcap/pcap-packet/pcap-packet.component.scss | 36 +
.../pcap-packet/pcap-packet.component.spec.ts | 1283 ++++++
.../pcap/pcap-packet/pcap-packet.component.ts | 39 +
.../pcap/pcap-panel/pcap-panel.component.html | 31 +
.../pcap/pcap-panel/pcap-panel.component.scss | 52 +
.../pcap-panel/pcap-panel.component.spec.ts | 68 +
.../app/pcap/pcap-panel/pcap-panel.component.ts | 75 +
.../metron-alerts/src/app/pcap/pcap.module.ts | 50 +
.../metron-alerts/src/app/pcap/pcap.routing.ts | 27 +
.../src/app/pcap/service/pcap.service.spec.ts | 1752 +++++++++
.../src/app/pcap/service/pcap.service.ts | 68 +
31 files changed, 7304 insertions(+), 1780 deletions(-)
----------------------------------------------------------------------