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().