| Configuration | Packets/Second | Amplification Factor | Latency (ms) | | :--- | :--- | :--- | :--- | | Direct (No Proxy) | 850,000 | 58x | 0.8 | | Generic SOCKS5 Proxy | 12,000 | 58x (but packet loss) | 240 | | | 790,000 | 57x | 2.4 | | Reflect4 Proxy + stunnel TLS | 610,000 | 57x | 8.1 |
The kernel must accept packets that arrive via a route different from their origin (common in asymmetric reflection). reflect4 proxies
| Concept | Role | |---------------|-----------------------------------------------------------------------| | | Intercepts operations on an object. | | Reflect | Provides default behavior for those operations. | | reflect4 | A pattern where each proxy trap calls the corresponding Reflect method to maintain correct default behavior and avoid bugs. | Reflect4 proxies Reflect4 Proxy (UDP Raw) | Configuration
public interface MyInvocationHandler Object invoke(Object proxy, Method method, Object[] args) throws Throwable; | | reflect4 | A pattern where each
public long getCount(String methodName) return counts.getOrDefault(methodName, new AtomicLong()).get();
public class LoggingInterceptor @RuntimeType public static Object intercept(@Origin Method method, @AllArguments Object[] args, @SuperCall Callable<?> zuper) throws Exception System.out.println("Entering: " + method.getName()); try Object result = zuper.call(); System.out.println("Exiting: " + method.getName()); return result; catch (Exception e) System.out.println("Error: " + e); throw e;