+++ /dev/null
-// This is a generated file! Please edit source .ksy file and use kaitai-struct-compiler to rebuild
-package edu.uci.iotproject;
-
-import io.kaitai.struct.ByteBufferKaitaiStream;
-import io.kaitai.struct.KaitaiStruct;
-import io.kaitai.struct.KaitaiStream;
-import java.io.IOException;
-import java.util.Map;
-import java.util.HashMap;
-import java.util.ArrayList;
-import java.nio.charset.Charset;
-
-import java.nio.BufferUnderflowException;
-
-
-/**
- * (No support for Auth-Name + Add-Name for simplicity)
- */
-public class DnsPacket extends KaitaiStruct {
- public static DnsPacket fromFile(String fileName) throws IOException {
- return new DnsPacket(new ByteBufferKaitaiStream(fileName));
- }
-
- public enum ClassType {
- IN_CLASS(1),
- CS(2),
- CH(3),
- HS(4);
-
- private final long id;
- ClassType(long id) { this.id = id; }
- public long id() { return id; }
- private static final Map<Long, ClassType> byId = new HashMap<Long, ClassType>(4);
- static {
- for (ClassType e : ClassType.values())
- byId.put(e.id(), e);
- }
- public static ClassType byId(long id) { return byId.get(id); }
- }
-
- public enum TypeType {
- A(1),
- NS(2),
- MD(3),
- MF(4),
- CNAME(5),
- SOE(6),
- MB(7),
- MG(8),
- MR(9),
- NULL(10),
- WKS(11),
- PTR(12),
- HINFO(13),
- MINFO(14),
- MX(15),
- TXT(16);
-
- private final long id;
- TypeType(long id) { this.id = id; }
- public long id() { return id; }
- private static final Map<Long, TypeType> byId = new HashMap<Long, TypeType>(16);
- static {
- for (TypeType e : TypeType.values())
- byId.put(e.id(), e);
- }
- public static TypeType byId(long id) { return byId.get(id); }
- }
-
- public DnsPacket(KaitaiStream _io) {
- this(_io, null, null);
- }
-
- public DnsPacket(KaitaiStream _io, KaitaiStruct _parent) {
- this(_io, _parent, null);
- }
-
- public DnsPacket(KaitaiStream _io, KaitaiStruct _parent, DnsPacket _root) {
- super(_io);
- this._parent = _parent;
- this._root = _root == null ? this : _root;
- _read();
- }
- private void _read() {
- this.transactionId = this._io.readU2be();
- this.flags = new PacketFlags(this._io, this, _root);
- this.qdcount = this._io.readU2be();
- this.ancount = this._io.readU2be();
- this.nscount = this._io.readU2be();
- this.arcount = this._io.readU2be();
- queries = new ArrayList<Query>((int) (qdcount()));
- for (int i = 0; i < qdcount(); i++) {
- this.queries.add(new Query(this._io, this, _root));
- }
- answers = new ArrayList<Answer>((int) (ancount()));
- for (int i = 0; i < ancount(); i++) {
- this.answers.add(new Answer(this._io, this, _root));
- }
- }
- public static class PointerStruct extends KaitaiStruct {
- public static PointerStruct fromFile(String fileName) throws IOException {
- return new PointerStruct(new ByteBufferKaitaiStream(fileName));
- }
-
- public PointerStruct(KaitaiStream _io) {
- this(_io, null, null);
- }
-
- public PointerStruct(KaitaiStream _io, DnsPacket.Label _parent) {
- this(_io, _parent, null);
- }
-
- public PointerStruct(KaitaiStream _io, DnsPacket.Label _parent, DnsPacket _root) {
- super(_io);
- this._parent = _parent;
- this._root = _root;
- _read();
- }
- private void _read() {
- this.value = this._io.readU1();
- }
- private DomainName contents;
- public DomainName contents() {
- if (this.contents != null)
- return this.contents;
- KaitaiStream io = _root._io();
- long _pos = io.pos();
- io.seek(value());
- this.contents = new DomainName(io, this, _root);
- io.seek(_pos);
- return this.contents;
- }
- private int value;
- private DnsPacket _root;
- private DnsPacket.Label _parent;
-
- /**
- * Read one byte, then offset to that position, read one domain-name and return
- */
- public int value() { return value; }
- public DnsPacket _root() { return _root; }
- public DnsPacket.Label _parent() { return _parent; }
- }
- public static class Label extends KaitaiStruct {
- public static Label fromFile(String fileName) throws IOException {
- return new Label(new ByteBufferKaitaiStream(fileName));
- }
-
- public Label(KaitaiStream _io) {
- this(_io, null, null);
- }
-
- public Label(KaitaiStream _io, DnsPacket.DomainName _parent) {
- this(_io, _parent, null);
- }
-
- public Label(KaitaiStream _io, DnsPacket.DomainName _parent, DnsPacket _root) {
- super(_io);
- this._parent = _parent;
- this._root = _root;
- _read();
- }
- private void _read() {
- this.length = this._io.readU1();
- if (isPointer()) {
- this.pointer = new PointerStruct(this._io, this, _root);
- }
- // TODO: This part causes BufferUnderflowException
- if (!(isPointer())) {
- try {
- this.name = new String(this._io.readBytes(length()), Charset.forName("ASCII"));
- } catch (BufferUnderflowException ex) {
- //ex.printStackTrace();
- this.name = null;
- }
- }
- }
- private Boolean isPointer;
- public Boolean isPointer() {
- if (this.isPointer != null)
- return this.isPointer;
- boolean _tmp = (boolean) (length() == 192);
- this.isPointer = _tmp;
- return this.isPointer;
- }
- private int length;
- private PointerStruct pointer;
- private String name;
- private DnsPacket _root;
- private DnsPacket.DomainName _parent;
-
- /**
- * RFC1035 4.1.4: If the first two bits are raised it's a pointer-offset to a previously defined name
- */
- public int length() { return length; }
- public PointerStruct pointer() { return pointer; }
-
- /**
- * Otherwise its a string the length of the length value
- */
- public String name() { return name; }
- public DnsPacket _root() { return _root; }
- public DnsPacket.DomainName _parent() { return _parent; }
- }
- public static class Query extends KaitaiStruct {
- public static Query fromFile(String fileName) throws IOException {
- return new Query(new ByteBufferKaitaiStream(fileName));
- }
-
- public Query(KaitaiStream _io) {
- this(_io, null, null);
- }
-
- public Query(KaitaiStream _io, DnsPacket _parent) {
- this(_io, _parent, null);
- }
-
- public Query(KaitaiStream _io, DnsPacket _parent, DnsPacket _root) {
- super(_io);
- this._parent = _parent;
- this._root = _root;
- _read();
- }
- private void _read() {
- this.name = new DomainName(this._io, this, _root);
- this.type = DnsPacket.TypeType.byId(this._io.readU2be());
- this.queryClass = DnsPacket.ClassType.byId(this._io.readU2be());
- }
- private DomainName name;
- private TypeType type;
- private ClassType queryClass;
- private DnsPacket _root;
- private DnsPacket _parent;
- public DomainName name() { return name; }
- public TypeType type() { return type; }
- public ClassType queryClass() { return queryClass; }
- public DnsPacket _root() { return _root; }
- public DnsPacket _parent() { return _parent; }
- }
- public static class DomainName extends KaitaiStruct {
- public static DomainName fromFile(String fileName) throws IOException {
- return new DomainName(new ByteBufferKaitaiStream(fileName));
- }
-
- public DomainName(KaitaiStream _io) {
- this(_io, null, null);
- }
-
- public DomainName(KaitaiStream _io, KaitaiStruct _parent) {
- this(_io, _parent, null);
- }
-
- public DomainName(KaitaiStream _io, KaitaiStruct _parent, DnsPacket _root) {
- super(_io);
- this._parent = _parent;
- this._root = _root;
- _read();
- }
- private void _read() {
- this.name = new ArrayList<Label>();
- {
- Label _it;
- int i = 0;
- do {
- _it = new Label(this._io, this, _root);
- this.name.add(_it);
- i++;
- } while (!( ((_it.length() == 0) || (_it.length() == 192)) ));
- }
- }
- private ArrayList<Label> name;
- private DnsPacket _root;
- private KaitaiStruct _parent;
-
- /**
- * Repeat until the length is 0 or it is a pointer (bit-hack to get around lack of OR operator)
- */
- public ArrayList<Label> name() { return name; }
- public DnsPacket _root() { return _root; }
- public KaitaiStruct _parent() { return _parent; }
- }
- public static class Address extends KaitaiStruct {
- public static Address fromFile(String fileName) throws IOException {
- return new Address(new ByteBufferKaitaiStream(fileName));
- }
-
- public Address(KaitaiStream _io) {
- this(_io, null, null);
- }
-
- public Address(KaitaiStream _io, DnsPacket.Answer _parent) {
- this(_io, _parent, null);
- }
-
- public Address(KaitaiStream _io, DnsPacket.Answer _parent, DnsPacket _root) {
- super(_io);
- this._parent = _parent;
- this._root = _root;
- _read();
- }
- private void _read() {
- ip = new ArrayList<Integer>((int) (4));
- for (int i = 0; i < 4; i++) {
- this.ip.add(this._io.readU1());
- }
- }
- private ArrayList<Integer> ip;
- private DnsPacket _root;
- private DnsPacket.Answer _parent;
- public ArrayList<Integer> ip() { return ip; }
- public DnsPacket _root() { return _root; }
- public DnsPacket.Answer _parent() { return _parent; }
- }
- public static class Answer extends KaitaiStruct {
- public static Answer fromFile(String fileName) throws IOException {
- return new Answer(new ByteBufferKaitaiStream(fileName));
- }
-
- public Answer(KaitaiStream _io) {
- this(_io, null, null);
- }
-
- public Answer(KaitaiStream _io, DnsPacket _parent) {
- this(_io, _parent, null);
- }
-
- public Answer(KaitaiStream _io, DnsPacket _parent, DnsPacket _root) {
- super(_io);
- this._parent = _parent;
- this._root = _root;
- _read();
- }
- private void _read() {
- this.name = new DomainName(this._io, this, _root);
- this.type = DnsPacket.TypeType.byId(this._io.readU2be());
- this.answerClass = DnsPacket.ClassType.byId(this._io.readU2be());
- this.ttl = this._io.readS4be();
- this.rdlength = this._io.readU2be();
- if (type() == DnsPacket.TypeType.PTR) {
- this.ptrdname = new DomainName(this._io, this, _root);
- }
- if (type() == DnsPacket.TypeType.A) {
- this.address = new Address(this._io, this, _root);
- }
- }
- private DomainName name;
- private TypeType type;
- private ClassType answerClass;
- private int ttl;
- private int rdlength;
- private DomainName ptrdname;
- private Address address;
- private DnsPacket _root;
- private DnsPacket _parent;
- public DomainName name() { return name; }
- public TypeType type() { return type; }
- public ClassType answerClass() { return answerClass; }
-
- /**
- * Time to live (in seconds)
- */
- public int ttl() { return ttl; }
-
- /**
- * Length in octets of the following payload
- */
- public int rdlength() { return rdlength; }
- public DomainName ptrdname() { return ptrdname; }
- public Address address() { return address; }
- public DnsPacket _root() { return _root; }
- public DnsPacket _parent() { return _parent; }
- }
- public static class PacketFlags extends KaitaiStruct {
- public static PacketFlags fromFile(String fileName) throws IOException {
- return new PacketFlags(new ByteBufferKaitaiStream(fileName));
- }
-
- public PacketFlags(KaitaiStream _io) {
- this(_io, null, null);
- }
-
- public PacketFlags(KaitaiStream _io, DnsPacket _parent) {
- this(_io, _parent, null);
- }
-
- public PacketFlags(KaitaiStream _io, DnsPacket _parent, DnsPacket _root) {
- super(_io);
- this._parent = _parent;
- this._root = _root;
- _read();
- }
- private void _read() {
- this.flag = this._io.readU2be();
- }
- private Integer qr;
- public Integer qr() {
- if (this.qr != null)
- return this.qr;
- int _tmp = (int) (((flag() & 32768) >> 15));
- this.qr = _tmp;
- return this.qr;
- }
- private Integer ra;
- public Integer ra() {
- if (this.ra != null)
- return this.ra;
- int _tmp = (int) (((flag() & 128) >> 7));
- this.ra = _tmp;
- return this.ra;
- }
- private Integer tc;
- public Integer tc() {
- if (this.tc != null)
- return this.tc;
- int _tmp = (int) (((flag() & 512) >> 9));
- this.tc = _tmp;
- return this.tc;
- }
- private Integer rcode;
- public Integer rcode() {
- if (this.rcode != null)
- return this.rcode;
- int _tmp = (int) (((flag() & 15) >> 0));
- this.rcode = _tmp;
- return this.rcode;
- }
- private Integer opcode;
- public Integer opcode() {
- if (this.opcode != null)
- return this.opcode;
- int _tmp = (int) (((flag() & 30720) >> 11));
- this.opcode = _tmp;
- return this.opcode;
- }
- private Integer aa;
- public Integer aa() {
- if (this.aa != null)
- return this.aa;
- int _tmp = (int) (((flag() & 1024) >> 10));
- this.aa = _tmp;
- return this.aa;
- }
- private Integer z;
- public Integer z() {
- if (this.z != null)
- return this.z;
- int _tmp = (int) (((flag() & 64) >> 6));
- this.z = _tmp;
- return this.z;
- }
- private Integer rd;
- public Integer rd() {
- if (this.rd != null)
- return this.rd;
- int _tmp = (int) (((flag() & 256) >> 8));
- this.rd = _tmp;
- return this.rd;
- }
- private Integer cd;
- public Integer cd() {
- if (this.cd != null)
- return this.cd;
- int _tmp = (int) (((flag() & 16) >> 4));
- this.cd = _tmp;
- return this.cd;
- }
- private Integer ad;
- public Integer ad() {
- if (this.ad != null)
- return this.ad;
- int _tmp = (int) (((flag() & 32) >> 5));
- this.ad = _tmp;
- return this.ad;
- }
- private int flag;
- private DnsPacket _root;
- private DnsPacket _parent;
- public int flag() { return flag; }
- public DnsPacket _root() { return _root; }
- public DnsPacket _parent() { return _parent; }
- }
- private int transactionId;
- private PacketFlags flags;
- private int qdcount;
- private int ancount;
- private int nscount;
- private int arcount;
- private ArrayList<Query> queries;
- private ArrayList<Answer> answers;
- private DnsPacket _root;
- private KaitaiStruct _parent;
-
- /**
- * ID to keep track of request/responces
- */
- public int transactionId() { return transactionId; }
- public PacketFlags flags() { return flags; }
-
- /**
- * How many questions are there
- */
- public int qdcount() { return qdcount; }
-
- /**
- * Number of resource records answering the question
- */
- public int ancount() { return ancount; }
-
- /**
- * Number of resource records pointing toward an authority
- */
- public int nscount() { return nscount; }
-
- /**
- * Number of resource records holding additional information
- */
- public int arcount() { return arcount; }
- public ArrayList<Query> queries() { return queries; }
- public ArrayList<Answer> answers() { return answers; }
- public DnsPacket _root() { return _root; }
- public KaitaiStruct _parent() { return _parent; }
-}
+++ /dev/null
-// This is a generated file! Please edit source .ksy file and use kaitai-struct-compiler to rebuild
-package edu.uci.iotproject;
-
-import io.kaitai.struct.ByteBufferKaitaiStream;
-import io.kaitai.struct.KaitaiStruct;
-import io.kaitai.struct.KaitaiStream;
-import java.io.IOException;
-import java.util.Map;
-import java.util.HashMap;
-
-public class EthernetFrame extends KaitaiStruct {
- private static int counter = 0;
- public static EthernetFrame fromFile(String fileName) throws IOException {
- return new EthernetFrame(new ByteBufferKaitaiStream(fileName));
- }
-
- public enum EtherTypeEnum {
- IPV4(2048),
- X_75_INTERNET(2049),
- NBS_INTERNET(2050),
- ECMA_INTERNET(2051),
- CHAOSNET(2052),
- X_25_LEVEL_3(2053),
- ARP(2054),
- IPV6(34525);
-
- private final long id;
- EtherTypeEnum(long id) { this.id = id; }
- public long id() { return id; }
- private static final Map<Long, EtherTypeEnum> byId = new HashMap<Long, EtherTypeEnum>(8);
- static {
- for (EtherTypeEnum e : EtherTypeEnum.values())
- byId.put(e.id(), e);
- }
- public static EtherTypeEnum byId(long id) { return byId.get(id); }
- }
-
- public EthernetFrame(KaitaiStream _io) {
- this(_io, null, null);
- }
-
- public EthernetFrame(KaitaiStream _io, KaitaiStruct _parent) {
- this(_io, _parent, null);
- }
-
- public EthernetFrame(KaitaiStream _io, KaitaiStruct _parent, EthernetFrame _root) {
- super(_io);
- this._parent = _parent;
- this._root = _root == null ? this : _root;
- _read();
- }
- private void _read() {
- this.dstMac = this._io.readBytes(6);
- this.srcMac = this._io.readBytes(6);
- this.etherType = EtherTypeEnum.byId(this._io.readU2be());
- // We skip if etherType is NULL
- // Some packets, e.g. EAPOL and XID do not have etherType
- // and we are not interested in these packets
- if(etherType() != null) {
- switch (etherType()) {
- case IPV4: {
- this._raw_body = this._io.readBytesFull();
- KaitaiStream _io__raw_body = new ByteBufferKaitaiStream(_raw_body);
- this.body = new Ipv4Packet(_io__raw_body);
- break;
- }
- // TODO: Skip IPV6 for now and perhaps do it later
- //case IPV6: {
- // this._raw_body = this._io.readBytesFull();
- // KaitaiStream _io__raw_body = new ByteBufferKaitaiStream(_raw_body);
- // this.body = new Ipv6Packet(_io__raw_body);
- // break;
- //}
- default: {
- this.body = this._io.readBytesFull();
- break;
- }
- }
- }
- }
- private byte[] dstMac;
- private byte[] srcMac;
- private EtherTypeEnum etherType;
- private Object body;
- private EthernetFrame _root;
- private KaitaiStruct _parent;
- private byte[] _raw_body;
- public byte[] dstMac() { return dstMac; }
- public byte[] srcMac() { return srcMac; }
- public EtherTypeEnum etherType() { return etherType; }
- public Object body() { return body; }
- public EthernetFrame _root() { return _root; }
- public KaitaiStruct _parent() { return _parent; }
- public byte[] _raw_body() { return _raw_body; }
-}
+++ /dev/null
-// This is a generated file! Please edit source .ksy file and use kaitai-struct-compiler to rebuild
-package edu.uci.iotproject;
-
-import io.kaitai.struct.ByteBufferKaitaiStream;
-import io.kaitai.struct.KaitaiStruct;
-import io.kaitai.struct.KaitaiStream;
-import java.io.IOException;
-import java.util.Map;
-import java.util.HashMap;
-
-public class IcmpPacket extends KaitaiStruct {
- public static IcmpPacket fromFile(String fileName) throws IOException {
- return new IcmpPacket(new ByteBufferKaitaiStream(fileName));
- }
-
- public enum IcmpTypeEnum {
- ECHO_REPLY(0),
- DESTINATION_UNREACHABLE(3),
- SOURCE_QUENCH(4),
- REDIRECT(5),
- ECHO(8),
- TIME_EXCEEDED(11);
-
- private final long id;
- IcmpTypeEnum(long id) { this.id = id; }
- public long id() { return id; }
- private static final Map<Long, IcmpTypeEnum> byId = new HashMap<Long, IcmpTypeEnum>(6);
- static {
- for (IcmpTypeEnum e : IcmpTypeEnum.values())
- byId.put(e.id(), e);
- }
- public static IcmpTypeEnum byId(long id) { return byId.get(id); }
- }
-
- public IcmpPacket(KaitaiStream _io) {
- this(_io, null, null);
- }
-
- public IcmpPacket(KaitaiStream _io, KaitaiStruct _parent) {
- this(_io, _parent, null);
- }
-
- public IcmpPacket(KaitaiStream _io, KaitaiStruct _parent, IcmpPacket _root) {
- super(_io);
- this._parent = _parent;
- this._root = _root == null ? this : _root;
- _read();
- }
- private void _read() {
- this.icmpType = IcmpTypeEnum.byId(this._io.readU1());
- if (icmpType() == IcmpTypeEnum.DESTINATION_UNREACHABLE) {
- this.destinationUnreachable = new DestinationUnreachableMsg(this._io, this, _root);
- }
- if (icmpType() == IcmpTypeEnum.TIME_EXCEEDED) {
- this.timeExceeded = new TimeExceededMsg(this._io, this, _root);
- }
- if ( ((icmpType() == IcmpTypeEnum.ECHO) || (icmpType() == IcmpTypeEnum.ECHO_REPLY)) ) {
- this.echo = new EchoMsg(this._io, this, _root);
- }
- }
- public static class DestinationUnreachableMsg extends KaitaiStruct {
- public static DestinationUnreachableMsg fromFile(String fileName) throws IOException {
- return new DestinationUnreachableMsg(new ByteBufferKaitaiStream(fileName));
- }
-
- public enum DestinationUnreachableCode {
- NET_UNREACHABLE(0),
- HOST_UNREACHABLE(1),
- PROTOCOL_UNREACHABLE(2),
- PORT_UNREACHABLE(3),
- FRAGMENTATION_NEEDED_AND_DF_SET(4),
- SOURCE_ROUTE_FAILED(5),
- DST_NET_UNKOWN(6),
- SDT_HOST_UNKOWN(7),
- SRC_ISOLATED(8),
- NET_PROHIBITED_BY_ADMIN(9),
- HOST_PROHIBITED_BY_ADMIN(10),
- NET_UNREACHABLE_FOR_TOS(11),
- HOST_UNREACHABLE_FOR_TOS(12),
- COMMUNICATION_PROHIBITED_BY_ADMIN(13),
- HOST_PRECEDENCE_VIOLATION(14),
- PRECEDENCE_CUTTOFF_IN_EFFECT(15);
-
- private final long id;
- DestinationUnreachableCode(long id) { this.id = id; }
- public long id() { return id; }
- private static final Map<Long, DestinationUnreachableCode> byId = new HashMap<Long, DestinationUnreachableCode>(16);
- static {
- for (DestinationUnreachableCode e : DestinationUnreachableCode.values())
- byId.put(e.id(), e);
- }
- public static DestinationUnreachableCode byId(long id) { return byId.get(id); }
- }
-
- public DestinationUnreachableMsg(KaitaiStream _io) {
- this(_io, null, null);
- }
-
- public DestinationUnreachableMsg(KaitaiStream _io, IcmpPacket _parent) {
- this(_io, _parent, null);
- }
-
- public DestinationUnreachableMsg(KaitaiStream _io, IcmpPacket _parent, IcmpPacket _root) {
- super(_io);
- this._parent = _parent;
- this._root = _root;
- _read();
- }
- private void _read() {
- this.code = DestinationUnreachableCode.byId(this._io.readU1());
- this.checksum = this._io.readU2be();
- }
- private DestinationUnreachableCode code;
- private int checksum;
- private IcmpPacket _root;
- private IcmpPacket _parent;
- public DestinationUnreachableCode code() { return code; }
- public int checksum() { return checksum; }
- public IcmpPacket _root() { return _root; }
- public IcmpPacket _parent() { return _parent; }
- }
- public static class TimeExceededMsg extends KaitaiStruct {
- public static TimeExceededMsg fromFile(String fileName) throws IOException {
- return new TimeExceededMsg(new ByteBufferKaitaiStream(fileName));
- }
-
- public enum TimeExceededCode {
- TIME_TO_LIVE_EXCEEDED_IN_TRANSIT(0),
- FRAGMENT_REASSEMBLY_TIME_EXCEEDED(1);
-
- private final long id;
- TimeExceededCode(long id) { this.id = id; }
- public long id() { return id; }
- private static final Map<Long, TimeExceededCode> byId = new HashMap<Long, TimeExceededCode>(2);
- static {
- for (TimeExceededCode e : TimeExceededCode.values())
- byId.put(e.id(), e);
- }
- public static TimeExceededCode byId(long id) { return byId.get(id); }
- }
-
- public TimeExceededMsg(KaitaiStream _io) {
- this(_io, null, null);
- }
-
- public TimeExceededMsg(KaitaiStream _io, IcmpPacket _parent) {
- this(_io, _parent, null);
- }
-
- public TimeExceededMsg(KaitaiStream _io, IcmpPacket _parent, IcmpPacket _root) {
- super(_io);
- this._parent = _parent;
- this._root = _root;
- _read();
- }
- private void _read() {
- this.code = TimeExceededCode.byId(this._io.readU1());
- this.checksum = this._io.readU2be();
- }
- private TimeExceededCode code;
- private int checksum;
- private IcmpPacket _root;
- private IcmpPacket _parent;
- public TimeExceededCode code() { return code; }
- public int checksum() { return checksum; }
- public IcmpPacket _root() { return _root; }
- public IcmpPacket _parent() { return _parent; }
- }
- public static class EchoMsg extends KaitaiStruct {
- public static EchoMsg fromFile(String fileName) throws IOException {
- return new EchoMsg(new ByteBufferKaitaiStream(fileName));
- }
-
- public EchoMsg(KaitaiStream _io) {
- this(_io, null, null);
- }
-
- public EchoMsg(KaitaiStream _io, IcmpPacket _parent) {
- this(_io, _parent, null);
- }
-
- public EchoMsg(KaitaiStream _io, IcmpPacket _parent, IcmpPacket _root) {
- super(_io);
- this._parent = _parent;
- this._root = _root;
- _read();
- }
- private void _read() {
- this.code = this._io.ensureFixedContents(new byte[] { 0 });
- this.checksum = this._io.readU2be();
- this.identifier = this._io.readU2be();
- this.seqNum = this._io.readU2be();
- this.data = this._io.readBytesFull();
- }
- private byte[] code;
- private int checksum;
- private int identifier;
- private int seqNum;
- private byte[] data;
- private IcmpPacket _root;
- private IcmpPacket _parent;
- public byte[] code() { return code; }
- public int checksum() { return checksum; }
- public int identifier() { return identifier; }
- public int seqNum() { return seqNum; }
- public byte[] data() { return data; }
- public IcmpPacket _root() { return _root; }
- public IcmpPacket _parent() { return _parent; }
- }
- private IcmpTypeEnum icmpType;
- private DestinationUnreachableMsg destinationUnreachable;
- private TimeExceededMsg timeExceeded;
- private EchoMsg echo;
- private IcmpPacket _root;
- private KaitaiStruct _parent;
- public IcmpTypeEnum icmpType() { return icmpType; }
- public DestinationUnreachableMsg destinationUnreachable() { return destinationUnreachable; }
- public TimeExceededMsg timeExceeded() { return timeExceeded; }
- public EchoMsg echo() { return echo; }
- public IcmpPacket _root() { return _root; }
- public KaitaiStruct _parent() { return _parent; }
-}
+++ /dev/null
-// This is a generated file! Please edit source .ksy file and use kaitai-struct-compiler to rebuild
-package edu.uci.iotproject;
-
-import io.kaitai.struct.ByteBufferKaitaiStream;
-import io.kaitai.struct.KaitaiStruct;
-import io.kaitai.struct.KaitaiStream;
-import java.io.IOException;
-import java.util.Map;
-import java.util.HashMap;
-import java.util.ArrayList;
-
-public class Ipv4Packet extends KaitaiStruct {
- public static Ipv4Packet fromFile(String fileName) throws IOException {
- return new Ipv4Packet(new ByteBufferKaitaiStream(fileName));
- }
-
- public enum ProtocolEnum {
- HOPOPT(0),
- ICMP(1),
- IGMP(2),
- GGP(3),
- IPV4(4),
- ST(5),
- TCP(6),
- CBT(7),
- EGP(8),
- IGP(9),
- BBN_RCC_MON(10),
- NVP_II(11),
- PUP(12),
- ARGUS(13),
- EMCON(14),
- XNET(15),
- CHAOS(16),
- UDP(17),
- MUX(18),
- DCN_MEAS(19),
- HMP(20),
- PRM(21),
- XNS_IDP(22),
- TRUNK_1(23),
- TRUNK_2(24),
- LEAF_1(25),
- LEAF_2(26),
- RDP(27),
- IRTP(28),
- ISO_TP4(29),
- NETBLT(30),
- MFE_NSP(31),
- MERIT_INP(32),
- DCCP(33),
- X_3PC(34),
- IDPR(35),
- XTP(36),
- DDP(37),
- IDPR_CMTP(38),
- TP_PLUS_PLUS(39),
- IL(40),
- IPV6(41),
- SDRP(42),
- IPV6_ROUTE(43),
- IPV6_FRAG(44),
- IDRP(45),
- RSVP(46),
- GRE(47),
- DSR(48),
- BNA(49),
- ESP(50),
- AH(51),
- I_NLSP(52),
- SWIPE(53),
- NARP(54),
- MOBILE(55),
- TLSP(56),
- SKIP(57),
- IPV6_ICMP(58),
- IPV6_NONXT(59),
- IPV6_OPTS(60),
- ANY_HOST_INTERNAL_PROTOCOL(61),
- CFTP(62),
- ANY_LOCAL_NETWORK(63),
- SAT_EXPAK(64),
- KRYPTOLAN(65),
- RVD(66),
- IPPC(67),
- ANY_DISTRIBUTED_FILE_SYSTEM(68),
- SAT_MON(69),
- VISA(70),
- IPCV(71),
- CPNX(72),
- CPHB(73),
- WSN(74),
- PVP(75),
- BR_SAT_MON(76),
- SUN_ND(77),
- WB_MON(78),
- WB_EXPAK(79),
- ISO_IP(80),
- VMTP(81),
- SECURE_VMTP(82),
- VINES(83),
- IPTM(84),
- NSFNET_IGP(85),
- DGP(86),
- TCF(87),
- EIGRP(88),
- OSPFIGP(89),
- SPRITE_RPC(90),
- LARP(91),
- MTP(92),
- AX_25(93),
- IPIP(94),
- MICP(95),
- SCC_SP(96),
- ETHERIP(97),
- ENCAP(98),
- ANY_PRIVATE_ENCRYPTION_SCHEME(99),
- GMTP(100),
- IFMP(101),
- PNNI(102),
- PIM(103),
- ARIS(104),
- SCPS(105),
- QNX(106),
- A_N(107),
- IPCOMP(108),
- SNP(109),
- COMPAQ_PEER(110),
- IPX_IN_IP(111),
- VRRP(112),
- PGM(113),
- ANY_0_HOP(114),
- L2TP(115),
- DDX(116),
- IATP(117),
- STP(118),
- SRP(119),
- UTI(120),
- SMP(121),
- SM(122),
- PTP(123),
- ISIS_OVER_IPV4(124),
- FIRE(125),
- CRTP(126),
- CRUDP(127),
- SSCOPMCE(128),
- IPLT(129),
- SPS(130),
- PIPE(131),
- SCTP(132),
- FC(133),
- RSVP_E2E_IGNORE(134),
- MOBILITY_HEADER(135),
- UDPLITE(136),
- MPLS_IN_IP(137),
- MANET(138),
- HIP(139),
- SHIM6(140),
- WESP(141),
- ROHC(142),
- RESERVED_255(255);
-
- private final long id;
- ProtocolEnum(long id) { this.id = id; }
- public long id() { return id; }
- private static final Map<Long, ProtocolEnum> byId = new HashMap<Long, ProtocolEnum>(144);
- static {
- for (ProtocolEnum e : ProtocolEnum.values())
- byId.put(e.id(), e);
- }
- public static ProtocolEnum byId(long id) { return byId.get(id); }
- }
-
- public Ipv4Packet(KaitaiStream _io) {
- this(_io, null, null);
- }
-
- public Ipv4Packet(KaitaiStream _io, KaitaiStruct _parent) {
- this(_io, _parent, null);
- }
-
- public Ipv4Packet(KaitaiStream _io, KaitaiStruct _parent, Ipv4Packet _root) {
- super(_io);
- this._parent = _parent;
- this._root = _root == null ? this : _root;
- _read();
- }
- private void _read() {
- this.b1 = this._io.readU1();
- this.b2 = this._io.readU1();
- this.totalLength = this._io.readU2be();
- this.identification = this._io.readU2be();
- this.b67 = this._io.readU2be();
- this.ttl = this._io.readU1();
- this.protocol = ProtocolEnum.byId(this._io.readU1());
- this.headerChecksum = this._io.readU2be();
- this.srcIpAddr = this._io.readBytes(4);
- this.dstIpAddr = this._io.readBytes(4);
- this._raw_options = this._io.readBytes((ihlBytes() - 20));
- KaitaiStream _io__raw_options = new ByteBufferKaitaiStream(_raw_options);
- this.options = new Ipv4Options(_io__raw_options, this, _root);
- switch (protocol()) {
- case TCP: {
- this._raw_body = this._io.readBytes((totalLength() - ihlBytes()));
- KaitaiStream _io__raw_body = new ByteBufferKaitaiStream(_raw_body);
- this.body = new TcpSegment(_io__raw_body);
- break;
- }
- case ICMP: {
- this._raw_body = this._io.readBytes((totalLength() - ihlBytes()));
- KaitaiStream _io__raw_body = new ByteBufferKaitaiStream(_raw_body);
- this.body = new IcmpPacket(_io__raw_body);
- break;
- }
- case UDP: {
- this._raw_body = this._io.readBytes((totalLength() - ihlBytes()));
- KaitaiStream _io__raw_body = new ByteBufferKaitaiStream(_raw_body);
- this.body = new UdpDatagram(_io__raw_body);
- break;
- }
- case IPV6: {
- this._raw_body = this._io.readBytes((totalLength() - ihlBytes()));
- KaitaiStream _io__raw_body = new ByteBufferKaitaiStream(_raw_body);
- this.body = new Ipv6Packet(_io__raw_body);
- break;
- }
- default: {
- this.body = this._io.readBytes((totalLength() - ihlBytes()));
- break;
- }
- }
- }
- public static class Ipv4Options extends KaitaiStruct {
- public static Ipv4Options fromFile(String fileName) throws IOException {
- return new Ipv4Options(new ByteBufferKaitaiStream(fileName));
- }
-
- public Ipv4Options(KaitaiStream _io) {
- this(_io, null, null);
- }
-
- public Ipv4Options(KaitaiStream _io, Ipv4Packet _parent) {
- this(_io, _parent, null);
- }
-
- public Ipv4Options(KaitaiStream _io, Ipv4Packet _parent, Ipv4Packet _root) {
- super(_io);
- this._parent = _parent;
- this._root = _root;
- _read();
- }
- private void _read() {
- this.entries = new ArrayList<Ipv4Option>();
- {
- int i = 0;
- while (!this._io.isEof()) {
- this.entries.add(new Ipv4Option(this._io, this, _root));
- i++;
- }
- }
- }
- private ArrayList<Ipv4Option> entries;
- private Ipv4Packet _root;
- private Ipv4Packet _parent;
- public ArrayList<Ipv4Option> entries() { return entries; }
- public Ipv4Packet _root() { return _root; }
- public Ipv4Packet _parent() { return _parent; }
- }
- public static class Ipv4Option extends KaitaiStruct {
- public static Ipv4Option fromFile(String fileName) throws IOException {
- return new Ipv4Option(new ByteBufferKaitaiStream(fileName));
- }
-
- public Ipv4Option(KaitaiStream _io) {
- this(_io, null, null);
- }
-
- public Ipv4Option(KaitaiStream _io, Ipv4Packet.Ipv4Options _parent) {
- this(_io, _parent, null);
- }
-
- public Ipv4Option(KaitaiStream _io, Ipv4Packet.Ipv4Options _parent, Ipv4Packet _root) {
- super(_io);
- this._parent = _parent;
- this._root = _root;
- _read();
- }
- private void _read() {
- this.b1 = this._io.readU1();
- this.len = this._io.readU1();
- this.body = this._io.readBytes((len() > 2 ? (len() - 2) : 0));
- }
- private Integer copy;
- public Integer copy() {
- if (this.copy != null)
- return this.copy;
- int _tmp = (int) (((b1() & 128) >> 7));
- this.copy = _tmp;
- return this.copy;
- }
- private Integer optClass;
- public Integer optClass() {
- if (this.optClass != null)
- return this.optClass;
- int _tmp = (int) (((b1() & 96) >> 5));
- this.optClass = _tmp;
- return this.optClass;
- }
- private Integer number;
- public Integer number() {
- if (this.number != null)
- return this.number;
- int _tmp = (int) ((b1() & 31));
- this.number = _tmp;
- return this.number;
- }
- private int b1;
- private int len;
- private byte[] body;
- private Ipv4Packet _root;
- private Ipv4Packet.Ipv4Options _parent;
- public int b1() { return b1; }
- public int len() { return len; }
- public byte[] body() { return body; }
- public Ipv4Packet _root() { return _root; }
- public Ipv4Packet.Ipv4Options _parent() { return _parent; }
- }
- private Integer version;
- public Integer version() {
- if (this.version != null)
- return this.version;
- int _tmp = (int) (((b1() & 240) >> 4));
- this.version = _tmp;
- return this.version;
- }
- private Integer ihl;
- public Integer ihl() {
- if (this.ihl != null)
- return this.ihl;
- int _tmp = (int) ((b1() & 15));
- this.ihl = _tmp;
- return this.ihl;
- }
- private Integer ihlBytes;
- public Integer ihlBytes() {
- if (this.ihlBytes != null)
- return this.ihlBytes;
- int _tmp = (int) ((ihl() * 4));
- this.ihlBytes = _tmp;
- return this.ihlBytes;
- }
- private int b1;
- private int b2;
- private int totalLength;
- private int identification;
- private int b67;
- private int ttl;
- private ProtocolEnum protocol;
- private int headerChecksum;
- private byte[] srcIpAddr;
- private byte[] dstIpAddr;
- private Ipv4Options options;
- private Object body;
- private Ipv4Packet _root;
- private KaitaiStruct _parent;
- private byte[] _raw_options;
- private byte[] _raw_body;
- public int b1() { return b1; }
- public int b2() { return b2; }
- public int totalLength() { return totalLength; }
- public int identification() { return identification; }
- public int b67() { return b67; }
- public int ttl() { return ttl; }
- public ProtocolEnum protocol() { return protocol; }
- public int headerChecksum() { return headerChecksum; }
- public byte[] srcIpAddr() { return srcIpAddr; }
- public byte[] dstIpAddr() { return dstIpAddr; }
- public Ipv4Options options() { return options; }
- public Object body() { return body; }
- public Ipv4Packet _root() { return _root; }
- public KaitaiStruct _parent() { return _parent; }
- public byte[] _raw_options() { return _raw_options; }
- public byte[] _raw_body() { return _raw_body; }
-}
+++ /dev/null
-// This is a generated file! Please edit source .ksy file and use kaitai-struct-compiler to rebuild
-package edu.uci.iotproject;
-
-import io.kaitai.struct.ByteBufferKaitaiStream;
-import io.kaitai.struct.KaitaiStruct;
-import io.kaitai.struct.KaitaiStream;
-import java.io.IOException;
-
-public class Ipv6Packet extends KaitaiStruct {
- public static Ipv6Packet fromFile(String fileName) throws IOException {
- return new Ipv6Packet(new ByteBufferKaitaiStream(fileName));
- }
-
- public Ipv6Packet(KaitaiStream _io) {
- this(_io, null, null);
- }
-
- public Ipv6Packet(KaitaiStream _io, KaitaiStruct _parent) {
- this(_io, _parent, null);
- }
-
- public Ipv6Packet(KaitaiStream _io, KaitaiStruct _parent, Ipv6Packet _root) {
- super(_io);
- this._parent = _parent;
- this._root = _root == null ? this : _root;
- _read();
- }
- private void _read() {
- this.version = this._io.readBitsInt(4);
- this.trafficClass = this._io.readBitsInt(8);
- this.flowLabel = this._io.readBitsInt(20);
- this._io.alignToByte();
- this.payloadLength = this._io.readU2be();
- this.nextHeaderType = this._io.readU1();
- this.hopLimit = this._io.readU1();
- this.srcIpv6Addr = this._io.readBytes(16);
- this.dstIpv6Addr = this._io.readBytes(16);
- switch (nextHeaderType()) {
- case 17: {
- this.nextHeader = new UdpDatagram(this._io);
- break;
- }
- case 0: {
- this.nextHeader = new OptionHopByHop(this._io, this, _root);
- break;
- }
- case 4: {
- this.nextHeader = new Ipv4Packet(this._io);
- break;
- }
- case 6: {
- this.nextHeader = new TcpSegment(this._io);
- break;
- }
- case 59: {
- this.nextHeader = new NoNextHeader(this._io, this, _root);
- break;
- }
- }
- this.rest = this._io.readBytesFull();
- }
- public static class NoNextHeader extends KaitaiStruct {
- public static NoNextHeader fromFile(String fileName) throws IOException {
- return new NoNextHeader(new ByteBufferKaitaiStream(fileName));
- }
-
- public NoNextHeader(KaitaiStream _io) {
- this(_io, null, null);
- }
-
- public NoNextHeader(KaitaiStream _io, KaitaiStruct _parent) {
- this(_io, _parent, null);
- }
-
- public NoNextHeader(KaitaiStream _io, KaitaiStruct _parent, Ipv6Packet _root) {
- super(_io);
- this._parent = _parent;
- this._root = _root;
- _read();
- }
- private void _read() {
- }
- private Ipv6Packet _root;
- private KaitaiStruct _parent;
- public Ipv6Packet _root() { return _root; }
- public KaitaiStruct _parent() { return _parent; }
- }
- public static class OptionHopByHop extends KaitaiStruct {
- public static OptionHopByHop fromFile(String fileName) throws IOException {
- return new OptionHopByHop(new ByteBufferKaitaiStream(fileName));
- }
-
- public OptionHopByHop(KaitaiStream _io) {
- this(_io, null, null);
- }
-
- public OptionHopByHop(KaitaiStream _io, KaitaiStruct _parent) {
- this(_io, _parent, null);
- }
-
- public OptionHopByHop(KaitaiStream _io, KaitaiStruct _parent, Ipv6Packet _root) {
- super(_io);
- this._parent = _parent;
- this._root = _root;
- _read();
- }
- private void _read() {
- this.nextHeaderType = this._io.readU1();
- this.hdrExtLen = this._io.readU1();
- switch (nextHeaderType()) {
- case 0: {
- this.nextHeader = new OptionHopByHop(this._io, this, _root);
- break;
- }
- case 6: {
- this.nextHeader = new TcpSegment(this._io);
- break;
- }
- case 59: {
- this.nextHeader = new NoNextHeader(this._io, this, _root);
- break;
- }
- }
- }
- private int nextHeaderType;
- private int hdrExtLen;
- private byte[] body;
- private KaitaiStruct nextHeader;
- private Ipv6Packet _root;
- private KaitaiStruct _parent;
- public int nextHeaderType() { return nextHeaderType; }
- public int hdrExtLen() { return hdrExtLen; }
- public byte[] body() { return body; }
- public KaitaiStruct nextHeader() { return nextHeader; }
- public Ipv6Packet _root() { return _root; }
- public KaitaiStruct _parent() { return _parent; }
- }
- private long version;
- private long trafficClass;
- private long flowLabel;
- private int payloadLength;
- private int nextHeaderType;
- private int hopLimit;
- private byte[] srcIpv6Addr;
- private byte[] dstIpv6Addr;
- private KaitaiStruct nextHeader;
- private byte[] rest;
- private Ipv6Packet _root;
- private KaitaiStruct _parent;
- public long version() { return version; }
- public long trafficClass() { return trafficClass; }
- public long flowLabel() { return flowLabel; }
- public int payloadLength() { return payloadLength; }
- public int nextHeaderType() { return nextHeaderType; }
- public int hopLimit() { return hopLimit; }
- public byte[] srcIpv6Addr() { return srcIpv6Addr; }
- public byte[] dstIpv6Addr() { return dstIpv6Addr; }
- public KaitaiStruct nextHeader() { return nextHeader; }
- public byte[] rest() { return rest; }
- public Ipv6Packet _root() { return _root; }
- public KaitaiStruct _parent() { return _parent; }
-}
import java.io.EOFException;
import java.net.Inet4Address;
import java.net.UnknownHostException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
import java.util.concurrent.TimeoutException;
-import java.util.function.Consumer;
/**
* This is a system that reads PCAP files to compare
public static void main(String[] args) throws PcapNativeException, NotOpenException, EOFException, TimeoutException, UnknownHostException {
final String fileName = "/users/varmarken/Desktop/wlan1.local.dns.pcap";
List<DnsPacket> dnsPackets = extractDnsAnswerPackets(fileName);
- Map<String, List<String>> ipToHostnameMap = constructIpToHostnameMap(dnsPackets);
+ Map<String, Set<String>> ipToHostnameMap = constructIpToHostnameMap(dnsPackets);
ipToHostnameMap.forEach((k,v) -> System.out.println(String.format("%s => %s", k, v.toString())));
}
+ /**
+ * Opens a PCAP file and extracts all DNS reply packets with non-empty answer sections.
+ * @param pcapFileName The name of the PCAP file.
+ * @return A list of DNS reply packets.
+ * @throws PcapNativeException
+ * @throws NotOpenException
+ * @throws TimeoutException
+ */
private static List<DnsPacket> extractDnsAnswerPackets(String pcapFileName) throws PcapNativeException, NotOpenException, TimeoutException {
PcapHandle handle;
try {
return result;
}
- private static Map<String, List<String>> constructIpToHostnameMap(List<DnsPacket> dnsPackets) throws UnknownHostException {
- HashMap<String, List<String>> result = new HashMap<>();
+ /**
+ * Based on the information found in a list of DNS replies, this method constructs a {@link Map} that maps from an
+ * IP to a {@link Set} of hostnames associated with that IP.
+ *
+ * @param dnsPackets A list of DNS <em>reply</em> packets.
+ * @return A {@link Map} that maps from an IP to a {@link Set} of hostnames associated with that IP
+ * @throws UnknownHostException If an IP found in a {@code DnsPacket} is of incorrect length.
+ */
+ private static Map<String, Set<String>> constructIpToHostnameMap(List<DnsPacket> dnsPackets) throws UnknownHostException {
+ HashMap<String, Set<String>> result = new HashMap<>();
for(DnsPacket dnsPacket : dnsPackets) {
// The hostname that this DNS reply provides answers for.
// TODO: safe to assume only one question?
byte[] ipBytes = answer.getRData().getRawData();
// Convert to string representation.
String ip = Inet4Address.getByAddress(ipBytes).getHostAddress();
- List<String> hostnameList = new ArrayList<>();
- hostnameList.add(hostname);
+ HashSet<String> hostnameSet = new HashSet<>();
+ hostnameSet.add(hostname);
// Update or insert depending on presence of key:
- // Concat the existing list and the new list if ip already present as key,
- // otherwise add an entry for ip pointing to new list.
- result.merge(ip, hostnameList, (v1, v2) -> { v1.addAll(v2); return v1; });
+ // Concat the existing set and the new set if ip already present as key,
+ // otherwise add an entry for ip pointing to new set.
+ result.merge(ip, hostnameSet, (v1, v2) -> { v1.addAll(v2); return v1; });
}
}
return result;
+++ /dev/null
-// This is a generated file! Please edit source .ksy file and use kaitai-struct-compiler to rebuild
-package edu.uci.iotproject;
-
-import io.kaitai.struct.ByteBufferKaitaiStream;
-import io.kaitai.struct.KaitaiStruct;
-import io.kaitai.struct.KaitaiStream;
-import java.io.IOException;
-import java.util.Map;
-import java.util.HashMap;
-import java.util.ArrayList;
-
-
-/**
- * PPI is a standard for link layer packet encapsulation, proposed as
- * generic extensible container to store both captured in-band data and
- * out-of-band data. Originally it was developed to provide 802.11n
- * radio information, but can be used for other purposes as well.
- *
- * Sample capture: https://wiki.wireshark.org/SampleCaptures?action=AttachFile&do=get&target=Http.cap
- * @see <a href="https://www.cacetech.com/documents/PPI_Header_format_1.0.1.pdf">PPI header format spec, section 3</a>
- */
-public class PacketPpi extends KaitaiStruct {
- public static PacketPpi fromFile(String fileName) throws IOException {
- return new PacketPpi(new ByteBufferKaitaiStream(fileName));
- }
-
- public enum PfhType {
- RADIO_802_11_COMMON(2),
- RADIO_802_11N_MAC_EXT(3),
- RADIO_802_11N_MAC_PHY_EXT(4),
- SPECTRUM_MAP(5),
- PROCESS_INFO(6),
- CAPTURE_INFO(7);
-
- private final long id;
- PfhType(long id) { this.id = id; }
- public long id() { return id; }
- private static final Map<Long, PfhType> byId = new HashMap<Long, PfhType>(6);
- static {
- for (PfhType e : PfhType.values())
- byId.put(e.id(), e);
- }
- public static PfhType byId(long id) { return byId.get(id); }
- }
-
- public enum Linktype {
- NULL_LINKTYPE(0),
- ETHERNET(1),
- AX25(3),
- IEEE802_5(6),
- ARCNET_BSD(7),
- SLIP(8),
- PPP(9),
- FDDI(10),
- PPP_HDLC(50),
- PPP_ETHER(51),
- ATM_RFC1483(100),
- RAW(101),
- C_HDLC(104),
- IEEE802_11(105),
- FRELAY(107),
- LOOP(108),
- LINUX_SLL(113),
- LTALK(114),
- PFLOG(117),
- IEEE802_11_PRISM(119),
- IP_OVER_FC(122),
- SUNATM(123),
- IEEE802_11_RADIOTAP(127),
- ARCNET_LINUX(129),
- APPLE_IP_OVER_IEEE1394(138),
- MTP2_WITH_PHDR(139),
- MTP2(140),
- MTP3(141),
- SCCP(142),
- DOCSIS(143),
- LINUX_IRDA(144),
- USER0(147),
- USER1(148),
- USER2(149),
- USER3(150),
- USER4(151),
- USER5(152),
- USER6(153),
- USER7(154),
- USER8(155),
- USER9(156),
- USER10(157),
- USER11(158),
- USER12(159),
- USER13(160),
- USER14(161),
- USER15(162),
- IEEE802_11_AVS(163),
- BACNET_MS_TP(165),
- PPP_PPPD(166),
- GPRS_LLC(169),
- GPF_T(170),
- GPF_F(171),
- LINUX_LAPD(177),
- BLUETOOTH_HCI_H4(187),
- USB_LINUX(189),
- PPI(192),
- IEEE802_15_4(195),
- SITA(196),
- ERF(197),
- BLUETOOTH_HCI_H4_WITH_PHDR(201),
- AX25_KISS(202),
- LAPD(203),
- PPP_WITH_DIR(204),
- C_HDLC_WITH_DIR(205),
- FRELAY_WITH_DIR(206),
- IPMB_LINUX(209),
- IEEE802_15_4_NONASK_PHY(215),
- USB_LINUX_MMAPPED(220),
- FC_2(224),
- FC_2_WITH_FRAME_DELIMS(225),
- IPNET(226),
- CAN_SOCKETCAN(227),
- IPV4(228),
- IPV6(229),
- IEEE802_15_4_NOFCS(230),
- DBUS(231),
- DVB_CI(235),
- MUX27010(236),
- STANAG_5066_D_PDU(237),
- NFLOG(239),
- NETANALYZER(240),
- NETANALYZER_TRANSPARENT(241),
- IPOIB(242),
- MPEG_2_TS(243),
- NG40(244),
- NFC_LLCP(245),
- INFINIBAND(247),
- SCTP(248),
- USBPCAP(249),
- RTAC_SERIAL(250),
- BLUETOOTH_LE_LL(251),
- NETLINK(253),
- BLUETOOTH_LINUX_MONITOR(254),
- BLUETOOTH_BREDR_BB(255),
- BLUETOOTH_LE_LL_WITH_PHDR(256),
- PROFIBUS_DL(257),
- PKTAP(258),
- EPON(259),
- IPMI_HPM_2(260),
- ZWAVE_R1_R2(261),
- ZWAVE_R3(262),
- WATTSTOPPER_DLM(263),
- ISO_14443(264);
-
- private final long id;
- Linktype(long id) { this.id = id; }
- public long id() { return id; }
- private static final Map<Long, Linktype> byId = new HashMap<Long, Linktype>(104);
- static {
- for (Linktype e : Linktype.values())
- byId.put(e.id(), e);
- }
- public static Linktype byId(long id) { return byId.get(id); }
- }
-
- public PacketPpi(KaitaiStream _io) {
- this(_io, null, null);
- }
-
- public PacketPpi(KaitaiStream _io, KaitaiStruct _parent) {
- this(_io, _parent, null);
- }
-
- public PacketPpi(KaitaiStream _io, KaitaiStruct _parent, PacketPpi _root) {
- super(_io);
- this._parent = _parent;
- this._root = _root == null ? this : _root;
- _read();
- }
- private void _read() {
- this.header = new PacketPpiHeader(this._io, this, _root);
- this._raw_fields = this._io.readBytes((header().pphLen() - 8));
- KaitaiStream _io__raw_fields = new ByteBufferKaitaiStream(_raw_fields);
- this.fields = new PacketPpiFields(_io__raw_fields, this, _root);
- switch (header().pphDlt()) {
- case PPI: {
- this._raw_body = this._io.readBytesFull();
- KaitaiStream _io__raw_body = new ByteBufferKaitaiStream(_raw_body);
- this.body = new PacketPpi(_io__raw_body);
- break;
- }
- case ETHERNET: {
- this._raw_body = this._io.readBytesFull();
- KaitaiStream _io__raw_body = new ByteBufferKaitaiStream(_raw_body);
- this.body = new EthernetFrame(_io__raw_body);
- break;
- }
- default: {
- this.body = this._io.readBytesFull();
- break;
- }
- }
- }
- public static class PacketPpiFields extends KaitaiStruct {
- public static PacketPpiFields fromFile(String fileName) throws IOException {
- return new PacketPpiFields(new ByteBufferKaitaiStream(fileName));
- }
-
- public PacketPpiFields(KaitaiStream _io) {
- this(_io, null, null);
- }
-
- public PacketPpiFields(KaitaiStream _io, PacketPpi _parent) {
- this(_io, _parent, null);
- }
-
- public PacketPpiFields(KaitaiStream _io, PacketPpi _parent, PacketPpi _root) {
- super(_io);
- this._parent = _parent;
- this._root = _root;
- _read();
- }
- private void _read() {
- this.entries = new ArrayList<PacketPpiField>();
- {
- int i = 0;
- while (!this._io.isEof()) {
- this.entries.add(new PacketPpiField(this._io, this, _root));
- i++;
- }
- }
- }
- private ArrayList<PacketPpiField> entries;
- private PacketPpi _root;
- private PacketPpi _parent;
- public ArrayList<PacketPpiField> entries() { return entries; }
- public PacketPpi _root() { return _root; }
- public PacketPpi _parent() { return _parent; }
- }
-
- /**
- * @see <a href="https://www.cacetech.com/documents/PPI_Header_format_1.0.1.pdf">PPI header format spec, section 4.1.3</a>
- */
- public static class Radio80211nMacExtBody extends KaitaiStruct {
- public static Radio80211nMacExtBody fromFile(String fileName) throws IOException {
- return new Radio80211nMacExtBody(new ByteBufferKaitaiStream(fileName));
- }
-
- public Radio80211nMacExtBody(KaitaiStream _io) {
- this(_io, null, null);
- }
-
- public Radio80211nMacExtBody(KaitaiStream _io, PacketPpi.PacketPpiField _parent) {
- this(_io, _parent, null);
- }
-
- public Radio80211nMacExtBody(KaitaiStream _io, PacketPpi.PacketPpiField _parent, PacketPpi _root) {
- super(_io);
- this._parent = _parent;
- this._root = _root;
- _read();
- }
- private void _read() {
- this.flags = new MacFlags(this._io, this, _root);
- this.aMpduId = this._io.readU4le();
- this.numDelimiters = this._io.readU1();
- this.reserved = this._io.readBytes(3);
- }
- private MacFlags flags;
- private long aMpduId;
- private int numDelimiters;
- private byte[] reserved;
- private PacketPpi _root;
- private PacketPpi.PacketPpiField _parent;
- public MacFlags flags() { return flags; }
- public long aMpduId() { return aMpduId; }
- public int numDelimiters() { return numDelimiters; }
- public byte[] reserved() { return reserved; }
- public PacketPpi _root() { return _root; }
- public PacketPpi.PacketPpiField _parent() { return _parent; }
- }
- public static class MacFlags extends KaitaiStruct {
- public static MacFlags fromFile(String fileName) throws IOException {
- return new MacFlags(new ByteBufferKaitaiStream(fileName));
- }
-
- public MacFlags(KaitaiStream _io) {
- this(_io, null, null);
- }
-
- public MacFlags(KaitaiStream _io, KaitaiStruct _parent) {
- this(_io, _parent, null);
- }
-
- public MacFlags(KaitaiStream _io, KaitaiStruct _parent, PacketPpi _root) {
- super(_io);
- this._parent = _parent;
- this._root = _root;
- _read();
- }
- private void _read() {
- this.unused1 = this._io.readBitsInt(1) != 0;
- this.aggregateDelimiter = this._io.readBitsInt(1) != 0;
- this.moreAggregates = this._io.readBitsInt(1) != 0;
- this.aggregate = this._io.readBitsInt(1) != 0;
- this.dupRx = this._io.readBitsInt(1) != 0;
- this.rxShortGuard = this._io.readBitsInt(1) != 0;
- this.isHt40 = this._io.readBitsInt(1) != 0;
- this.greenfield = this._io.readBitsInt(1) != 0;
- this._io.alignToByte();
- this.unused2 = this._io.readBytes(3);
- }
- private boolean unused1;
- private boolean aggregateDelimiter;
- private boolean moreAggregates;
- private boolean aggregate;
- private boolean dupRx;
- private boolean rxShortGuard;
- private boolean isHt40;
- private boolean greenfield;
- private byte[] unused2;
- private PacketPpi _root;
- private KaitaiStruct _parent;
- public boolean unused1() { return unused1; }
-
- /**
- * Aggregate delimiter CRC error after this frame
- */
- public boolean aggregateDelimiter() { return aggregateDelimiter; }
-
- /**
- * More aggregates
- */
- public boolean moreAggregates() { return moreAggregates; }
-
- /**
- * Aggregate
- */
- public boolean aggregate() { return aggregate; }
-
- /**
- * Duplicate RX
- */
- public boolean dupRx() { return dupRx; }
-
- /**
- * RX short guard interval (SGI)
- */
- public boolean rxShortGuard() { return rxShortGuard; }
-
- /**
- * true = HT40, false = HT20
- */
- public boolean isHt40() { return isHt40; }
-
- /**
- * Greenfield
- */
- public boolean greenfield() { return greenfield; }
- public byte[] unused2() { return unused2; }
- public PacketPpi _root() { return _root; }
- public KaitaiStruct _parent() { return _parent; }
- }
-
- /**
- * @see <a href="https://www.cacetech.com/documents/PPI_Header_format_1.0.1.pdf">PPI header format spec, section 3.1</a>
- */
- public static class PacketPpiHeader extends KaitaiStruct {
- public static PacketPpiHeader fromFile(String fileName) throws IOException {
- return new PacketPpiHeader(new ByteBufferKaitaiStream(fileName));
- }
-
- public PacketPpiHeader(KaitaiStream _io) {
- this(_io, null, null);
- }
-
- public PacketPpiHeader(KaitaiStream _io, PacketPpi _parent) {
- this(_io, _parent, null);
- }
-
- public PacketPpiHeader(KaitaiStream _io, PacketPpi _parent, PacketPpi _root) {
- super(_io);
- this._parent = _parent;
- this._root = _root;
- _read();
- }
- private void _read() {
- this.pphVersion = this._io.readU1();
- this.pphFlags = this._io.readU1();
- this.pphLen = this._io.readU2le();
- this.pphDlt = PacketPpi.Linktype.byId(this._io.readU4le());
- }
- private int pphVersion;
- private int pphFlags;
- private int pphLen;
- private Linktype pphDlt;
- private PacketPpi _root;
- private PacketPpi _parent;
- public int pphVersion() { return pphVersion; }
- public int pphFlags() { return pphFlags; }
- public int pphLen() { return pphLen; }
- public Linktype pphDlt() { return pphDlt; }
- public PacketPpi _root() { return _root; }
- public PacketPpi _parent() { return _parent; }
- }
-
- /**
- * @see <a href="https://www.cacetech.com/documents/PPI_Header_format_1.0.1.pdf">PPI header format spec, section 4.1.2</a>
- */
- public static class Radio80211CommonBody extends KaitaiStruct {
- public static Radio80211CommonBody fromFile(String fileName) throws IOException {
- return new Radio80211CommonBody(new ByteBufferKaitaiStream(fileName));
- }
-
- public Radio80211CommonBody(KaitaiStream _io) {
- this(_io, null, null);
- }
-
- public Radio80211CommonBody(KaitaiStream _io, PacketPpi.PacketPpiField _parent) {
- this(_io, _parent, null);
- }
-
- public Radio80211CommonBody(KaitaiStream _io, PacketPpi.PacketPpiField _parent, PacketPpi _root) {
- super(_io);
- this._parent = _parent;
- this._root = _root;
- _read();
- }
- private void _read() {
- this.tsfTimer = this._io.readU8le();
- this.flags = this._io.readU2le();
- this.rate = this._io.readU2le();
- this.channelFreq = this._io.readU2le();
- this.channelFlags = this._io.readU2le();
- this.fhssHopset = this._io.readU1();
- this.fhssPattern = this._io.readU1();
- this.dbmAntsignal = this._io.readS1();
- this.dbmAntnoise = this._io.readS1();
- }
- private long tsfTimer;
- private int flags;
- private int rate;
- private int channelFreq;
- private int channelFlags;
- private int fhssHopset;
- private int fhssPattern;
- private byte dbmAntsignal;
- private byte dbmAntnoise;
- private PacketPpi _root;
- private PacketPpi.PacketPpiField _parent;
- public long tsfTimer() { return tsfTimer; }
- public int flags() { return flags; }
- public int rate() { return rate; }
- public int channelFreq() { return channelFreq; }
- public int channelFlags() { return channelFlags; }
- public int fhssHopset() { return fhssHopset; }
- public int fhssPattern() { return fhssPattern; }
- public byte dbmAntsignal() { return dbmAntsignal; }
- public byte dbmAntnoise() { return dbmAntnoise; }
- public PacketPpi _root() { return _root; }
- public PacketPpi.PacketPpiField _parent() { return _parent; }
- }
-
- /**
- * @see <a href="https://www.cacetech.com/documents/PPI_Header_format_1.0.1.pdf">PPI header format spec, section 3.1</a>
- */
- public static class PacketPpiField extends KaitaiStruct {
- public static PacketPpiField fromFile(String fileName) throws IOException {
- return new PacketPpiField(new ByteBufferKaitaiStream(fileName));
- }
-
- public PacketPpiField(KaitaiStream _io) {
- this(_io, null, null);
- }
-
- public PacketPpiField(KaitaiStream _io, PacketPpi.PacketPpiFields _parent) {
- this(_io, _parent, null);
- }
-
- public PacketPpiField(KaitaiStream _io, PacketPpi.PacketPpiFields _parent, PacketPpi _root) {
- super(_io);
- this._parent = _parent;
- this._root = _root;
- _read();
- }
- private void _read() {
- this.pfhType = PacketPpi.PfhType.byId(this._io.readU2le());
- this.pfhDatalen = this._io.readU2le();
- switch (pfhType()) {
- case RADIO_802_11_COMMON: {
- this._raw_body = this._io.readBytes(pfhDatalen());
- KaitaiStream _io__raw_body = new ByteBufferKaitaiStream(_raw_body);
- this.body = new Radio80211CommonBody(_io__raw_body, this, _root);
- break;
- }
- case RADIO_802_11N_MAC_EXT: {
- this._raw_body = this._io.readBytes(pfhDatalen());
- KaitaiStream _io__raw_body = new ByteBufferKaitaiStream(_raw_body);
- this.body = new Radio80211nMacExtBody(_io__raw_body, this, _root);
- break;
- }
- case RADIO_802_11N_MAC_PHY_EXT: {
- this._raw_body = this._io.readBytes(pfhDatalen());
- KaitaiStream _io__raw_body = new ByteBufferKaitaiStream(_raw_body);
- this.body = new Radio80211nMacPhyExtBody(_io__raw_body, this, _root);
- break;
- }
- default: {
- this.body = this._io.readBytes(pfhDatalen());
- break;
- }
- }
- }
- private PfhType pfhType;
- private int pfhDatalen;
- private Object body;
- private PacketPpi _root;
- private PacketPpi.PacketPpiFields _parent;
- private byte[] _raw_body;
- public PfhType pfhType() { return pfhType; }
- public int pfhDatalen() { return pfhDatalen; }
- public Object body() { return body; }
- public PacketPpi _root() { return _root; }
- public PacketPpi.PacketPpiFields _parent() { return _parent; }
- public byte[] _raw_body() { return _raw_body; }
- }
-
- /**
- * @see <a href="https://www.cacetech.com/documents/PPI_Header_format_1.0.1.pdf">PPI header format spec, section 4.1.4</a>
- */
- public static class Radio80211nMacPhyExtBody extends KaitaiStruct {
- public static Radio80211nMacPhyExtBody fromFile(String fileName) throws IOException {
- return new Radio80211nMacPhyExtBody(new ByteBufferKaitaiStream(fileName));
- }
-
- public Radio80211nMacPhyExtBody(KaitaiStream _io) {
- this(_io, null, null);
- }
-
- public Radio80211nMacPhyExtBody(KaitaiStream _io, PacketPpi.PacketPpiField _parent) {
- this(_io, _parent, null);
- }
-
- public Radio80211nMacPhyExtBody(KaitaiStream _io, PacketPpi.PacketPpiField _parent, PacketPpi _root) {
- super(_io);
- this._parent = _parent;
- this._root = _root;
- _read();
- }
- private void _read() {
- this.flags = new MacFlags(this._io, this, _root);
- this.aMpduId = this._io.readU4le();
- this.numDelimiters = this._io.readU1();
- this.mcs = this._io.readU1();
- this.numStreams = this._io.readU1();
- this.rssiCombined = this._io.readU1();
- rssiAntCtl = new ArrayList<Integer>((int) (4));
- for (int i = 0; i < 4; i++) {
- this.rssiAntCtl.add(this._io.readU1());
- }
- rssiAntExt = new ArrayList<Integer>((int) (4));
- for (int i = 0; i < 4; i++) {
- this.rssiAntExt.add(this._io.readU1());
- }
- this.extChannelFreq = this._io.readU2le();
- this.extChannelFlags = new ChannelFlags(this._io, this, _root);
- rfSignalNoise = new ArrayList<SignalNoise>((int) (4));
- for (int i = 0; i < 4; i++) {
- this.rfSignalNoise.add(new SignalNoise(this._io, this, _root));
- }
- evm = new ArrayList<Long>((int) (4));
- for (int i = 0; i < 4; i++) {
- this.evm.add(this._io.readU4le());
- }
- }
- public static class ChannelFlags extends KaitaiStruct {
- public static ChannelFlags fromFile(String fileName) throws IOException {
- return new ChannelFlags(new ByteBufferKaitaiStream(fileName));
- }
-
- public ChannelFlags(KaitaiStream _io) {
- this(_io, null, null);
- }
-
- public ChannelFlags(KaitaiStream _io, PacketPpi.Radio80211nMacPhyExtBody _parent) {
- this(_io, _parent, null);
- }
-
- public ChannelFlags(KaitaiStream _io, PacketPpi.Radio80211nMacPhyExtBody _parent, PacketPpi _root) {
- super(_io);
- this._parent = _parent;
- this._root = _root;
- _read();
- }
- private void _read() {
- this.spectrum2ghz = this._io.readBitsInt(1) != 0;
- this.ofdm = this._io.readBitsInt(1) != 0;
- this.cck = this._io.readBitsInt(1) != 0;
- this.turbo = this._io.readBitsInt(1) != 0;
- this.unused = this._io.readBitsInt(8);
- this.gfsk = this._io.readBitsInt(1) != 0;
- this.dynCckOfdm = this._io.readBitsInt(1) != 0;
- this.onlyPassiveScan = this._io.readBitsInt(1) != 0;
- this.spectrum5ghz = this._io.readBitsInt(1) != 0;
- }
- private boolean spectrum2ghz;
- private boolean ofdm;
- private boolean cck;
- private boolean turbo;
- private long unused;
- private boolean gfsk;
- private boolean dynCckOfdm;
- private boolean onlyPassiveScan;
- private boolean spectrum5ghz;
- private PacketPpi _root;
- private PacketPpi.Radio80211nMacPhyExtBody _parent;
-
- /**
- * 2 GHz spectrum
- */
- public boolean spectrum2ghz() { return spectrum2ghz; }
-
- /**
- * OFDM (Orthogonal Frequency-Division Multiplexing)
- */
- public boolean ofdm() { return ofdm; }
-
- /**
- * CCK (Complementary Code Keying)
- */
- public boolean cck() { return cck; }
- public boolean turbo() { return turbo; }
- public long unused() { return unused; }
-
- /**
- * Gaussian Frequency Shift Keying
- */
- public boolean gfsk() { return gfsk; }
-
- /**
- * Dynamic CCK-OFDM
- */
- public boolean dynCckOfdm() { return dynCckOfdm; }
-
- /**
- * Only passive scan allowed
- */
- public boolean onlyPassiveScan() { return onlyPassiveScan; }
-
- /**
- * 5 GHz spectrum
- */
- public boolean spectrum5ghz() { return spectrum5ghz; }
- public PacketPpi _root() { return _root; }
- public PacketPpi.Radio80211nMacPhyExtBody _parent() { return _parent; }
- }
-
- /**
- * RF signal + noise pair at a single antenna
- */
- public static class SignalNoise extends KaitaiStruct {
- public static SignalNoise fromFile(String fileName) throws IOException {
- return new SignalNoise(new ByteBufferKaitaiStream(fileName));
- }
-
- public SignalNoise(KaitaiStream _io) {
- this(_io, null, null);
- }
-
- public SignalNoise(KaitaiStream _io, PacketPpi.Radio80211nMacPhyExtBody _parent) {
- this(_io, _parent, null);
- }
-
- public SignalNoise(KaitaiStream _io, PacketPpi.Radio80211nMacPhyExtBody _parent, PacketPpi _root) {
- super(_io);
- this._parent = _parent;
- this._root = _root;
- _read();
- }
- private void _read() {
- this.signal = this._io.readS1();
- this.noise = this._io.readS1();
- }
- private byte signal;
- private byte noise;
- private PacketPpi _root;
- private PacketPpi.Radio80211nMacPhyExtBody _parent;
-
- /**
- * RF signal, dBm
- */
- public byte signal() { return signal; }
-
- /**
- * RF noise, dBm
- */
- public byte noise() { return noise; }
- public PacketPpi _root() { return _root; }
- public PacketPpi.Radio80211nMacPhyExtBody _parent() { return _parent; }
- }
- private MacFlags flags;
- private long aMpduId;
- private int numDelimiters;
- private int mcs;
- private int numStreams;
- private int rssiCombined;
- private ArrayList<Integer> rssiAntCtl;
- private ArrayList<Integer> rssiAntExt;
- private int extChannelFreq;
- private ChannelFlags extChannelFlags;
- private ArrayList<SignalNoise> rfSignalNoise;
- private ArrayList<Long> evm;
- private PacketPpi _root;
- private PacketPpi.PacketPpiField _parent;
- public MacFlags flags() { return flags; }
- public long aMpduId() { return aMpduId; }
- public int numDelimiters() { return numDelimiters; }
-
- /**
- * Modulation Coding Scheme (MCS)
- */
- public int mcs() { return mcs; }
-
- /**
- * Number of spatial streams (0 = unknown)
- */
- public int numStreams() { return numStreams; }
-
- /**
- * RSSI (Received Signal Strength Indication), combined from all active antennas / channels
- */
- public int rssiCombined() { return rssiCombined; }
-
- /**
- * RSSI (Received Signal Strength Indication) for antennas 0-3, control channel
- */
- public ArrayList<Integer> rssiAntCtl() { return rssiAntCtl; }
-
- /**
- * RSSI (Received Signal Strength Indication) for antennas 0-3, extension channel
- */
- public ArrayList<Integer> rssiAntExt() { return rssiAntExt; }
-
- /**
- * Extension channel frequency (MHz)
- */
- public int extChannelFreq() { return extChannelFreq; }
-
- /**
- * Extension channel flags
- */
- public ChannelFlags extChannelFlags() { return extChannelFlags; }
-
- /**
- * Signal + noise values for antennas 0-3
- */
- public ArrayList<SignalNoise> rfSignalNoise() { return rfSignalNoise; }
-
- /**
- * EVM (Error Vector Magnitude) for chains 0-3
- */
- public ArrayList<Long> evm() { return evm; }
- public PacketPpi _root() { return _root; }
- public PacketPpi.PacketPpiField _parent() { return _parent; }
- }
- private PacketPpiHeader header;
- private PacketPpiFields fields;
- private Object body;
- private PacketPpi _root;
- private KaitaiStruct _parent;
- private byte[] _raw_fields;
- private byte[] _raw_body;
- public PacketPpiHeader header() { return header; }
- public PacketPpiFields fields() { return fields; }
- public Object body() { return body; }
- public PacketPpi _root() { return _root; }
- public KaitaiStruct _parent() { return _parent; }
- public byte[] _raw_fields() { return _raw_fields; }
- public byte[] _raw_body() { return _raw_body; }
-}
+++ /dev/null
-// This is a generated file! Please edit source .ksy file and use kaitai-struct-compiler to rebuild
-package edu.uci.iotproject;
-
-import io.kaitai.struct.ByteBufferKaitaiStream;
-import io.kaitai.struct.KaitaiStruct;
-import io.kaitai.struct.KaitaiStream;
-import java.io.IOException;
-import java.util.Map;
-import java.util.HashMap;
-import java.util.ArrayList;
-
-
-/**
- * @see <a href="http://wiki.wireshark.org/Development/LibpcapFileFormat">Source</a>
- */
-public class Pcap extends KaitaiStruct {
- public static Pcap fromFile(String fileName) throws IOException {
- return new Pcap(new ByteBufferKaitaiStream(fileName));
- }
-
- public enum Linktype {
- NULL_LINKTYPE(0),
- ETHERNET(1),
- AX25(3),
- IEEE802_5(6),
- ARCNET_BSD(7),
- SLIP(8),
- PPP(9),
- FDDI(10),
- PPP_HDLC(50),
- PPP_ETHER(51),
- ATM_RFC1483(100),
- RAW(101),
- C_HDLC(104),
- IEEE802_11(105),
- FRELAY(107),
- LOOP(108),
- LINUX_SLL(113),
- LTALK(114),
- PFLOG(117),
- IEEE802_11_PRISM(119),
- IP_OVER_FC(122),
- SUNATM(123),
- IEEE802_11_RADIOTAP(127),
- ARCNET_LINUX(129),
- APPLE_IP_OVER_IEEE1394(138),
- MTP2_WITH_PHDR(139),
- MTP2(140),
- MTP3(141),
- SCCP(142),
- DOCSIS(143),
- LINUX_IRDA(144),
- USER0(147),
- USER1(148),
- USER2(149),
- USER3(150),
- USER4(151),
- USER5(152),
- USER6(153),
- USER7(154),
- USER8(155),
- USER9(156),
- USER10(157),
- USER11(158),
- USER12(159),
- USER13(160),
- USER14(161),
- USER15(162),
- IEEE802_11_AVS(163),
- BACNET_MS_TP(165),
- PPP_PPPD(166),
- GPRS_LLC(169),
- GPF_T(170),
- GPF_F(171),
- LINUX_LAPD(177),
- BLUETOOTH_HCI_H4(187),
- USB_LINUX(189),
- PPI(192),
- IEEE802_15_4(195),
- SITA(196),
- ERF(197),
- BLUETOOTH_HCI_H4_WITH_PHDR(201),
- AX25_KISS(202),
- LAPD(203),
- PPP_WITH_DIR(204),
- C_HDLC_WITH_DIR(205),
- FRELAY_WITH_DIR(206),
- IPMB_LINUX(209),
- IEEE802_15_4_NONASK_PHY(215),
- USB_LINUX_MMAPPED(220),
- FC_2(224),
- FC_2_WITH_FRAME_DELIMS(225),
- IPNET(226),
- CAN_SOCKETCAN(227),
- IPV4(228),
- IPV6(229),
- IEEE802_15_4_NOFCS(230),
- DBUS(231),
- DVB_CI(235),
- MUX27010(236),
- STANAG_5066_D_PDU(237),
- NFLOG(239),
- NETANALYZER(240),
- NETANALYZER_TRANSPARENT(241),
- IPOIB(242),
- MPEG_2_TS(243),
- NG40(244),
- NFC_LLCP(245),
- INFINIBAND(247),
- SCTP(248),
- USBPCAP(249),
- RTAC_SERIAL(250),
- BLUETOOTH_LE_LL(251),
- NETLINK(253),
- BLUETOOTH_LINUX_MONITOR(254),
- BLUETOOTH_BREDR_BB(255),
- BLUETOOTH_LE_LL_WITH_PHDR(256),
- PROFIBUS_DL(257),
- PKTAP(258),
- EPON(259),
- IPMI_HPM_2(260),
- ZWAVE_R1_R2(261),
- ZWAVE_R3(262),
- WATTSTOPPER_DLM(263),
- ISO_14443(264);
-
- private final long id;
- Linktype(long id) { this.id = id; }
- public long id() { return id; }
- private static final Map<Long, Linktype> byId = new HashMap<Long, Linktype>(104);
- static {
- for (Linktype e : Linktype.values())
- byId.put(e.id(), e);
- }
- public static Linktype byId(long id) { return byId.get(id); }
- }
-
- public Pcap(KaitaiStream _io) {
- this(_io, null, null);
- }
-
- public Pcap(KaitaiStream _io, KaitaiStruct _parent) {
- this(_io, _parent, null);
- }
-
- public Pcap(KaitaiStream _io, KaitaiStruct _parent, Pcap _root) {
- super(_io);
- this._parent = _parent;
- this._root = _root == null ? this : _root;
- _read();
- }
- private void _read() {
- this.hdr = new Header(this._io, this, _root);
- this.packets = new ArrayList<Packet>();
- {
- int i = 0;
- while (!this._io.isEof()) {
- this.packets.add(new Packet(this._io, this, _root));
- i++;
- }
- }
- }
-
- /**
- * @see <a href="https://wiki.wireshark.org/Development/LibpcapFileFormat#Global_Header">Source</a>
- */
- public static class Header extends KaitaiStruct {
- public static Header fromFile(String fileName) throws IOException {
- return new Header(new ByteBufferKaitaiStream(fileName));
- }
-
- public Header(KaitaiStream _io) {
- this(_io, null, null);
- }
-
- public Header(KaitaiStream _io, Pcap _parent) {
- this(_io, _parent, null);
- }
-
- public Header(KaitaiStream _io, Pcap _parent, Pcap _root) {
- super(_io);
- this._parent = _parent;
- this._root = _root;
- _read();
- }
- private void _read() {
- this.magicNumber = this._io.ensureFixedContents(new byte[] { -44, -61, -78, -95 });
- this.versionMajor = this._io.readU2le();
- this.versionMinor = this._io.readU2le();
- this.thiszone = this._io.readS4le();
- this.sigfigs = this._io.readU4le();
- this.snaplen = this._io.readU4le();
- this.network = Pcap.Linktype.byId(this._io.readU4le());
- }
- private byte[] magicNumber;
- private int versionMajor;
- private int versionMinor;
- private int thiszone;
- private long sigfigs;
- private long snaplen;
- private Linktype network;
- private Pcap _root;
- private Pcap _parent;
- public byte[] magicNumber() { return magicNumber; }
- public int versionMajor() { return versionMajor; }
- public int versionMinor() { return versionMinor; }
-
- /**
- * Correction time in seconds between UTC and the local
- * timezone of the following packet header timestamps.
- */
- public int thiszone() { return thiszone; }
-
- /**
- * In theory, the accuracy of time stamps in the capture; in
- * practice, all tools set it to 0.
- */
- public long sigfigs() { return sigfigs; }
-
- /**
- * The "snapshot length" for the capture (typically 65535 or
- * even more, but might be limited by the user), see: incl_len
- * vs. orig_len.
- */
- public long snaplen() { return snaplen; }
-
- /**
- * Link-layer header type, specifying the type of headers at
- * the beginning of the packet.
- */
- public Linktype network() { return network; }
- public Pcap _root() { return _root; }
- public Pcap _parent() { return _parent; }
- }
-
- /**
- * @see <a href="https://wiki.wireshark.org/Development/LibpcapFileFormat#Record_.28Packet.29_Header">Source</a>
- */
- public static class Packet extends KaitaiStruct {
- public static Packet fromFile(String fileName) throws IOException {
- return new Packet(new ByteBufferKaitaiStream(fileName));
- }
-
- public Packet(KaitaiStream _io) {
- this(_io, null, null);
- }
-
- public Packet(KaitaiStream _io, Pcap _parent) {
- this(_io, _parent, null);
- }
-
- public Packet(KaitaiStream _io, Pcap _parent, Pcap _root) {
- super(_io);
- this._parent = _parent;
- this._root = _root;
- _read();
- }
- private void _read() {
- this.tsSec = this._io.readU4le();
- this.tsUsec = this._io.readU4le();
- this.inclLen = this._io.readU4le();
- this.origLen = this._io.readU4le();
- switch (_root.hdr().network()) {
- case PPI: {
- this._raw_body = this._io.readBytes(inclLen());
- KaitaiStream _io__raw_body = new ByteBufferKaitaiStream(_raw_body);
- this.body = new PacketPpi(_io__raw_body);
- break;
- }
- case ETHERNET: {
- this._raw_body = this._io.readBytes(inclLen());
- KaitaiStream _io__raw_body = new ByteBufferKaitaiStream(_raw_body);
- this.body = new EthernetFrame(_io__raw_body);
- break;
- }
- default: {
- this.body = this._io.readBytes(inclLen());
- break;
- }
- }
- }
- private long tsSec;
- private long tsUsec;
- private long inclLen;
- private long origLen;
- private Object body;
- private Pcap _root;
- private Pcap _parent;
- private byte[] _raw_body;
- public long tsSec() { return tsSec; }
- public long tsUsec() { return tsUsec; }
-
- /**
- * Number of bytes of packet data actually captured and saved in the file.
- */
- public long inclLen() { return inclLen; }
-
- /**
- * Length of the packet as it appeared on the network when it was captured.
- */
- public long origLen() { return origLen; }
-
- /**
- * @see <a href="https://wiki.wireshark.org/Development/LibpcapFileFormat#Packet_Data">Source</a>
- */
- public Object body() { return body; }
- public Pcap _root() { return _root; }
- public Pcap _parent() { return _parent; }
- public byte[] _raw_body() { return _raw_body; }
- }
- private Header hdr;
- private ArrayList<Packet> packets;
- private Pcap _root;
- private KaitaiStruct _parent;
- public Header hdr() { return hdr; }
- public ArrayList<Packet> packets() { return packets; }
- public Pcap _root() { return _root; }
- public KaitaiStruct _parent() { return _parent; }
-}
+++ /dev/null
-// This is a generated file! Please edit source .ksy file and use kaitai-struct-compiler to rebuild
-package edu.uci.iotproject;
-
-import io.kaitai.struct.ByteBufferKaitaiStream;
-import io.kaitai.struct.KaitaiStruct;
-import io.kaitai.struct.KaitaiStream;
-import java.io.IOException;
-
-public class TcpSegment extends KaitaiStruct {
- public static TcpSegment fromFile(String fileName) throws IOException {
- return new TcpSegment(new ByteBufferKaitaiStream(fileName));
- }
-
- public TcpSegment(KaitaiStream _io) {
- this(_io, null, null);
- }
-
- public TcpSegment(KaitaiStream _io, KaitaiStruct _parent) {
- this(_io, _parent, null);
- }
-
- public TcpSegment(KaitaiStream _io, KaitaiStruct _parent, TcpSegment _root) {
- super(_io);
- this._parent = _parent;
- this._root = _root == null ? this : _root;
- _read();
- }
- private void _read() {
- this.srcPort = this._io.readU2be();
- this.dstPort = this._io.readU2be();
- this.seqNum = this._io.readU4be();
- this.ackNum = this._io.readU4be();
- this.b12 = this._io.readU1();
- this.b13 = this._io.readU1();
- this.windowSize = this._io.readU2be();
- this.checksum = this._io.readU2be();
- this.urgentPointer = this._io.readU2be();
- this.body = this._io.readBytesFull();
- }
- private int srcPort;
- private int dstPort;
- private long seqNum;
- private long ackNum;
- private int b12;
- private int b13;
- private int windowSize;
- private int checksum;
- private int urgentPointer;
- private byte[] body;
- private TcpSegment _root;
- private KaitaiStruct _parent;
- public int srcPort() { return srcPort; }
- public int dstPort() { return dstPort; }
- public long seqNum() { return seqNum; }
- public long ackNum() { return ackNum; }
- public int b12() { return b12; }
- public int b13() { return b13; }
- public int windowSize() { return windowSize; }
- public int checksum() { return checksum; }
- public int urgentPointer() { return urgentPointer; }
- public byte[] body() { return body; }
- public TcpSegment _root() { return _root; }
- public KaitaiStruct _parent() { return _parent; }
-}
+++ /dev/null
-// This is a generated file! Please edit source .ksy file and use kaitai-struct-compiler to rebuild
-package edu.uci.iotproject;
-
-import io.kaitai.struct.ByteBufferKaitaiStream;
-import io.kaitai.struct.KaitaiStruct;
-import io.kaitai.struct.KaitaiStream;
-import java.io.IOException;
-
-
-/**
- * UDP is a simple stateless transport layer (AKA OSI layer 4)
- * protocol, one of the core Internet protocols. It provides source and
- * destination ports, basic checksumming, but provides not guarantees
- * of delivery, order of packets, or duplicate delivery.
- */
-public class UdpDatagram extends KaitaiStruct {
- public static UdpDatagram fromFile(String fileName) throws IOException {
- return new UdpDatagram(new ByteBufferKaitaiStream(fileName));
- }
-
- public UdpDatagram(KaitaiStream _io) {
- this(_io, null, null);
- }
-
- public UdpDatagram(KaitaiStream _io, KaitaiStruct _parent) {
- this(_io, _parent, null);
- }
-
- public UdpDatagram(KaitaiStream _io, KaitaiStruct _parent, UdpDatagram _root) {
- super(_io);
- this._parent = _parent;
- this._root = _root == null ? this : _root;
- _read();
- }
- private void _read() {
- this.srcPort = this._io.readU2be();
- this.dstPort = this._io.readU2be();
- this.length = this._io.readU2be();
- this.checksum = this._io.readU2be();
- this.body = this._io.readBytesFull();
- }
- private int srcPort;
- private int dstPort;
- private int length;
- private int checksum;
- private byte[] body;
- private UdpDatagram _root;
- private KaitaiStruct _parent;
- public int srcPort() { return srcPort; }
- public int dstPort() { return dstPort; }
- public int length() { return length; }
- public int checksum() { return checksum; }
- public byte[] body() { return body; }
- public UdpDatagram _root() { return _root; }
- public KaitaiStruct _parent() { return _parent; }
-}