如果是多网卡的电脑,怎么获得正在使用的那个网卡的MAC地址是???请大虾指点啊~~~~

解决方案 »

  1.   

    http://topic.csdn.net/t/20031009/14/2336961.html
      

  2.   

    #include "winsock.h" 
    #include <stdio.h>
    #include <iphlpapi.h>
    #pragma comment(lib,"iphlpapi.lib")
    void main()
    {
        IP_ADAPTER_INFO Interface[20];
        PIP_ADAPTER_INFO NetInterface = NULL;
        DWORD Result = 0;
        unsigned long Length = sizeof(Interface);
        Result = GetAdaptersInfo(Interface, &Length);
        if (Result != NO_ERROR)
        {
            printf("GetAdaptersInfo failed error.\n");
        }
        else
        {
            NetInterface = Interface;
            while (NetInterface)
            {
                static int number;
                number++;
                printf("第%d个网络接口信息:\n", number);
                printf("名称:%s\n", NetInterface->AdapterName);
                printf("信息:%s\n", NetInterface->Description);
                printf("地址:%ld\n", NetInterface->Address);
                printf("MAC地址:%02X:%02X:%02X:%02X:%02X:%02X\n", NetInterface->Address[0], NetInterface->Address[1], NetInterface->Address[2], NetInterface->Address[3], NetInterface->Address[4], NetInterface->Address[5]);
                printf("IP地址:%s\n", NetInterface->IpAddressList.IpAddress.String);
                printf("IP地址掩码:%s\n", NetInterface->IpAddressList.IpMask.String);
                printf("网关:%s\n", NetInterface->GatewayList.IpAddress.String);
                if (NetInterface->DhcpEnabled)
                {
                    printf("DHCP配置:\n");
                    printf("服务器:%s\n", NetInterface->DhcpServer.IpAddress.String);
                    printf("租用:%ld\n", NetInterface->LeaseObtained);
                }
                else
                    printf("无DHCP配置\n");
                if (NetInterface->HaveWins)
                {
                    printf("Wins配置:\n");
                    printf("主Wins服务器:%s\n", NetInterface->PrimaryWinsServer.IpAddress.String);
                    printf("次Wins服务器:%s\n", NetInterface->SecondaryWinsServer.IpAddress.String);
                }
                else
                    printf("无服务器配置\n");
                NetInterface = NetInterface->Next;
            }
        }
    }
      

  3.   

    再来一个:
    #include <winsock2.h>
    #include <ws2tcpip.h> 
    #include <stdio.h>
    #pragma comment(lib,"Ws2_32.lib")
    int main()
    {
        WSADATA wsaData;
        SOCKET sock;
        INTERFACE_INFO netinterface[10];
        DWORD dwBytesReturned;
        int InterfaceCount;
        int Result;
        Result = WSAStartup(MAKEWORD(2, 1), &wsaData);
        if (Result == SOCKET_ERROR)
        {
            printf("WSAStartup failed with error %d\n", Result);
            return 1;
        }
        //sock = WSASocket(AF_INET, SOCK_DGRAM, 0, 0, 0, 0);
    sock = socket(AF_INET, SOCK_DGRAM,  0);
        if (sock == INVALID_SOCKET)
        {
            printf("WSASocket failed with error %d\n\n", WSAGetLastError());
            return 1;
        }
        Result = WSAIoctl(sock, SIO_GET_INTERFACE_LIST, 0, 0, &netinterface, sizeof(netinterface), &dwBytesReturned, 0, 0);
        if (Result == SOCKET_ERROR)
        {
            printf("WSAIoctl failed with error %d \n", WSAGetLastError());
            return 1;
        }
        InterfaceCount = dwBytesReturned / sizeof(INTERFACE_INFO);
        printf("网络接口个数:%d\n", InterfaceCount);
        for (int i = 0; i < InterfaceCount; i++)
        {
            printf("\n第%d个网络接口:\n", i + 1);
            printf("IP地址为:%s\n", inet_ntoa(netinterface[i].iiAddress.AddressIn .sin_addr));
            printf("广播地址为:%s\n", inet_ntoa(netinterface[i].iiBroadcastAddress .AddressIn .sin_addr));
            printf("子网掩码为:%s\n", inet_ntoa(netinterface[i].iiNetmask .AddressIn .sin_addr));
            if (netinterface[i].iiFlags &IFF_POINTTOPOINT)
                printf("Point to Point网络接口\n");
            if (netinterface[i].iiFlags &IFF_LOOPBACK)
                printf("回环接口\n");
            if (netinterface[i].iiFlags &IFF_BROADCAST)
                printf("支持广播\n");
            if (netinterface[i].iiFlags &IFF_MULTICAST)
                printf("支持多播\n");
            if (netinterface[i].iiFlags &IFF_UP)
                printf("接口状态:UP\n");
            else
                printf("接口状态:DOWN\n");
        }
        if (WSACleanup() == SOCKET_ERROR)
        {
            printf("WSACleanup failed with error %d\n", WSAGetLastError());
            return 1;
        }
        return 0;
    }
      

  4.   

    继续:
    #include "winsock.h" 
    #include <stdio.h>
    #pragma comment(lib,"Ws2_32.lib")
    void main()
    {
        WSADATA wsaData;
        char HostName[255];
        HOSTENT *Hostent;
        int Result;
        Result = WSAStartup(MAKEWORD(2, 1), &wsaData);
        if (Result == SOCKET_ERROR)
        {
            printf("WSAStartup failed with error %d\n", Result);
            return ;
        }
        Result = gethostname(HostName, 255);
        printf("主机名称为:%s\n", HostName);
        if (Result == SOCKET_ERROR)
        {
            printf("gethostname failed with error %d\n", WSAGetLastError());
            return ;
        }
        Hostent = (struct hostent*)malloc(sizeof(struct hostent));
        Hostent = gethostbyname(HostName);    for (int i = 0;; i++)
        {
            if(!Hostent->h_addr_list[i])//rendb add
    break;
    printf("第%d个网络接口:\n", i + 1);
            printf("IP地址:%s\n", inet_ntoa(*(IN_ADDR*)(Hostent->h_addr_list[i])));
            /*if (Hostent->h_addr_list[i] + Hostent->h_length >= Hostent->h_name)
            {
                break;
            } */ //very bad!!! confused and error oriented
        }
        //WSASocket
    i=0;//rendb add
    char **ptr=Hostent->h_addr_list;
    for(; ptr[i];i++)
    {
    printf("\n\n 2第%d个网络接口:\n", i );
    printf("IP地址:%s\n", inet_ntoa(*(IN_ADDR*)ptr[i]));
    }
        if (WSACleanup() == SOCKET_ERROR)
        {
            printf("WSACleanup failed with error %d\n", WSAGetLastError());
            return ;
        }
    }
      

  5.   

    额、、囧。。看错了,是MAC地址、、
      

  6.   

    在CMD下
    nbtstat -an  对方IP   可获取对方机子的登录名和MAC地址在MFC需要下转化一下
      

  7.   

    所谓“正在使用”是对于某个特定目的主机而言的。比如两个网卡连接两个局域网。
    用tracert命令可以知道对方数据从哪个网段来,间接判断。
    如果两个网卡在一个局域网...谁知道哪块“正在使用”...