1 #include "AdapterInfo.h"
8 #pragma comment(lib, "iphlpapi.lib")
9 #pragma comment(lib, "ws2_32.lib")
11 AdapterInfo::AdapterInfo() {
15 void AdapterInfo::QueryAdapterInfo() {
16 PIP_ADAPTER_INFO pAdapterInfo;
17 PIP_ADAPTER_INFO pAdapter = NULL;
20 ULONG ulOutBufLen =
sizeof(IP_ADAPTER_INFO);
21 pAdapterInfo = (IP_ADAPTER_INFO*)malloc(
sizeof(IP_ADAPTER_INFO));
22 if (pAdapterInfo == NULL) {
23 std::cerr <<
"Error allocating memory needed to call GetAdaptersinfo\n";
28 if (GetAdaptersInfo(pAdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW) {
30 pAdapterInfo = (IP_ADAPTER_INFO*)malloc(ulOutBufLen);
31 if (pAdapterInfo == NULL) {
32 std::cerr <<
"Error allocating memory needed to call GetAdaptersinfo\n";
37 if ((dwRetVal = GetAdaptersInfo(pAdapterInfo, &ulOutBufLen)) == NO_ERROR) {
38 pAdapter = pAdapterInfo;
41 if (pAdapter->GatewayList.IpAddress.String[0] !=
'0') {
42 IPAddress = pAdapter->IpAddressList.IpAddress.String;
43 NetMask = pAdapter->IpAddressList.IpMask.String;
44 GateWay = pAdapter->GatewayList.IpAddress.String;
48 pAdapter = pAdapter->Next;
52 std::cerr <<
"GetAdaptersInfo failed with error: " << dwRetVal <<
"\n";
61 std::string AdapterInfo::longToIp(
unsigned long ip) {
62 return std::to_string((ip >> 24) & 0xFF) +
"." +
63 std::to_string((ip >> 16) & 0xFF) +
"." +
64 std::to_string((ip >> 8) & 0xFF) +
"." +
65 std::to_string(ip & 0xFF);
68 unsigned long AdapterInfo::ipToLong(
const std::string& ip) {
69 unsigned long ipBytes[4] = { 0 };
70 int count = sscanf_s(ip.c_str(),
"%lu.%lu.%lu.%lu", &ipBytes[3], &ipBytes[2], &ipBytes[1], &ipBytes[0]);
72 std::cerr <<
"Error parsing IP address." << std::endl;
75 return (ipBytes[3] << 24) | (ipBytes[2] << 16) | (ipBytes[1] << 8) | ipBytes[0];
78 std::string AdapterInfo::CalculateBroadcastAddress(
const std::string& ip,
const std::string& netmask) {
79 unsigned long ipLong = ipToLong(ip);
80 unsigned long netmaskLong = ipToLong(netmask);
81 unsigned long wildcardMask = ~netmaskLong;
82 unsigned long broadcastAddress = ipLong | wildcardMask;
83 return longToIp(broadcastAddress);
86 std::string AdapterInfo::GetBroadcastAddress() {
87 return CalculateBroadcastAddress(IPAddress, NetMask);
91 std::string AdapterInfo::GetIPAddress() {
95 std::string AdapterInfo::GetNetMask() {
99 std::string AdapterInfo::GetGateWay() {