com.github.netcrusherorg:netcrusher-core

NetCrusher is a TCP/UDP proxy that allows yout to test your services for failover

License

License

Categories

Categories

Net
GroupId

GroupId

com.github.netcrusherorg
ArtifactId

ArtifactId

netcrusher-core
Last Version

Last Version

0.10
Release Date

Release Date

Type

Type

jar
Description

Description

com.github.netcrusherorg:netcrusher-core
NetCrusher is a TCP/UDP proxy that allows yout to test your services for failover
Project URL

Project URL

https://github.com/NetCrusherOrg/netcrusher-java
Project Organization

Project Organization

NetCrusher for Java
Source Code Management

Source Code Management

https://github.com/NetCrusherOrg/netcrusher-java

Download netcrusher-core

How to add to project

<!-- https://jarcasting.com/artifacts/com.github.netcrusherorg/netcrusher-core/ -->
<dependency>
    <groupId>com.github.netcrusherorg</groupId>
    <artifactId>netcrusher-core</artifactId>
    <version>0.10</version>
</dependency>
// https://jarcasting.com/artifacts/com.github.netcrusherorg/netcrusher-core/
implementation 'com.github.netcrusherorg:netcrusher-core:0.10'
// https://jarcasting.com/artifacts/com.github.netcrusherorg/netcrusher-core/
implementation ("com.github.netcrusherorg:netcrusher-core:0.10")
'com.github.netcrusherorg:netcrusher-core:jar:0.10'
<dependency org="com.github.netcrusherorg" name="netcrusher-core" rev="0.10">
  <artifact name="netcrusher-core" type="jar" />
</dependency>
@Grapes(
@Grab(group='com.github.netcrusherorg', module='netcrusher-core', version='0.10')
)
libraryDependencies += "com.github.netcrusherorg" % "netcrusher-core" % "0.10"
[com.github.netcrusherorg/netcrusher-core "0.10"]

Dependencies

compile (1)

Group / Artifact Type Version
org.slf4j : slf4j-api jar 1.6.6

test (3)

Group / Artifact Type Version
ch.qos.logback : logback-classic jar 1.1.3
org.fusesource.jansi : jansi jar 1.14
junit : junit jar 4.12

Project Modules

There are no modules declared in this project.

NetCrusher for Java

NetCrusher is TCP/UDP proxy framework for Java and a command line tool that could be placed in the middle between any client and server and allows to check both sides for failover.

  • emulates network failures
  • emulates frozen connection
  • supports both TCP and UDP
  • supports multiple dynamic connections through the same proxy tunnel
  • allows to check the state of connections
  • allows to filter/dump data
  • supports throttling (delay and/or throughput control)
  • garbage-less buffering
  • high performance (16.6 Gbits on loopback interface of my laptop)
  • supports IP4/IP6

NetCrusher is build on top of Java 8 NIO and has no external dependencies except SLF4J.

Read documentation.

Download latest dist.tar.gz to get the command line tool.

TCP

NioReactor reactor = new NioReactor();

TcpCrusher crusher = TcpCrusherBuilder.builder()
    .withReactor(reactor)
    .withBindAddress("localhost", 10080)
    .withConnectAddress("google.com", 80)
    .buildAndOpen();

// ... some actions

// emulate reconnect
crusher.reopen();

// ... check the client connection is reestablished successfully

// closing
crusher.close();
reactor.close();

UDP

NioReactor reactor = new NioReactor();

DatagramCrusher crusher = DatagramCrusherBuilder.builder()
    .withReactor(reactor)
    .withBindAddress("localhost", 10188)
    .withConnectAddress("time-nw.nist.gov", 37)
    .buildAndOpen();

// ... some actions

// check data is sent
Assert.assertTrue(crusher.getInner().getReadDatagramMeter().getTotal() > 0);

// closing
crusher.close();
reactor.close();

Additional samples

Checks additional samples in the project root folder:

Command line

For manual QA the command-line wrapper is available both for TCP and Datagram mode

$ ./run-tcp-crusher.sh 127.0.0.1:12345 google.com:80
# Version: 0.8
# Print `HELP` for the list of the commands
# enter the command in the next line
CLOSE
[20:19:20.586] INFO  TcpCrusher </127.0.0.1:12345>-<google.com/64.233.161.101:80> is closed
[20:19:20.586] INFO  Crusher is closed
# enter the command in the next line
OPEN
[20:19:21.655] INFO  TcpCrusher </127.0.0.1:12345>-<google.com/64.233.161.101:80> is open
[20:19:21.655] INFO  Crusher is open

More about the command line mode in wiki.

Maven

<dependency>
    <groupId>com.github.netcrusherorg</groupId>
    <artifactId>netcrusher-core</artifactId>
    <version>0.10</version>
</dependency>

Performance

See wiki page

License

Apache License Version 2.0, http://www.apache.org/licenses/LICENSE-2.0.html

Links to the similar projects

  • Jepsen - Distributed Systems Safety Analysis
  • Java-NIO-TCP-Proxy - Simple TCP proxy
  • netem - Linux kernel module allows to distort network facilities
  • socat - bridges everything with everything
com.github.netcrusherorg

NetCrusher team

Versions

Version
0.10
0.9
0.8
0.7
0.6
0.5
0.4