/** * Apply the filter on a given packet. Return true if the packet given passes the filter that is * built from this program. * * @param packet the packet to apply the filter on * @return true if this program is not freed and the packet passes the filter; false otherwise. */ public boolean applyFilter(Packet packet) { return applyFilter(packet.getRawData()); }
/** * Checks if the given packet contains a Udp packet ({@link UdpPacket}). * * @param packet packet * @return true if the packet contains a UDP packet; false otherwise. */ public static boolean containsUdpPacket(Packet packet) { return packet.contains(UdpPacket.class); }
private Builder(IcmpV4CommonPacket packet) { this.type = packet.header.type; this.code = packet.header.code; this.checksum = packet.header.checksum; this.payloadBuilder = packet.payload != null ? packet.payload.getBuilder() : null; }
/** * @param packet an IPv4 Packet * @return a new Packet object. */ public static Packet makePacketForInvokingPacketField(Packet packet) { if (packet == null || packet.getHeader() == null || packet.getPayload() == null) { StringBuilder sb = new StringBuilder(); sb.append("packet: ") .append(packet) .append(" packet.getHeader(): ") .append(packet.getHeader()) .append(" packet.getPayload(): ") .append(packet.getPayload()); throw new NullPointerException(sb.toString()); } return IcmpV6Helper.makePacketForInvokingPacketField(packet, 8 + packet.getHeader().length()); } }
@Override public byte[] getRawData() { byte[] rawData = new byte[length()]; rawData[TYPE_OFFSET] = getType().value(); rawData[LENGTH_OFFSET] = length; System.arraycopy(reserved, 0, rawData, RESERVED_OFFSET, RESERVED_SIZE); System.arraycopy(ipPacket.getRawData(), 0, rawData, IP_HEADER_OFFSET, ipPacket.length()); return rawData; }
if (packet == null || packet.getHeader() == null || packet.getPayload() == null) { StringBuilder sb = new StringBuilder(); sb.append("packet: ") .append(packet) .append(" packet.getHeader(): ") .append(packet.getHeader()) .append(" packet.getPayload(): ") .append(packet.getPayload()); throw new NullPointerException(sb.toString()); if (packet.length() <= size) { return packet; int length = packet.getHeader().length(); int prelength = length; int pos = 0; Packet last = null; for (Packet p : packet.getPayload()) { if (p.getHeader() != null) { prelength = length; length += p.getHeader().length(); pos++; if (length > size) { length += p.length(); pos++; last = p; Packet.Builder resultBuilder = packet.getBuilder();
} else if (p.contains(IllegalPacket.class)) { Packet.Builder builder = p.getBuilder(); byte[] ipRawData = p.get(IllegalPacket.class).getRawData(); builder .getOuterOf(IllegalPacket.Builder.class) PacketFactories.getFactory(Packet.class, NotApplicable.class) .newInstance(ipRawData, 0, ipRawData.length, NotApplicable.UNKNOWN) .getBuilder()); for (Packet.Builder b : builder) { if (b instanceof LengthBuilder) {
@Override public void gotPacket(Packet packet) { if (packet.contains(ArpPacket.class)) { ArpPacket arp = packet.get(ArpPacket.class); if (arp.getHeader().getOperation().equals(ArpOperation.REPLY)) { SendArpRequest.resolvedAddr = arp.getHeader().getSrcHardwareAddr(); } } System.out.println(packet); } };
if (transportLayerPacket.getPayload() == null) { return; UdpPacket.UdpHeader udpHeader = (UdpPacket.UdpHeader) transportLayerPacket.getHeader(); buffer.put(ipV4Header.getSrcAddr().getAddress()); buffer.putShort(udpHeader.getSrcPort().value()); buffer.putShort(udpHeader.getDstPort().value()); } else { TcpPacket.TcpHeader tcpHeader = (TcpPacket.TcpHeader) transportLayerPacket.getHeader(); buffer.put(ipV4Header.getSrcAddr().getAddress()); buffer.putShort(tcpHeader.getSrcPort().value()); byte[] content = transportLayerPacket.getPayload().getRawData(); SipContentReader.read(content, (i1, i2) -> { buffer.position(HEADER_LENGTH);
assertTrue(mockEventLoop.lastResponse.getPayload() instanceof UdpPacket); Message responseMsg = new Message(mockEventLoop.lastResponse.getPayload().getPayload().getRawData()); assertEquals(NOERROR, responseMsg.getHeader().getRcode()); assertArrayEquals(new Record[] {}, responseMsg.getSectionArray(Section.ANSWER));
@Test public void testGetPacketWithTransportPacket() { Packet wholePacket = getWholePacket(); TransportPacket tPacket = wholePacket.get(TransportPacket.class); assertNotNull(tPacket); assertEquals(0, tPacket.getHeader().getDstPort().compareTo(dstPort)); assertEquals(0, tPacket.getHeader().getSrcPort().compareTo(srcPort)); } }
try { Packet packet = handle.getNextPacketEx(); Short id = packet.get(IpV4Packet.class).getHeader().getIdentification(); if (ipV4Packets.containsKey(id)) { ipV4Packets.get(id).add(packet.get(IpV4Packet.class)); } else { List<IpV4Packet> list = new ArrayList<IpV4Packet>(); list.add(packet.get(IpV4Packet.class)); ipV4Packets.put(id, list); originalPackets.put(id, packet); final IpV4Packet defragmentedIpV4Packet = IpV4Helper.defragment(list); Packet.Builder builder = originalPackets.get(id).getBuilder(); builder .getOuterOf(IpV4Packet.Builder.class)
@Override public Packet getOuterOf(Class<? extends Packet> clazz) { for (Packet p : this) { if (clazz.isInstance(p.getPayload())) { return p; } } return null; }
if (packet == null || packet.getHeader() == null || packet.getPayload() == null) { StringBuilder sb = new StringBuilder(); sb.append("packet: ") .append(packet) .append(" packet.getHeader(): ") .append(packet.getHeader()) .append(" packet.getPayload(): ") .append(packet.getPayload()); throw new NullPointerException(sb.toString()); if (packet.length() <= size) { return packet; int length = packet.getHeader().length(); int prelength = length; int pos = 0; Packet last = null; for (Packet p : packet.getPayload()) { if (p.getHeader() != null) { prelength = length; length += p.getHeader().length(); pos++; if (length > size) { length += p.length(); pos++; last = p; Packet.Builder resultBuilder = packet.getBuilder();
} else if (p.contains(IllegalPacket.class)) { Packet.Builder builder = p.getBuilder(); byte[] ipRawData = p.get(IllegalPacket.class).getRawData(); builder .getOuterOf(IllegalPacket.Builder.class) PacketFactories.getFactory(Packet.class, NotApplicable.class) .newInstance(ipRawData, 0, ipRawData.length, NotApplicable.UNKNOWN) .getBuilder()); for (Packet.Builder b : builder) { if (b instanceof LengthBuilder) {
@Test public void testNewPacket() { IcmpV6PacketTooBigPacket p; try { p = IcmpV6PacketTooBigPacket.newPacket(packet.getRawData(), 0, packet.getRawData().length); } catch (IllegalRawDataException e) { throw new AssertionError(e); } assertEquals(packet, p); assertTrue(p.getPayload().contains(IpV6Packet.class)); assertTrue(p.getPayload().contains(IcmpV6CommonPacket.class)); assertTrue(p.getPayload().contains(IcmpV6EchoRequestPacket.class)); assertTrue(p.getPayload().contains(UnknownPacket.class)); assertEquals(p.getPayload().get(UnknownPacket.class).length(), 3); assertFalse(p.getPayload().contains(IllegalPacket.class)); }
/** * This method builds the value {@link #getRawData getRawData()} will return by concatenating the * header's raw data and the payload's raw data. If you write this subclass which represents a * packet with extra parts (e.g. a trailer), you need to override this method. * * @return a raw data built */ protected byte[] buildRawData() { byte[] rd = new byte[length()]; Header header = getHeader(); Packet payload = getPayload(); int dstPos = 0; if (header != null) { System.arraycopy(getHeader().getRawData(), 0, rd, 0, header.length()); dstPos += header.length(); } if (payload != null) { System.arraycopy(getPayload().getRawData(), 0, rd, dstPos, payload.length()); dstPos += payload.length(); } return rd; }
assertTrue(mockEventLoop.lastResponse.getPayload() instanceof UdpPacket); Message responseMsg = new Message(mockEventLoop.lastResponse.getPayload().getPayload().getRawData()); assertEquals(NOERROR, responseMsg.getHeader().getRcode()); assertArrayEquals(new Record[] {}, responseMsg.getSectionArray(Section.ANSWER));
@Test public void testGetPacketWithTransportPacket() { Packet wholePacket = getWholePacket(); TransportPacket tPacket = wholePacket.get(TransportPacket.class); assertNotNull(tPacket); assertEquals(0, tPacket.getHeader().getDstPort().compareTo(dstPort)); assertEquals(0, tPacket.getHeader().getSrcPort().compareTo(srcPort)); } }
public static Packet untag(Packet packet) { Dot1qVlanTagPacket vp = packet.get(Dot1qVlanTagPacket.class); if (vp == null) { return packet; } Packet.Builder pb = packet.getBuilder(); pb.get(EthernetPacket.Builder.class) .type(vp.getHeader().getType()) .payloadBuilder(new SimpleBuilder(vp.getPayload())); return pb.build(); }