diff options
| author | Grant Limberg <[email protected]> | 2020-09-14 15:17:59 -0700 |
|---|---|---|
| committer | Grant Limberg <[email protected]> | 2020-09-14 15:17:59 -0700 |
| commit | ace03d7c7bfeb5b00ef10ec5fdfc16f9bf3f04b6 (patch) | |
| tree | 1d3ec3732f394032e9942157cb45908bc8c184f4 /one.cpp | |
| parent | 059dfee0c325c375d5748618d8e2bc5ad6b0ce8a (diff) | |
zerotier-cli dump for Windows
Diffstat (limited to 'one.cpp')
| -rw-r--r-- | one.cpp | 78 |
1 files changed, 75 insertions, 3 deletions
@@ -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); |
