Пример #1
1
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;
}
Пример #2
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;
}
Пример #3
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;
	}
}