/** * @param array array * @param offset offset * @return int value. */ public static int getInt(byte[] array, int offset) { return getInt(array, offset, ByteOrder.BIG_ENDIAN); }
/** * @param value value * @param separator separator * @return hex string */ public static String toHexString(short value, String separator) { return toHexString(value, separator, ByteOrder.BIG_ENDIAN); }
/** * @param array array * @param offset offset * @return byte value. */ public static byte getByte(byte[] array, int offset) { validateBounds(array, offset, BYTE_SIZE_IN_BYTES); return array[offset]; }
/** * @param value value * @param separator separator * @param bo bo * @return hex string */ public static String toHexString(short value, String separator, ByteOrder bo) { return toHexString(toByteArray(value, bo), separator); }
/** @param value value */ public Ssh2MpInt(long value) { byte[] valArr = ByteArrays.toByteArray(value); if (Byte.MIN_VALUE <= value && Byte.MAX_VALUE <= value) { valArr = ByteArrays.getSubArray(valArr, 7); } else if (Short.MIN_VALUE <= value && value <= Short.MAX_VALUE) { valArr = ByteArrays.getSubArray(valArr, 6); } else if ((Short.MIN_VALUE << 8) <= value && value <= ((Short.MAX_VALUE + 1 << 8) - 1)) { valArr = ByteArrays.getSubArray(valArr, 5); } else if (Integer.MIN_VALUE <= value && value <= Integer.MAX_VALUE) { valArr = ByteArrays.getSubArray(valArr, 4); } else if ((Integer.MIN_VALUE << 8L) <= value && value <= ((Integer.MAX_VALUE + 1L << 8) - 1)) { valArr = ByteArrays.getSubArray(valArr, 3); } else if ((Integer.MIN_VALUE << 16L) <= value && value <= ((Integer.MAX_VALUE + 1L << 16) - 1)) { valArr = ByteArrays.getSubArray(valArr, 2); } else if ((Integer.MIN_VALUE << 24L) <= value && value <= ((Integer.MAX_VALUE + 1L << 24) - 1)) { valArr = ByteArrays.getSubArray(valArr, 1); } this.value = valArr; this.length = this.value.length; }
private IcmpV4TimeExceededHeader(byte[] rawData, int offset, int length) throws IllegalRawDataException { if (length < ICMPV4_TIME_EXCEEDED_HEADER_SIZE) { StringBuilder sb = new StringBuilder(80); sb.append("The data is too short to build an ICMPv4 Time Exceeded Header(") .append(ICMPV4_TIME_EXCEEDED_HEADER_SIZE) .append(" bytes). data: ") .append(ByteArrays.toHexString(rawData, " ")) .append(", offset: ") .append(offset) .append(", length: ") .append(length); throw new IllegalRawDataException(sb.toString()); } this.unused = ByteArrays.getInt(rawData, UNUSED_OFFSET + offset); }
private IcmpV6MobilePrefixSolicitationHeader(byte[] rawData, int offset, int length) throws IllegalRawDataException { if (length < ICMPV6_MOBILE_PREFIX_SOLICITATION_HEADER_SIZE) { StringBuilder sb = new StringBuilder(); sb.append("The data is too short to build an ICMPv6 Mobile Prefix Solicitation Header(") .append(ICMPV6_MOBILE_PREFIX_SOLICITATION_HEADER_SIZE) .append(" bytes). data: ") .append(ByteArrays.toHexString(rawData, " ")) .append(", offset: ") .append(offset) .append(", length: ") .append(length); throw new IllegalRawDataException(sb.toString()); } this.identifier = ByteArrays.getShort(rawData, IDENTIFIER_OFFSET + offset); this.reserved = ByteArrays.getShort(rawData, RESERVED_OFFSET + offset); }
@Override public IpV6FlowLabel newInstance(byte[] rawData, int offset, int length) { ByteArrays.validateBounds(rawData, offset, length); if (length < INT_SIZE_IN_BYTES) { StringBuilder sb = new StringBuilder(100); sb.append("rawData is too short: ") .append(ByteArrays.toHexString(rawData, " ")) .append(", offset: ") .append(offset) .append(", length: ") .append(length); throw new IllegalArgumentException(sb.toString()); } return IpV6SimpleFlowLabel.newInstance(ByteArrays.getInt(rawData, offset)); }
/** * @param array array * @param offset offset * @param bo bo * @return a new Inet4Address object. */ public static Inet4Address getInet4Address(byte[] array, int offset, ByteOrder bo) { validateBounds(array, offset, INET4_ADDRESS_SIZE_IN_BYTES); if (bo == null) { throw new NullPointerException(" bo: " + bo); } try { if (bo.equals(LITTLE_ENDIAN)) { return (Inet4Address) InetAddress.getByAddress( reverse(getSubArray(array, offset, INET4_ADDRESS_SIZE_IN_BYTES))); } else { return (Inet4Address) InetAddress.getByAddress(getSubArray(array, offset, INET4_ADDRESS_SIZE_IN_BYTES)); } } catch (UnknownHostException e) { throw new AssertionError(e); } }
private IpV4InternetTimestampOptionAddressPrespecified(byte[] rawData, int offset, int length) throws IllegalRawDataException { if ((length % INT_SIZE_IN_BYTES) != 0) { StringBuilder sb = new StringBuilder(100); sb.append("The raw data length must be an integer multiple of 4 octets long." + " rawData: ") .append(ByteArrays.toHexString(rawData, " ")) .append(", offset: ") .append(offset) .append(", length: ") .append(length); throw new IllegalRawDataException(sb.toString()); } this.address = ByteArrays.getInet4Address(rawData, 0 + offset); this.timestamps = new ArrayList<Integer>(); for (int i = INT_SIZE_IN_BYTES; i < length; i += INT_SIZE_IN_BYTES) { timestamps.add(ByteArrays.getInt(rawData, i + offset)); } }
private SnapHeader(byte[] rawData, int offset, int length) throws IllegalRawDataException { if (length < SNAP_HEADER_SIZE) { StringBuilder sb = new StringBuilder(200); sb.append("The data is too short to build a SNAP header(") .append(SNAP_HEADER_SIZE) .append(" bytes). data: ") .append(ByteArrays.toHexString(rawData, " ")) .append(", offset: ") .append(offset) .append(", length: ") .append(length); throw new IllegalRawDataException(sb.toString()); } this.oui = Oui.getInstance(ByteArrays.getSubArray(rawData, offset + OUI_OFFSET, 3)); this.protocolId = EtherType.getInstance(ByteArrays.getShort(rawData, offset + PROTOCOL_ID_OFFSET)); }
private IcmpV6CommonHeader(byte[] rawData, int offset, int length) throws IllegalRawDataException { if (length < ICMPV6_COMMON_HEADER_SIZE) { StringBuilder sb = new StringBuilder(80); sb.append("The data is too short to build an ICMPv6 common header(") .append(ICMPV6_COMMON_HEADER_SIZE) .append(" bytes). data: ") .append(ByteArrays.toHexString(rawData, " ")) .append(", offset: ") .append(offset) .append(", length: ") .append(length); throw new IllegalRawDataException(sb.toString()); } this.type = IcmpV6Type.getInstance(ByteArrays.getByte(rawData, TYPE_OFFSET + offset)); this.code = IcmpV6Code.getInstance(type.value(), ByteArrays.getByte(rawData, CODE_OFFSET + offset)); this.checksum = ByteArrays.getShort(rawData, CHECKSUM_OFFSET + offset); }
private EthernetHeader(byte[] rawData, int offset, int length) throws IllegalRawDataException { if (length < ETHERNET_HEADER_SIZE) { StringBuilder sb = new StringBuilder(100); sb.append("The data is too short to build an Ethernet header(") .append(ETHERNET_HEADER_SIZE) .append(" bytes). data: ") .append(ByteArrays.toHexString(rawData, " ")) .append(", offset: ") .append(offset) .append(", length: ") .append(length); throw new IllegalRawDataException(sb.toString()); } this.dstAddr = ByteArrays.getMacAddress(rawData, DST_ADDR_OFFSET + offset); this.srcAddr = ByteArrays.getMacAddress(rawData, SRC_ADDR_OFFSET + offset); this.type = EtherType.getInstance(ByteArrays.getShort(rawData, TYPE_OFFSET + offset)); }
/** * @param value value * @return byte array */ public static byte[] toByteArray(short value) { return toByteArray(value, ByteOrder.BIG_ENDIAN); }
/** * @param array array * @param offset offset * @return sub array */ public static byte[] getSubArray(byte[] array, int offset) { return getSubArray(array, offset, array.length - offset); }
/** * @param array array * @param offset offset * @return long value */ public static long getLong(byte[] array, int offset) { return getLong(array, offset, ByteOrder.BIG_ENDIAN); }
/** * @param array array * @param offset offset * @return short value */ public static short getShort(byte[] array, int offset) { return getShort(array, offset, ByteOrder.BIG_ENDIAN); }
private IcmpV6TimeExceededHeader(byte[] rawData, int offset, int length) throws IllegalRawDataException { if (length < ICMPV6_TIME_EXCEEDED_HEADER_SIZE) { StringBuilder sb = new StringBuilder(80); sb.append("The data is too short to build an ICMPv6 Time Exceeded Header(") .append(ICMPV6_TIME_EXCEEDED_HEADER_SIZE) .append(" bytes). data: ") .append(ByteArrays.toHexString(rawData, " ")) .append(", offset: ") .append(offset) .append(", length: ") .append(length); throw new IllegalRawDataException(sb.toString()); } this.unused = ByteArrays.getInt(rawData, UNUSED_OFFSET + offset); }
private IcmpV6HomeAgentAddressDiscoveryRequestHeader(byte[] rawData, int offset, int length) throws IllegalRawDataException { if (length < ICMPV6_HOME_AGENT_ADDRESS_DISCOVERY_REQUEST_HEADER_SIZE) { StringBuilder sb = new StringBuilder(); sb.append( "The data is too short to build an ICMPv6 Home Agent Address Discovery Request Header(") .append(ICMPV6_HOME_AGENT_ADDRESS_DISCOVERY_REQUEST_HEADER_SIZE) .append(" bytes). data: ") .append(ByteArrays.toHexString(rawData, " ")) .append(", offset: ") .append(offset) .append(", length: ") .append(length); throw new IllegalRawDataException(sb.toString()); } this.identifier = ByteArrays.getShort(rawData, IDENTIFIER_OFFSET + offset); this.reserved = ByteArrays.getShort(rawData, RESERVED_OFFSET + offset); }
/** * @param value value * @param separator separator * @param bo bo * @return hex string */ public static String toHexString(int value, String separator, ByteOrder bo) { return toHexString(toByteArray(value, bo), separator); }