浏览代码

Added more content to the Ip.mjs file, required for other functions.

Callum Fraser 7 年之前
父节点
当前提交
1920e9c7fb
共有 1 个文件被更改,包括 180 次插入0 次删除
  1. 180 0
      src/core/lib/Ip.mjs

+ 180 - 0
src/core/lib/Ip.mjs

@@ -406,3 +406,183 @@ export const IPV4_REGEX = /^\s*((?:\d{1,3}\.){3}\d{1,3})\s*$/;
 * @default
 */
 export const IPV6_REGEX = /^\s*(((?=.*::)(?!.*::.+::)(::)?([\dA-F]{1,4}:(:|\b)|){5}|([\dA-F]{1,4}:){6})((([\dA-F]{1,4}((?!\4)::|:\b|(?![\dA-F])))|(?!\3\4)){2}|(((2[0-4]|1\d|[1-9])?\d|25[0-5])\.?\b){4}))\s*$/i;
+
+/**
+     * Lookup table for Internet Protocols.
+     * Taken from https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml
+     *
+     * @private
+     * @constant
+     */
+export const _protocolLookup = {
+    0: {keyword: "HOPOPT", protocol: "IPv6 Hop-by-Hop Option"},
+    1: {keyword: "ICMP", protocol: "Internet Control Message"},
+    2: {keyword: "IGMP", protocol: "Internet Group Management"},
+    3: {keyword: "GGP", protocol: "Gateway-to-Gateway"},
+    4: {keyword: "IPv4", protocol: "IPv4 encapsulation"},
+    5: {keyword: "ST", protocol: "Stream"},
+    6: {keyword: "TCP", protocol: "Transmission Control"},
+    7: {keyword: "CBT", protocol: "CBT"},
+    8: {keyword: "EGP", protocol: "Exterior Gateway Protocol"},
+    9: {keyword: "IGP", protocol: "any private interior gateway (used by Cisco for their IGRP)"},
+    10: {keyword: "BBN-RCC-MON", protocol: "BBN RCC Monitoring"},
+    11: {keyword: "NVP-II", protocol: "Network Voice Protocol"},
+    12: {keyword: "PUP", protocol: "PUP"},
+    13: {keyword: "ARGUS (deprecated)", protocol: "ARGUS"},
+    14: {keyword: "EMCON", protocol: "EMCON"},
+    15: {keyword: "XNET", protocol: "Cross Net Debugger"},
+    16: {keyword: "CHAOS", protocol: "Chaos"},
+    17: {keyword: "UDP", protocol: "User Datagram"},
+    18: {keyword: "MUX", protocol: "Multiplexing"},
+    19: {keyword: "DCN-MEAS", protocol: "DCN Measurement Subsystems"},
+    20: {keyword: "HMP", protocol: "Host Monitoring"},
+    21: {keyword: "PRM", protocol: "Packet Radio Measurement"},
+    22: {keyword: "XNS-IDP", protocol: "XEROX NS IDP"},
+    23: {keyword: "TRUNK-1", protocol: "Trunk-1"},
+    24: {keyword: "TRUNK-2", protocol: "Trunk-2"},
+    25: {keyword: "LEAF-1", protocol: "Leaf-1"},
+    26: {keyword: "LEAF-2", protocol: "Leaf-2"},
+    27: {keyword: "RDP", protocol: "Reliable Data Protocol"},
+    28: {keyword: "IRTP", protocol: "Internet Reliable Transaction"},
+    29: {keyword: "ISO-TP4", protocol: "ISO Transport Protocol Class 4"},
+    30: {keyword: "NETBLT", protocol: "Bulk Data Transfer Protocol"},
+    31: {keyword: "MFE-NSP", protocol: "MFE Network Services Protocol"},
+    32: {keyword: "MERIT-INP", protocol: "MERIT Internodal Protocol"},
+    33: {keyword: "DCCP", protocol: "Datagram Congestion Control Protocol"},
+    34: {keyword: "3PC", protocol: "Third Party Connect Protocol"},
+    35: {keyword: "IDPR", protocol: "Inter-Domain Policy Routing Protocol"},
+    36: {keyword: "XTP", protocol: "XTP"},
+    37: {keyword: "DDP", protocol: "Datagram Delivery Protocol"},
+    38: {keyword: "IDPR-CMTP", protocol: "IDPR Control Message Transport Proto"},
+    39: {keyword: "TP++", protocol: "TP++ Transport Protocol"},
+    40: {keyword: "IL", protocol: "IL Transport Protocol"},
+    41: {keyword: "IPv6", protocol: "IPv6 encapsulation"},
+    42: {keyword: "SDRP", protocol: "Source Demand Routing Protocol"},
+    43: {keyword: "IPv6-Route", protocol: "Routing Header for IPv6"},
+    44: {keyword: "IPv6-Frag", protocol: "Fragment Header for IPv6"},
+    45: {keyword: "IDRP", protocol: "Inter-Domain Routing Protocol"},
+    46: {keyword: "RSVP", protocol: "Reservation Protocol"},
+    47: {keyword: "GRE", protocol: "Generic Routing Encapsulation"},
+    48: {keyword: "DSR", protocol: "Dynamic Source Routing Protocol"},
+    49: {keyword: "BNA", protocol: "BNA"},
+    50: {keyword: "ESP", protocol: "Encap Security Payload"},
+    51: {keyword: "AH", protocol: "Authentication Header"},
+    52: {keyword: "I-NLSP", protocol: "Integrated Net Layer Security  TUBA"},
+    53: {keyword: "SWIPE (deprecated)", protocol: "IP with Encryption"},
+    54: {keyword: "NARP", protocol: "NBMA Address Resolution Protocol"},
+    55: {keyword: "MOBILE", protocol: "IP Mobility"},
+    56: {keyword: "TLSP", protocol: "Transport Layer Security Protocol using Kryptonet key management"},
+    57: {keyword: "SKIP", protocol: "SKIP"},
+    58: {keyword: "IPv6-ICMP", protocol: "ICMP for IPv6"},
+    59: {keyword: "IPv6-NoNxt", protocol: "No Next Header for IPv6"},
+    60: {keyword: "IPv6-Opts", protocol: "Destination Options for IPv6"},
+    61: {keyword: "", protocol: "any host internal protocol"},
+    62: {keyword: "CFTP", protocol: "CFTP"},
+    63: {keyword: "", protocol: "any local network"},
+    64: {keyword: "SAT-EXPAK", protocol: "SATNET and Backroom EXPAK"},
+    65: {keyword: "KRYPTOLAN", protocol: "Kryptolan"},
+    66: {keyword: "RVD", protocol: "MIT Remote Virtual Disk Protocol"},
+    67: {keyword: "IPPC", protocol: "Internet Pluribus Packet Core"},
+    68: {keyword: "", protocol: "any distributed file system"},
+    69: {keyword: "SAT-MON", protocol: "SATNET Monitoring"},
+    70: {keyword: "VISA", protocol: "VISA Protocol"},
+    71: {keyword: "IPCV", protocol: "Internet Packet Core Utility"},
+    72: {keyword: "CPNX", protocol: "Computer Protocol Network Executive"},
+    73: {keyword: "CPHB", protocol: "Computer Protocol Heart Beat"},
+    74: {keyword: "WSN", protocol: "Wang Span Network"},
+    75: {keyword: "PVP", protocol: "Packet Video Protocol"},
+    76: {keyword: "BR-SAT-MON", protocol: "Backroom SATNET Monitoring"},
+    77: {keyword: "SUN-ND", protocol: "SUN ND PROTOCOL-Temporary"},
+    78: {keyword: "WB-MON", protocol: "WIDEBAND Monitoring"},
+    79: {keyword: "WB-EXPAK", protocol: "WIDEBAND EXPAK"},
+    80: {keyword: "ISO-IP", protocol: "ISO Internet Protocol"},
+    81: {keyword: "VMTP", protocol: "VMTP"},
+    82: {keyword: "SECURE-VMTP", protocol: "SECURE-VMTP"},
+    83: {keyword: "VINES", protocol: "VINES"},
+    84: {keyword: "TTP", protocol: "Transaction Transport Protocol"},
+    85: {keyword: "NSFNET-IGP", protocol: "NSFNET-IGP"},
+    86: {keyword: "DGP", protocol: "Dissimilar Gateway Protocol"},
+    87: {keyword: "TCF", protocol: "TCF"},
+    88: {keyword: "EIGRP", protocol: "EIGRP"},
+    89: {keyword: "OSPFIGP", protocol: "OSPFIGP"},
+    90: {keyword: "Sprite-RPC", protocol: "Sprite RPC Protocol"},
+    91: {keyword: "LARP", protocol: "Locus Address Resolution Protocol"},
+    92: {keyword: "MTP", protocol: "Multicast Transport Protocol"},
+    93: {keyword: "AX.25", protocol: "AX.25 Frames"},
+    94: {keyword: "IPIP", protocol: "IP-within-IP Encapsulation Protocol"},
+    95: {keyword: "MICP (deprecated)", protocol: "Mobile Internetworking Control Pro."},
+    96: {keyword: "SCC-SP", protocol: "Semaphore Communications Sec. Pro."},
+    97: {keyword: "ETHERIP", protocol: "Ethernet-within-IP Encapsulation"},
+    98: {keyword: "ENCAP", protocol: "Encapsulation Header"},
+    99: {keyword: "", protocol: "any private encryption scheme"},
+    100: {keyword: "GMTP", protocol: "GMTP"},
+    101: {keyword: "IFMP", protocol: "Ipsilon Flow Management Protocol"},
+    102: {keyword: "PNNI", protocol: "PNNI over IP"},
+    103: {keyword: "PIM", protocol: "Protocol Independent Multicast"},
+    104: {keyword: "ARIS", protocol: "ARIS"},
+    105: {keyword: "SCPS", protocol: "SCPS"},
+    106: {keyword: "QNX", protocol: "QNX"},
+    107: {keyword: "A/N", protocol: "Active Networks"},
+    108: {keyword: "IPComp", protocol: "IP Payload Compression Protocol"},
+    109: {keyword: "SNP", protocol: "Sitara Networks Protocol"},
+    110: {keyword: "Compaq-Peer", protocol: "Compaq Peer Protocol"},
+    111: {keyword: "IPX-in-IP", protocol: "IPX in IP"},
+    112: {keyword: "VRRP", protocol: "Virtual Router Redundancy Protocol"},
+    113: {keyword: "PGM", protocol: "PGM Reliable Transport Protocol"},
+    114: {keyword: "", protocol: "any 0-hop protocol"},
+    115: {keyword: "L2TP", protocol: "Layer Two Tunneling Protocol"},
+    116: {keyword: "DDX", protocol: "D-II Data Exchange (DDX)"},
+    117: {keyword: "IATP", protocol: "Interactive Agent Transfer Protocol"},
+    118: {keyword: "STP", protocol: "Schedule Transfer Protocol"},
+    119: {keyword: "SRP", protocol: "SpectraLink Radio Protocol"},
+    120: {keyword: "UTI", protocol: "UTI"},
+    121: {keyword: "SMP", protocol: "Simple Message Protocol"},
+    122: {keyword: "SM (deprecated)", protocol: "Simple Multicast Protocol"},
+    123: {keyword: "PTP", protocol: "Performance Transparency Protocol"},
+    124: {keyword: "ISIS over IPv4", protocol: ""},
+    125: {keyword: "FIRE", protocol: ""},
+    126: {keyword: "CRTP", protocol: "Combat Radio Transport Protocol"},
+    127: {keyword: "CRUDP", protocol: "Combat Radio User Datagram"},
+    128: {keyword: "SSCOPMCE", protocol: ""},
+    129: {keyword: "IPLT", protocol: ""},
+    130: {keyword: "SPS", protocol: "Secure Packet Shield"},
+    131: {keyword: "PIPE", protocol: "Private IP Encapsulation within IP"},
+    132: {keyword: "SCTP", protocol: "Stream Control Transmission Protocol"},
+    133: {keyword: "FC", protocol: "Fibre Channel"},
+    134: {keyword: "RSVP-E2E-IGNORE", protocol: ""},
+    135: {keyword: "Mobility Header", protocol: ""},
+    136: {keyword: "UDPLite", protocol: ""},
+    137: {keyword: "MPLS-in-IP", protocol: ""},
+    138: {keyword: "manet", protocol: "MANET Protocols"},
+    139: {keyword: "HIP", protocol: "Host Identity Protocol"},
+    140: {keyword: "Shim6", protocol: "Shim6 Protocol"},
+    141: {keyword: "WESP", protocol: "Wrapped Encapsulating Security Payload"},
+    142: {keyword: "ROHC", protocol: "Robust Header Compression"},
+    253: {keyword: "", protocol: "Use for experimentation and testing"},
+    254: {keyword: "", protocol: "Use for experimentation and testing"},
+    255: {keyword: "Reserved", protocol: ""}
+};
+
+
+/**
+     * Generates an checksum, based upon provided raw input, for use with TCP/IP.
+     *
+     * @private
+     * @param {byteArray} input
+     * @returns {string}
+     */
+export function calculateTCPIPChecksum(input){
+    let csum = 0;
+
+    for (let i = 0; i < input.length; i++) {
+        if (i % 2 === 0) {
+            csum += (input[i] << 8);
+        } else {
+            csum += input[i];
+        }
+    }
+
+    csum = (csum >> 16) + (csum & 0xffff);
+
+    return Utils.hex(0xffff - csum);
+}