/libzt

Library version of ZeroTier

Primary LanguageC++GNU General Public License v3.0GPL-3.0

libzt

Library version of ZeroTier


libzt makes it easy to securely connect devices, servers, cloud VMs, containers, and apps everywhere and manage them at scale. We provide a socket-like API supporting SOCK_STREAM, SOCK_DGRAM, and SOCK_RAW. There's no need for system-wide virtual interfaces. This connection is exclusive to your app and fully encrypted via the Salsa20 cipher. For a more in-depth discussion on the technical side of ZeroTier, check out our Manual


irc

Platform Static Shared Package Example project/code Library build instructions
macOS libzt.a libzt.dylib see below
iOS libzt.a zt.framework examples/swift packages/iOS
Windows libzt.lib (x86), libzt.lib (x64) libzt.dll (x86), libzt.dll (x64) examples/cpp/ExampleWindowsCppApp, examples/csharp/ExampleWindowsCSharpApp see below
Android libzt.aar examples/android/ExampleAndroidApp packages/android
Linux see below see below see below

C API: libzt.h Java JNI API: ZeroTier.java


C++ Example

#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>

#include "libzt.h"

int main() 
{
	char *str = "welcome to the machine";
	char *remoteIp = "10.8.8.42";
	int remotePort = 8080;
	int fd, err = 0;
	struct sockaddr_in addr;
	addr.sin_family = AF_INET;
	addr.sin_addr.s_addr = inet_addr(remoteIp);
	addr.sin_port = htons(remotePort);

	zts_startjoin("path", 0xc7cd7c981b0f52a2); // config path, network ID

	if ((fd = zts_socket(AF_INET, SOCK_STREAM, 0)) < 0) {
		printf("error creating socket\n");
	}
	if ((err = zts_connect(fd, (const struct sockaddr *)&addr, sizeof(addr))) < 0) {
		printf("error connecting to remote host\n");
	}
	if ((err = zts_write(fd, str, strlen(str))) < 0) {
		printf("error writing to socket\n");
	}

	zts_close(fd);
	zts_stop();
	return 0;
}

For an example using only the Virtual Layer 2, see examples/layer2


Build

We recommend using CMake and clang.

git submodule init
git submodule update
make patch
cmake -H. -Bbuild -DCMAKE_BUILD_TYPE=Release

or possibly:

cmake -H. -Bbuild --config Release

Then

cmake --build build 

Builds are placed in bin\lib


Commercial License

If you want a commercial license to use libzt in your product contact us directly via contact@zerotier.com