INDOLE is a data transfer tool focus on privacy protection on Internet
THE PRINCIPLE of INDOLE is:
an open framework for data transfer with fully customized protocol by end user.
golang is a temporary decision. Welcome new impls especially
rust
,scheme
,java
,c++
env GOPATH=$(pwd) go build indole
For windows (powershell
) users:
$env:GOPATH = (gi .)
go build indole
run indole
and input the configuration (xml
format) via stdin
./indole < cfg/config.xml
For windows (powershell
) users:
cat cfg\config.xml | .\indole.exe
The following tools are recommended for deploy
start INDOLE
./indole
Then input the xml configuration.
The following of this section will show how the configuration works
The root node of INDOLE config is indole
.
<indole>
</indole>
The child nodes of indole
node should be a manager config. Managers manage the plugins, and organize them to work properly.
TCPAES manager create a tcp tunnel for data transfer.
The attributes of tcpaes
node are:
network
: The network to listen. Known networks are "tcp", "tcp4" (IPv4-only), "tcp6" (IPv6-only), "udp", "udp4" (IPv4-only), "udp6" (IPv6-only), "ip", "ip4" (IPv4-only), "ip6" (IPv6-only), "unix", "unixgram" and "unixpacket". But onlytcp*
network works because this manager works on tcp.address
: The address to listen.bufsize
: The read/write bufsize for core using. If it is too small, the performance would be bad. If it is too large, the memory would be uesd a lot, even crash. It is depend on your QPS and system memory.
The child notes of tcpaes
are:
- one
encode
node with some of the following child nodesaesenc
: aes encrypt with the following attrbutesqueue_size
: the buf queue sizehex_key
: the aes key hex encoded
aesdec
: aes decrypt with the following attrbutesqueue_size
: the buf queue sizehex_key
: the aes key hex encodedbuf_size
: the buf_size, it is recommend a little larger than thebufsize
oftcpaes
depended on the encode method you use.
plain
: only copy no encrypt or decrypt
- one
decode
node with child notes same asencode
node - one
tcp
node with the following attributesnetwork
: the network to redirectaddress
: the address to redirect
<indole>
<tcpaes network="tcp" address="0.0.0.0:3023" bufsize="2048">
<encode>
<aesenc queue_size="1024" hex_key="ffffffffffffffffffffffffffffffff"/>
</encode>
<decode>
<aesdec queue_size="1024" hex_key="ffffffffffffffffffffffffffffffff" buf_size="4096"/>
</decode>
<tcp network="tcp" address="localhost:8118"/>
</tcpaes>
</indole>
Here is an example for server and client data transfer.
Note that the bufsize
and buf_size
should be optimized
<indole>
<tcpaes network="tcp" address="0.0.0.0:<PORT>" bufsize="1024">
<encode>
<aesdec queue_size="1024" hex_key="<YOUR AES KEY>" buf_size="65536"/>
</encode>
<decode>
<aesenc queue_size="1024" hex_key="<YOUR AES KEY>"/>
</decode>
<tcp network="tcp" address="<YOUR LOCAL ADDRESS AND PORT ON SERVER>"/>
</tcpaes>
</indole>
<indole>
<tcpaes network="tcp" address="<YOUR LOCAL ADDRESS AND PORT>" bufsize="1024">
<encode>
<aesenc queue_size="1024" hex_key="<YOUR AES KEY>"/>
</encode>
<decode>
<aesdec queue_size="1024" hex_key="<YOUR AES KEY>" buf_size="65536"/>
</decode>
<tcp network="tcp" address="<THE SERVER ADDRESS AND PORT>"/>
</tcpaes>
</indole>