Grant Limberg 4 лет назад
Родитель
Сommit
ace03d7c7b
1 измененных файлов с 75 добавлено и 3 удалено
  1. 75 3
      one.cpp

+ 75 - 3
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);