Sniffy - capture network traffic

Capture all traffic from JVM-based apps without privileged access

Capture network traffic sent and received by JVM-based applications

    @Test
    public void testCaptureTraffic() throws Exception {

        try (Spy<?> spy = Sniffy.spy(
                SpyConfiguration.builder().captureNetworkTraffic(true).build()) // <1>
        ) {

            performSocketOperation(); // <2>

            Map<SocketMetaData, List<NetworkPacket>> networkTraffic = spy.getNetworkTraffic( // <3>
                    Threads.ANY, // <4>
                    AddressMatchers.anyAddressMatcher(), // <5>
                    GroupingOptions.builder().
                            groupByThread(false). // <6>
                            groupByStackTrace(false). // <7>
                            groupByConnection(false). // <8>
                            build()
            );

            assertEquals(1, networkTraffic.size());

            for (Map.Entry<SocketMetaData, List<NetworkPacket>> entry : networkTraffic.entrySet()) {

                SocketMetaData socketMetaData = entry.getKey(); // <9>

                Protocol protocol = socketMetaData.getProtocol(); // say TCP
                String hostName = socketMetaData.getAddress().getHostName(); // say "hostname.acme.com"
                int port = socketMetaData.getAddress().getPort(); // say 443

                List<NetworkPacket> networkPackets = entry.getValue(); // <10>

                assertArrayEquals(REQUEST, networkPackets.get(0).getBytes());
                assertTrue(networkPackets.get(0).isSent());

                assertArrayEquals(RESPONSE, networkPackets.get(1).getBytes());
                assertFalse(networkPackets.get(1).isSent());

            }

        }

    }
    

TLS/SSL Decryption

Sniffy can even decrypt TLS/SSL traffic and show you unencrypted bytes. They're available using dedicated method getDecryptedNetworkTraffic().