Sample Code Snippets
Get Local IP Address (C++)
#include <winsock2.h> #include <ws2tcpip.h> #include <iostream> #pragma comment(lib, "Ws2_32.lib") int main() { WSADATA wsaData; WSAStartup(MAKEWORD(2,2), &wsaData); char hostname[256]; gethostname(hostname, sizeof(hostname)); addrinfo hints = {}, *res; hints.ai_family = AF_UNSPEC; getaddrinfo(hostname, nullptr, &hints, &res); for (addrinfo* ptr = res; ptr != nullptr; ptr = ptr->ai_next) { char ipstr[INET6_ADDRSTRLEN]; void* addr; if (ptr->ai_family == AF_INET) { // IPv4 sockaddr_in* ipv4 = (sockaddr_in*)ptr->ai_addr; addr = &(ipv4->sin_addr); } else { // IPv6 sockaddr_in6* ipv6 = (sockaddr_in6*)ptr->ai_addr; addr = &(ipv6->sin6_addr); } inet_ntop(ptr->ai_family, addr, ipstr, sizeof ipstr); std::cout << "IP: " << ipstr << std::endl; } freeaddrinfo(res); WSACleanup(); return 0; }
Create a TCP Server (C++)
#include <winsock2.h> #include <ws2tcpip.h> #include <iostream> #pragma comment(lib, "Ws2_32.lib") int main() { WSADATA wsa; WSAStartup(MAKEWORD(2,2), &wsa); SOCKET listenSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); sockaddr_in service{}; service.sin_family = AF_INET; service.sin_addr.s_addr = INADDR_ANY; service.sin_port = htons(5150); bind(listenSock, (SOCKADDR*)&service, sizeof(service)); listen(listenSock, 5); std::cout << "Server listening on port 5150..." << std::endl; SOCKET client = accept(listenSock, nullptr, nullptr); const char* msg = "Hello from Windows Server!\r\n"; send(client, msg, (int)strlen(msg), 0); closesocket(client); closesocket(listenSock); WSACleanup(); return 0; }
Ping Host (PowerShell)
# PowerShell script to ping a host repeatedly param( [string]$Host = "8.8.8.8", [int]$Count = 4 ) for ($i=1; $i -le $Count; $i++) { $reply = Test-Connection -ComputerName $Host -Count 1 -Quiet if ($reply) { Write-Host ("Reply from {0}: time={1}ms" -f $Host, (Measure-Command { Test-Connection -ComputerName $Host -Count 1 }).TotalMilliseconds) } else { Write-Host "Request timed out." } Start-Sleep -Seconds 1 }
Asynchronous Winsock I/O (C++)
#include <winsock2.h> #include <ws2tcpip.h> #include <mswsock.h> #include <iostream> #pragma comment(lib, "Ws2_32.lib") void CALLBACK CompletionRoutine(DWORD dwError, DWORD cbTransferred, LPWSAOVERLAPPED lpOverlapped, DWORD dwFlags) { std::cout << "Async send completed, bytes sent: " << cbTransferred << std::endl; // Cleanup delete lpOverlapped; } int main() { WSADATA wsa; WSAStartup(MAKEWORD(2,2), &wsa); SOCKET s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); sockaddr_in server{}; server.sin_family = AF_INET; server.sin_port = htons(5150); inet_pton(AF_INET, "127.0.0.1", &server.sin_addr); connect(s, (SOCKADDR*)&server, sizeof(server)); const char* msg = "Async hello"; WSABUF buf{}; buf.buf = const_cast(msg); buf.len = (ULONG)strlen(msg); WSAOVERLAPPED* overlapped = new WSAOVERLAPPED{}; WSASend(s, &buf, 1, nullptr, 0, overlapped, CompletionRoutine); std::cout << "Waiting for async send..." << std::endl; SleepEx(INFINITE, TRUE); // Wait for I/O completion closesocket(s); WSACleanup(); return 0; }
Enumerate Network Interfaces (C#)
using System; using System.Net.NetworkInformation; class Program { static void Main() { foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces()) { Console.WriteLine($"\nName: {ni.Name}"); Console.WriteLine($"Description: {ni.Description}"); Console.WriteLine($"Status: {ni.OperationalStatus}"); Console.WriteLine($"MAC: {ni.GetPhysicalAddress()}"); foreach (UnicastIPAddressInformation ip in ni.GetIPProperties().UnicastAddresses) { Console.WriteLine($"IP: {ip.Address}"); } } } }