/** * @param array array * @param offset offset * @return sub array */ public static byte[] getSubArray(byte[] array, int offset) { return getSubArray(array, offset, array.length - offset); }
private IllegalRadiotapData(byte[] rawData, int offset, int length) { this.rawData = ByteArrays.getSubArray(rawData, offset, length); }
private IllegalDnsRData(byte[] rawData, int offset, int length) { this.rawData = ByteArrays.getSubArray(rawData, offset, length); }
private UnknownRadiotapData(byte[] rawData, int offset, int length) { this.rawData = ByteArrays.getSubArray(rawData, offset, length); }
private DnsRDataNull(byte[] rawData, int offset, int length) { this.rawData = ByteArrays.getSubArray(rawData, offset, length); }
private RadiotapDataPad(byte[] pad, int offset, int length) { this.pad = ByteArrays.getSubArray(pad, offset, length); }
private UnknownDnsRData(byte[] rawData, int offset, int length) { this.rawData = ByteArrays.getSubArray(rawData, offset, length); }
/** @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; }
/** * @param rawData rawData * @param offset offset * @param length length * @throws IllegalRawDataException if parsing the raw data fails. */ private Dot11MeshIdElement(byte[] rawData, int offset, int length) throws IllegalRawDataException { super(rawData, offset, length, Dot11InformationElementId.MESH_ID); int infoLen = getLengthAsInt(); if (infoLen == 0) { this.meshId = new byte[0]; } else { this.meshId = ByteArrays.getSubArray(rawData, offset + 2, infoLen); } }
/** * @param rawData rawData * @param offset offset * @param length length * @throws IllegalRawDataException if parsing the raw data fails. */ private Dot11VendorSpecificElement(byte[] rawData, int offset, int length) throws IllegalRawDataException { super(rawData, offset, length, Dot11InformationElementId.VENDOR_SPECIFIC); int infoLen = getLengthAsInt(); if (infoLen == 0) { this.information = new byte[0]; } else { this.information = ByteArrays.getSubArray(rawData, offset + 2, infoLen); } }
/** * @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); } }
/** * @param array array * @param offset offset * @param bo bo * @return a new Inet6Address object. */ public static Inet6Address getInet6Address(byte[] array, int offset, ByteOrder bo) { validateBounds(array, offset, INET6_ADDRESS_SIZE_IN_BYTES); if (bo == null) { throw new NullPointerException(" bo: " + bo); } try { if (bo.equals(LITTLE_ENDIAN)) { return (Inet6Address) InetAddress.getByAddress( reverse(getSubArray(array, offset, INET6_ADDRESS_SIZE_IN_BYTES))); } else { return (Inet6Address) InetAddress.getByAddress(getSubArray(array, offset, INET6_ADDRESS_SIZE_IN_BYTES)); } } catch (UnknownHostException e) { throw new AssertionError(e); } }
/** * @param array array * @param offset offset * @param bo bo * @return a new MacAddress object. */ public static MacAddress getMacAddress(byte[] array, int offset, ByteOrder bo) { validateBounds(array, offset, MacAddress.SIZE_IN_BYTES); if (bo == null) { throw new NullPointerException(" bo: " + bo); } if (bo.equals(LITTLE_ENDIAN)) { return MacAddress.getByAddress(reverse(getSubArray(array, offset, MacAddress.SIZE_IN_BYTES))); } else { return MacAddress.getByAddress(getSubArray(array, offset, MacAddress.SIZE_IN_BYTES)); } }
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)); }
/** @return a byte array representation of this value. */ public byte[] valueAsByteArray() { return ByteArrays.getSubArray(ByteArrays.toByteArray(value()), 1, 3); }
private UnknownIpV6Option(byte[] rawData, int offset, int length) throws IllegalRawDataException { if (length < 2) { StringBuilder sb = new StringBuilder(100); sb.append("The raw data length must be more than 1. rawData: ") .append(ByteArrays.toHexString(rawData, " ")) .append(", offset: ") .append(offset) .append(", length: ") .append(length); throw new IllegalRawDataException(sb.toString()); } this.type = IpV6OptionType.getInstance(rawData[offset]); this.dataLen = rawData[1 + offset]; if (length - 2 < this.dataLen) { StringBuilder sb = new StringBuilder(100); sb.append("The raw data is too short to build this option(") .append(this.dataLen + 2) .append("). data: ") .append(ByteArrays.toHexString(rawData, " ")) .append(", offset: ") .append(offset) .append(", length: ") .append(length); throw new IllegalRawDataException(sb.toString()); } this.data = ByteArrays.getSubArray(rawData, 2 + offset, dataLen); }
/** * @param array array * @param offset offset * @param length length * @param bo bo * @return a new LinkLayerAddress object. */ public static LinkLayerAddress getLinkLayerAddress( byte[] array, int offset, int length, ByteOrder bo) { validateBounds(array, offset, length); if (bo == null) { throw new NullPointerException(" bo: " + bo); } if (bo.equals(LITTLE_ENDIAN)) { return LinkLayerAddress.getByAddress(reverse(getSubArray(array, offset, length))); } else { return LinkLayerAddress.getByAddress(getSubArray(array, offset, length)); } }
private UnknownIpV4Option(byte[] rawData, int offset, int length) throws IllegalRawDataException { if (length < 2) { StringBuilder sb = new StringBuilder(100); sb.append("The raw data length must be more than 1. rawData: ") .append(ByteArrays.toHexString(rawData, " ")) .append(", offset: ") .append(offset) .append(", length: ") .append(length); throw new IllegalRawDataException(sb.toString()); } this.type = IpV4OptionType.getInstance(rawData[offset]); this.length = rawData[1 + offset]; int lengthFieldAsInt = getLengthAsInt(); if (length < lengthFieldAsInt) { StringBuilder sb = new StringBuilder(100); sb.append("The raw data is too short to build this option (") .append(lengthFieldAsInt) .append("). data: ") .append(ByteArrays.toHexString(rawData, " ")) .append(", offset: ") .append(offset) .append(", length: ") .append(length); throw new IllegalRawDataException(sb.toString()); } this.data = ByteArrays.getSubArray(rawData, 2 + offset, lengthFieldAsInt - 2); }
/** * @param rawData rawData * @param offset offset * @param length length * @throws IllegalRawDataException if parsing the raw data fails. */ private Dot11SupportedOperatingClassesElement(byte[] rawData, int offset, int length) throws IllegalRawDataException { super(rawData, offset, length, Dot11InformationElementId.SUPPORTED_OPERATING_CLASSES); int infoLen = getLengthAsInt(); if (infoLen < 1) { throw new IllegalRawDataException( "The length must be more than 0 but is actually: " + infoLen); } this.currentOperatingClass = rawData[offset + 2]; if (infoLen == 1) { this.operatingClasses = new byte[0]; } else { this.operatingClasses = ByteArrays.getSubArray(rawData, offset + 3, infoLen - 1); } }
protected AbstractPppPacket(byte[] rawData, int offset, int length, AbstractPppHeader header) throws IllegalRawDataException { int payloadAndPadLength = length - header.length(); if (payloadAndPadLength > 0) { int payloadOffset = offset + header.length(); this.payload = PacketFactories.getFactory(Packet.class, PppDllProtocol.class) .newInstance(rawData, payloadOffset, payloadAndPadLength, header.getProtocol()); int padLength = payloadAndPadLength - payload.length(); if (padLength > 0) { this.pad = ByteArrays.getSubArray(rawData, payloadOffset + payload.length(), padLength); } else { this.pad = new byte[0]; } } else { this.payload = null; this.pad = new byte[0]; } }