aboutsummaryrefslogtreecommitdiff
path: root/works/life/main.cpp
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2021-05-27 15:13:46 +0800
committercrupest <crupest@outlook.com>2021-05-27 15:13:46 +0800
commita1192a14c6a52e8ab77e1c84e38b65aa5e250bec (patch)
tree50d2653f664a6aaf5593da6837b78294dc9715f5 /works/life/main.cpp
parent6c0e4b64fa9967b2a2ef7dfb840cab3a8325f67e (diff)
downloadcrupest-a1192a14c6a52e8ab77e1c84e38b65aa5e250bec.tar.gz
crupest-a1192a14c6a52e8ab77e1c84e38b65aa5e250bec.tar.bz2
crupest-a1192a14c6a52e8ab77e1c84e38b65aa5e250bec.zip
import(life): Add computer network experiment.
Diffstat (limited to 'works/life/main.cpp')
-rw-r--r--works/life/main.cpp36
1 files changed, 36 insertions, 0 deletions
diff --git a/works/life/main.cpp b/works/life/main.cpp
new file mode 100644
index 0000000..efb5bff
--- /dev/null
+++ b/works/life/main.cpp
@@ -0,0 +1,36 @@
+#include <WinSock2.h>
+#include <Windows.h>
+#include <cassert>
+#include <iostream>
+#include <iphlpapi.h>
+#include <string>
+
+std::wstring ToString(const SOCKET_ADDRESS &addr) {
+ DWORD buffer_length = 100;
+ wchar_t buffer[100];
+ auto error = WSAAddressToStringW(addr.lpSockaddr, addr.iSockaddrLength, NULL,
+ buffer, &buffer_length);
+ assert(error == 0);
+ return std::wstring(buffer);
+}
+
+int main() {
+ WSADATA wsaData;
+ int error = WSAStartup(MAKEWORD(2, 0), &wsaData);
+ assert(error == 0);
+
+ ULONG buffer_size = 100000;
+ PIP_ADAPTER_ADDRESSES_LH buffer =
+ (PIP_ADAPTER_ADDRESSES_LH)malloc(buffer_size);
+ ULONG error2 = GetAdaptersAddresses(
+ AF_INET,
+ GAA_FLAG_INCLUDE_PREFIX | GAA_FLAG_INCLUDE_GATEWAYS |
+ GAA_FLAG_INCLUDE_ALL_INTERFACES | GAA_FLAG_SKIP_MULTICAST,
+ NULL, buffer, &buffer_size);
+ assert(error2 == ERROR_SUCCESS);
+
+ std::wcout << ToString(buffer->FirstPrefix->Address) << L"\n";
+ std::wcout << buffer->FirstGatewayAddress << L"\n";
+
+ return 0;
+}