/******************************************************************************* * gMix open source project - https://svs.informatik.uni-hamburg.de/gmix/ * Copyright (C) 2014 SVS * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. *******************************************************************************/ package staticContent.evaluation.traceParser.engine.protocolHeaderParser; import java.net.InetAddress; import staticContent.framework.util.Util; public class IPpacket { public enum IPprotocol { IPv6_HOPOPT, // 0 ICMP, IGMP, GGP, IPv4, ST, TCP, CBT, EGP, IGP, BBN_RCC_MON, // 10 NVP_II, PUP, ARGUS, EMCON, XNET, CHAOS, UDP, MUX, DCN_MEAS, HMP, // 20 PRM, XNS_IDP, TRUNK_1, TRUNK_2, LEAF_1, LEAF_2, RDP, IRTP, ISO_TP4, NETBLT, // 30 MFE_NSP, MERIT_INP, DCCP, _3PC, IDPR, XTP, DDP, IDPR_CMTP, TPplusPlus, IL, // 40 IPv6, SDRP, IPv6_Route, IPv6_Frag, IDRP, RSVP, GRE, MHRP, BNA, ESP, // 50 IPv6_AH, I_NLSP, SWIPE, NARP, MOBILE, TLSP, SKIP, IPv6_ICMP, IPv6_NoNxt, IPv6_Dst_Opts, // 60 AnyHostInternalProtocol, CFTP, AnyLocalNetwork, SAT_EXPAK, KRYPTOLAN, RVD, IPPC, AnyDistributedFileSystem, SAT_MON, VISA, // 70 IPCV, CPNX, CPHB, WSN, PVP, BR_SAT_MON, SUN_ND, WB_MON, WB_EXPAK, ISO_IP, // 80 VMTP, SECURE_VMTP, VINES, TTP, NSFNET_IGP, DGP, TCF, EIGRP, OSPF, Sprite_RPC, // 90 LARP, MTP, AX_25, IPIP, MICP, SCC_SP, ETHERIP, ENCAP, AnyPrivateEncryptionScheme, GMTP, // 100 IFMP, PNNI, PIM, ARIS, SCPS, QNX, A_N, IPComp, SNP, Compaq_Peer, // 110 IPX_in_IP, VRRP, PGM, AnyZeroHopProtocol, L2TP, DDX, IATP, STP, SRP, UTI, // 120 SMP, SM, PTP, IS_ISoverIPv4, FIRE, CRTP, CRUDP, SSCOPMCE, IPLT, SPS, // 130 PIPE, SCTP, FC, RSVP_E2E_IGNORE, IPv6_MobilityHeader, UDPlite, MPLS_in_IP, manet, HIP, Shim6, // 140 UNASSIGNED // 141 - 255 }; public static IPprotocol getIPprotocolNumberByByte(byte code) { int index = Util.unsignedByteToShort(code); if (index > 140) return IPprotocol.UNASSIGNED; else return IPprotocol.values()[index]; } public static boolean isIPv6ExtensionHeader(int code) { if ( code == 0 || code == 60 || code == 43 || code == 44 || code == 51 || code == 50 || code == 60 || code == 135) return true; else return false; } public static boolean isIPv6ExtensionHeader(IPprotocol code) { return isIPv6ExtensionHeader(code); } public static boolean isIPv4(byte[] packet) { return getVersion(packet) == 4; } public static boolean isIPv6(byte[] packet) { return getVersion(packet) == 6; } public static int getVersion(byte[] packet) { return (packet[0] & (0xf0)) >> 4; } public static int getHeaderLengthStat(byte[] packet) { if (isIPv4(packet)) return IPv4Packet.getHeaderLengthStat(packet); else return IPv6Packet.getHeaderLengthStat(packet); } /** * header length + payload length in byte */ public static int getTotalLength(byte[] packet) { if (isIPv4(packet)) return IPv4Packet.getTotalLength(packet); else return IPv6Packet.getPayloadLengthIncludingExtensionHeaders(packet) + 40; } public static IPprotocol getProtocol(byte[] packet) { if (isIPv4(packet)) return IPv4Packet.getProtocol(packet); else return IPv6Packet.getProtocol(packet); } public static int getProtocolAsInt(byte[] packet) { if (isIPv4(packet)) return IPv4Packet.getProtocolAsInt(packet); else return IPv6Packet.getProtocolAsInt(packet); } public static String getProtocolAsHex(byte[] packet) { if (isIPv4(packet)) return IPv4Packet.getProtocolAsHex(packet); else return IPv6Packet.getProtocolAsHex(packet); } public static String getSrcIPasString(byte[] packet) { if (isIPv4(packet)) return IPv4Packet.getSrcIPasString(packet); else return IPv6Packet.getSrcIPasString(packet); } public static InetAddress getSrcIP(byte[] packet) { if (isIPv4(packet)) return IPv4Packet.getSrcIP(packet); else return IPv6Packet.getSrcIP(packet); } public static String getDstIPasString(byte[] packet) { if (isIPv4(packet)) return IPv4Packet.getDstIPasString(packet); else return IPv6Packet.getDstIPasString(packet); } public static InetAddress getDstIP(byte[] packet) { if (isIPv4(packet)) return IPv4Packet.getDstIP(packet); else return IPv6Packet.getDstIP(packet); } public static boolean containsPayload(byte[] packet) { if (isIPv4(packet)) return IPv4Packet.containsPayload(packet); else return IPv6Packet.containsPayload(packet); } public static byte[] getPayloadStat(byte[] packet) { if (isIPv4(packet)) return IPv4Packet.getPayloadStat(packet); else return IPv6Packet.getPayloadStat(packet); } public static String toString(byte[] packet) { if (isIPv4(packet)) return IPv4Packet.toString(packet); else return IPv6Packet.toString(packet); } }