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));
@Test public void testHasValidChecksum() { assertFalse(packet1.getHeader().hasValidChecksum(false)); assertFalse(packet1.getHeader().hasValidChecksum(true)); IpV4Packet.Builder b = packet1.getBuilder(); IpV4Packet p; b.headerChecksum((short) 0).correctChecksumAtBuild(false); p = b.build(); assertFalse(p.getHeader().hasValidChecksum(false)); assertTrue(p.getHeader().hasValidChecksum(true)); b.correctChecksumAtBuild(true); p = b.build(); assertTrue(p.getHeader().hasValidChecksum(false)); assertTrue(p.getHeader().hasValidChecksum(true)); }
IpV4Header header = packet.getHeader(); byte[] payload = packet.getPayload().getRawData(); int max_payload_length = mtu - header.length();
public boolean isAllPacketsReceived() { if (!isLastPacketReceived) { return false; } int expectedOffset = 0; for (Map.Entry<Integer, IpV4Packet> entry : packets.entrySet()) { int offset = entry.getKey(); if (offset != expectedOffset) { return false; } IpV4Packet p = entry.getValue(); expectedOffset = offset + p.getHeader().getTotalLength() - 4 * p.getHeader().getIhl(); } return true; }
@Test public void testGetHeader() { IpV4Header h = packet1.getHeader(); assertEquals(version, h.getVersion()); assertEquals(ihl, h.getIhl()); assertEquals((byte) 0, p.getHeader().getIhl()); assertEquals((byte) 15, p.getHeader().getIhl()); assertEquals((short) 0, p.getHeader().getFragmentOffset()); assertEquals((short) 8191, p.getHeader().getFragmentOffset()); b.ttl((byte) 0); p = b.build(); assertEquals((short) 0, (short) p.getHeader().getTotalLengthAsInt()); assertEquals((short) 0, (short) p.getHeader().getIdentificationAsInt()); assertEquals((byte) 0, (byte) p.getHeader().getTtlAsInt()); b.ttl((byte) 127); p = b.build(); assertEquals((short) 32767, (short) p.getHeader().getTotalLengthAsInt()); assertEquals((short) 32767, (short) p.getHeader().getIdentificationAsInt()); assertEquals((byte) 127, (byte) p.getHeader().getTtlAsInt()); b.ttl((byte) 0); p = b.build(); assertEquals((short) -1, (short) p.getHeader().getTotalLengthAsInt()); assertEquals((short) -1, (short) p.getHeader().getIdentificationAsInt());
@Test public void testHasValidChecksumFFFF() throws Exception { PcapHandle pcapHandle = Pcaps.openOffline(resourceDirPath.concat("/UdpPacketTestChecksum0xFFFF.pcap")); Packet packet = pcapHandle.getNextPacket(); assertNotNull(packet); assertTrue(packet.contains(IpV4Packet.class)); IpV4Packet ipV4Packet = packet.get(IpV4Packet.class); assertNotNull(ipV4Packet); IpV4Packet.IpV4Header ipV4Header = ipV4Packet.getHeader(); assertNotNull(ipV4Header); assertTrue(ipV4Packet.contains(UdpPacket.class)); UdpPacket udpPacket = ipV4Packet.get(UdpPacket.class); assertNotNull(udpPacket); assertEquals((short) 0xFFFF, udpPacket.getHeader().getChecksum()); assertTrue(udpPacket.hasValidChecksum(ipV4Header.getSrcAddr(), ipV4Header.getDstAddr(), false)); }
public static boolean matchesDestination( Packet packet, Inet4Address addr, Inet4Address subnetmask ) { IpV4Packet ipv4Packet = packet.get(IpV4Packet.class); if (ipv4Packet == null) { throw new IllegalArgumentException(packet.toString()); } Inet4Address dstAddr = ipv4Packet.getHeader().getDstAddr(); if (dstAddr.equals(addr)) { return true; } if (!isSameNetwork(addr, dstAddr, subnetmask)) { return false; } return isBroadcastAddr(dstAddr, subnetmask); }
public static IpV4Packet decrementTtl( IpV4Packet packet ) throws TimeoutException { int ttl = packet.getHeader().getTtlAsInt(); if (ttl <= 1) { throw new TimeoutException(); } ttl--; IpV4Packet.Builder b = packet.getBuilder().ttl((byte)ttl).correctChecksumAtBuild(true); return b.build(); }
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));
Collections.sort(list, comparator); IpV4Header lastPacketHeader = list.get(list.size() - 1).getHeader(); int payloadLength = lastPacketHeader.getFragmentOffset() * 8
public void processMessage(Packet packet) { UdpPacket udpPacket = packet.get(UdpPacket.class); byte[] snmpMessage = udpPacket.getPayload().getRawData(); InetAddress srcAddr; IpV4Packet ipV4Packet = packet.get(IpV4Packet.class); if (ipV4Packet != null) { srcAddr = ipV4Packet.getHeader().getSrcAddr(); } else { srcAddr = packet.get(IpV6Packet.class).getHeader().getSrcAddr(); } int srcPort = udpPacket.getHeader().getSrcPort().value() & 0xFFFF; ByteBuffer bis; if (isAsyncMsgProcessingSupported()) { byte[] rawData = new byte[snmpMessage.length]; System.arraycopy(snmpMessage, 0, rawData, 0, rawData.length); bis = ByteBuffer.wrap(rawData); } else { bis = ByteBuffer.wrap(snmpMessage); } fireProcessMessage( new UdpAddress(srcAddr, srcPort), bis ); }
@Override public void onEvent(PacketContainer container, long sequence, boolean endOfBatch) throws Exception { IpV4Packet ipV4Packet = container.getIpV4Packet(); if (ipV4Packet == null) { return; } IpV4Packet.IpV4Header ipV4Header = ipV4Packet.getHeader(); if (!ipV4Header.getMoreFragmentFlag() && ipV4Header.getFragmentOffset() == 0) { return; } int identification = ipV4Header.getIdentificationAsInt(); if (shouldSkipEvent(identification, order, total)) { return; } // It seems to be the best place to call 'checkExpired()'... checkExpired(); FragmentedPackets fragmentedPackets = accumulator.computeIfAbsent(identification, i -> new FragmentedPackets()); fragmentedPackets.addPacket(ipV4Packet); if (fragmentedPackets.isAllPacketsReceived()) { try { container.setIpV4Packet(IpV4Helper.defragment(fragmentedPackets.getPackets())); } finally { accumulator.remove(identification); } } else { container.setIpV4Packet(null); } }
@Override public void onEvent(PacketContainer container, long sequence, boolean endOfBatch) throws Exception { if (shouldSkipEvent(sequence)) { return; } DataLinkType dlt = container.getDlt(); byte[] data = container.getRawPacket(); Packet packet = PacketFactories.getFactory(Packet.class, DataLinkType.class) .newInstance(data, 0, data.length, dlt); // Don't use packet.get(IpV4Packet.class). // In case of 'IP in IP' packets it doesn't work properly. IpV4Packet ipV4Packet = extractIpV4Packet(packet, pkt -> pkt.getOuterOf(UdpPacket.class), pkt -> pkt.getOuterOf(TcpPacket.class), pkt -> pkt.getOuterOf(FragmentedPacket.class)); if (ipV4Packet != null) { IpNumber protocol = ipV4Packet.getHeader().getProtocol(); if (protocol.compareTo(IpNumber.UDP) == 0 || protocol.compareTo(IpNumber.TCP) == 0) { container.setIpV4Packet(ipV4Packet); } } }
IpV4Packet ipV4Packet = context.getRequestPacket().get(IpV4Packet.class); if (ipV4Packet != null) { srcAddr = context.getRequestPacket().get(IpV4Packet.class).getHeader() .getDstAddr();