summaryrefslogtreecommitdiff
path: root/one.cpp
diff options
context:
space:
mode:
authorGrant Limberg <[email protected]>2020-09-14 15:17:59 -0700
committerGrant Limberg <[email protected]>2020-09-14 15:17:59 -0700
commitace03d7c7bfeb5b00ef10ec5fdfc16f9bf3f04b6 (patch)
tree1d3ec3732f394032e9942157cb45908bc8c184f4 /one.cpp
parent059dfee0c325c375d5748618d8e2bc5ad6b0ce8a (diff)
zerotier-cli dump for Windows
Diffstat (limited to 'one.cpp')
-rw-r--r--one.cpp78
1 files changed, 75 insertions, 3 deletions
diff --git a/one.cpp b/one.cpp
index 6ce37f9a..f582f94f 100644
--- a/one.cpp
+++ b/one.cpp
@@ -28,6 +28,8 @@
#include <lmcons.h>
#include <newdev.h>
#include <atlbase.h>
+#include <iphlpapi.h>
+#include <iomanip>
#include "osdep/WindowsEthernetTap.hpp"
#include "windows/ZeroTierOne/ServiceInstaller.h"
#include "windows/ZeroTierOne/ServiceBase.h"
@@ -924,8 +926,14 @@ static int cli(int argc,char **argv)
responseBody = "";
dump << ZT_EOL_S << "local.conf" << ZT_EOL_S << "----------" << ZT_EOL_S;
- // TODO: Dump local.conf
- dump << "TODO" << ZT_EOL_S;
+ std::string localConf;
+ OSUtils::readFile((homeDir + ZT_PATH_SEPARATOR_S + "local.conf").c_str(), localConf);
+ if (localConf.empty()) {
+ dump << "None Present" << ZT_EOL_S;
+ }
+ else {
+ dump << localConf << ZT_EOL_S;
+ }
dump << ZT_EOL_S << "Network Interfaces" << ZT_EOL_S << "------------------" << ZT_EOL_S << ZT_EOL_S;
#ifdef __APPLE__
@@ -972,9 +980,73 @@ static int cli(int argc,char **argv)
dump << ZT_EOL_S;
}
+#elif defined(_WIN32)
+ ULONG buffLen = 16384;
+ PIP_ADAPTER_ADDRESSES addresses;
+
+ ULONG ret = 0;
+ do {
+ addresses = (PIP_ADAPTER_ADDRESSES)malloc(buffLen);
+
+ ret = GetAdaptersAddresses(AF_UNSPEC, 0, NULL, addresses, &buffLen);
+ if (ret == ERROR_BUFFER_OVERFLOW) {
+ free(addresses);
+ addresses = NULL;
+ }
+ else {
+ break;
+ }
+ } while (ret == ERROR_BUFFER_OVERFLOW);
+
+ int i = 0;
+ if (ret == NO_ERROR) {
+ PIP_ADAPTER_ADDRESSES curAddr = addresses;
+ while (curAddr) {
+ dump << "Interface " << i << ZT_EOL_S << "-----------" << ZT_EOL_S;
+ dump << "Name: " << curAddr->AdapterName << ZT_EOL_S;
+ dump << "MTU: " << curAddr->Mtu << ZT_EOL_S;
+ dump << "MAC: ";
+ char macBuffer[64] = {};
+ sprintf(macBuffer, "%02x:%02x:%02x:%02x:%02x:%02x",
+ curAddr->PhysicalAddress[0],
+ curAddr->PhysicalAddress[1],
+ curAddr->PhysicalAddress[2],
+ curAddr->PhysicalAddress[3],
+ curAddr->PhysicalAddress[4],
+ curAddr->PhysicalAddress[5]);
+ dump << macBuffer << ZT_EOL_S;
+ dump << "Type: " << curAddr->IfType << ZT_EOL_S;
+ dump << "Addresses:" << ZT_EOL_S;
+ PIP_ADAPTER_UNICAST_ADDRESS pUnicast = NULL;
+ pUnicast = curAddr->FirstUnicastAddress;
+ if (pUnicast) {
+ for (int j = 0; pUnicast != NULL; ++j) {
+ char buf[128] = {};
+ DWORD bufLen = 128;
+ LPSOCKADDR a = pUnicast->Address.lpSockaddr;
+ WSAAddressToStringA(
+ pUnicast->Address.lpSockaddr,
+ pUnicast->Address.iSockaddrLength,
+ NULL,
+ buf,
+ &bufLen
+ );
+ dump << buf << ZT_EOL_S;
+ pUnicast = pUnicast->Next;
+ }
+ }
+
+ curAddr = curAddr->Next;
+ ++i;
+ }
+ }
+ if (addresses) {
+ free(addresses);
+ addresses = NULL;
+ }
#endif
- fprintf(stderr, "%s", dump.str().c_str());
+ fprintf(stderr, "%s\n", dump.str().c_str());
} else {
cliPrintHelp(argv[0],stderr);