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}");
}
}
}
}