You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
Joseph Henry 006cc87ca6 Updated README 8 years ago
attic Removed cruft from project 8 years ago
examples Removed reference to DEBUG_* macros in examples and libzt proper 8 years ago
ext Submodule patches now called from Makefile (e.g. make patch) 8 years ago
include Removed reference to DEBUG_* macros in examples and libzt proper 8 years ago
packages Turned off stack debugs 8 years ago
src Removed reference to DEBUG_* macros in examples and libzt proper 8 years ago
test Updated lwip.patch for Linux compatibility, CMakeLists.txt, and fixed other minor compile-time warnings 8 years ago
.gitignore Added gradle files for Android project 8 years ago
.gitmodules Added lwip, lwip-contrib, ZeroTierOne submodules to ext 8 years ago
CMakeLists.txt Added patch for lwip-contrib for Windows compatibility 8 years ago
Jenkinsfile Updated Jenkinsfile for cmake usage 8 years ago
LICENSE.GPL-3 Added license files for libzt and lwip 9 years ago
Makefile Submodule patches now called from Makefile (e.g. make patch) 8 years ago
README.md Updated README 8 years ago

README.md

libzt

Embed ZeroTier directly into your app


A library version of ZeroTier, libzt makes it easy to securely connect devices, servers, cloud VMs, containers, and apps everywhere and manage them at scale. Now you can bake this ability directly into your app or service using your preferred language. We provide a POSIX-like socket API supporting SOCK_STREAM, SOCK_DGRAM, and SOCK_RAW to make the integration simple. 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


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=Debug
cmake --build build 

Builds are placed in bin\lib. Change CMAKE_BUILD_TYPE to Release for a smaller and optimized build.


Commercial License

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