int win32_getifentry() { // Declare and initialize variables. // Declare and initialize variables. DWORD dwRetVal = 0; unsigned int i; MIB_IF_TABLE2 *pIfTable; MIB_IF_ROW2 *pIfRow; dwRetVal = GetIfTable2(&pIfTable); if (dwRetVal != NO_ERROR) return 0; if (pIfTable->NumEntries == 0) return 0; printf("\tNum Entries: %ld\n\n", pIfTable->NumEntries); for (i = 0; i < pIfTable->NumEntries; i++) { pIfRow = &pIfTable->Table[i]; //printf("\tIndex:\t %ld\n", pIfRow->InterfaceIndex); printf("[%d]:\t ", pIfRow->InterfaceIndex); printf("%ws", pIfRow->Alias); printf(" \t(%ws)", pIfRow->Description); printf("\n"); #if 0 printf("\tIndex[%d]:\t\t %d\n", i, pIfRow->dwIndex); printf("\tType[%d]:\t\t ", i); switch (pIfRow->dwType) { case IF_TYPE_OTHER: printf("Other\n"); break; case IF_TYPE_ETHERNET_CSMACD: printf("Ethernet\n"); break; case IF_TYPE_ISO88025_TOKENRING: printf("Token Ring\n"); break; case IF_TYPE_PPP: printf("PPP\n"); break; case IF_TYPE_SOFTWARE_LOOPBACK: printf("Software Lookback\n"); break; case IF_TYPE_ATM: printf("ATM\n"); break; case IF_TYPE_IEEE80211: printf("IEEE 802.11 Wireless\n"); break; case IF_TYPE_TUNNEL: printf("Tunnel type encapsulation\n"); break; case IF_TYPE_IEEE1394: printf("IEEE 1394 Firewire\n"); break; default: printf("Unknown type %ld\n", pIfRow->dwType); break; } printf("\tMtu[%d]:\t\t %ld\n", i, pIfRow->dwMtu); printf("\tSpeed[%d]:\t\t %ld\n", i, pIfRow->dwSpeed); printf("\tPhysical Addr:\t\t "); if (pIfRow->dwPhysAddrLen == 0) printf("\n"); // for (j = 0; j < (int) pIfRow->dwPhysAddrLen; j++) { for (j = 0; j < pIfRow->dwPhysAddrLen; j++) { if (j == (pIfRow->dwPhysAddrLen - 1)) printf("%.2X\n", (int) pIfRow->bPhysAddr[j]); else printf("%.2X-", (int) pIfRow->bPhysAddr[j]); } printf("\tAdmin Status[%d]:\t %ld\n", i, pIfRow->dwAdminStatus); printf("\tOper Status[%d]:\t ", i); switch (pIfRow->dwOperStatus) { case IF_OPER_STATUS_NON_OPERATIONAL: printf("Non Operational\n"); break; case IF_OPER_STATUS_UNREACHABLE: printf("Unreasonable\n"); break; case IF_OPER_STATUS_DISCONNECTED: printf("Disconnected\n"); break; case IF_OPER_STATUS_CONNECTING: printf("Connecting\n"); break; case IF_OPER_STATUS_CONNECTED: printf("Connected\n"); break; case IF_OPER_STATUS_OPERATIONAL: printf("Operational\n"); break; default: printf("Unknown status %ld\n", pIfRow->dwAdminStatus); break; } printf("\n"); #endif } return 0; }
/* * Print list of adapters */ int listif(int argc, char *argv[]) { int x; pcap_if_t *alldevs = 0; pcap_if_t *dev; char errbuf[PCAP_ERRBUF_SIZE]; int i = 0; #if defined(WIN32) && defined(_MSC_VER) MIB_IF_TABLE2 *pIfTable = 0; #endif #if defined(WIN32) && defined(_MSC_VER) GetIfTable2(&pIfTable); #endif UNUSEDPARM(argc); UNUSEDPARM(argv); //win32_getifentry(); //win32_list_interfaces(); //win32_list_adapters(); x = pcap.findalldevs(&alldevs, errbuf); if (x == -1) { fprintf(stderr, "pcap: findalldevs failed: %s\n", errbuf); return 0; } for (dev=alldevs; dev; dev = dev->next) { #if defined(WIN32) && defined(_MSC_VER) char namebuf[64]; #endif unsigned index = ++i; const char *name = dev->name; struct pcap_addr *address = (struct pcap_addr*)dev->addresses; #if defined(WIN32) && defined(_MSC_VER) { index = win32_index(pIfTable, name); win32_name(pIfTable, name, namebuf, sizeof(namebuf)); name = namebuf; } #endif printf("%d. \"%s\" (%s)\n", index, name, dev->description); printf(" "); for ( ;address; address = address->next) { switch (address->addr->sa_family) { case AF_INET: { struct sockaddr_in *sin = (struct sockaddr_in*)address->addr; printf("%u.%u.%u.%u ", (sin->sin_addr.s_addr>> 0)&0xFF, (sin->sin_addr.s_addr>> 8)&0xFF, (sin->sin_addr.s_addr>>16)&0xFF, (sin->sin_addr.s_addr>>24)&0xFF ); } break; case AF_INET6: { struct sockaddr_in6 *sin6 = (struct sockaddr_in6*)address->addr; unsigned char *px = (unsigned char*)&sin6->sin6_addr; unsigned j; for (j=0; j<8; j++) { unsigned short x = px[0]<<8 | px[1]; if (j==0 && x == 0xfe80) break; px += 2; printf("%x%s", x, (j==7)?" ":":"); } } break; default: printf("Family: %d ", address->addr->sa_family); } } printf("\n"); } pcap.freealldevs(alldevs); return 0; }
/* ** Reads the tables for all net interfaces ** */ void MeasureNet::UpdateIFTable() { bool logging = false; if (c_Table) { FreeMibTable(c_Table); c_Table = nullptr; } if (GetIfTable2(&c_Table) == NO_ERROR) { if (c_NumOfTables != c_Table->NumEntries) { c_NumOfTables = c_Table->NumEntries; logging = true; } if (GetRainmeter().GetDebug() && logging) { LogDebug(L"------------------------------"); LogDebugF(L"* NETWORK-INTERFACE: Count=%i", c_NumOfTables); for (size_t i = 0; i < c_NumOfTables; ++i) { const WCHAR* type = L"Other"; switch (c_Table->Table[i].Type) { case IF_TYPE_ETHERNET_CSMACD: type = L"Ethernet"; break; case IF_TYPE_PPP: type = L"PPP"; break; case IF_TYPE_SOFTWARE_LOOPBACK: type = L"Loopback"; break; case IF_TYPE_IEEE80211: type = L"IEEE802.11"; break; case IF_TYPE_TUNNEL: type = L"Tunnel"; break; case IF_TYPE_IEEE1394: type = L"IEEE1394"; break; } LogDebugF(L"%i: %s", (int)i + 1, c_Table->Table[i].Description); LogDebugF(L" Alias: %s", c_Table->Table[i].Alias); LogDebugF(L" Type=%s(%i), Hardware=%s, Filter=%s", type, c_Table->Table[i].Type, (c_Table->Table[i].InterfaceAndOperStatusFlags.HardwareInterface == 1) ? L"Yes" : L"No", (c_Table->Table[i].InterfaceAndOperStatusFlags.FilterInterface == 1) ? L"Yes" : L"No"); } LogDebug(L"------------------------------"); } } else { // Something's wrong. Unable to get the table. c_Table = nullptr; c_NumOfTables = 0; } }