请问windows编程怎么把网卡设置混杂模式???

解决方案 »

  1.   

    ...
    ifr.ifr_flags |= IFF_PROMISC;
    ioctl(sock, SIOCSIFFLAGS, &ifr);
    ...
      

  2.   

    bool SetAdapterReceiveAll()
    {
    WORD ver=MAKEWORD(2,2);
    WSADATA wsaData;
    WSAStartup(ver,&wsaData);
    s=socket(AF_INET,SOCK_RAW,IPPROTO_RAW);
    BOOL bFlag=TRUE;
    int err=setsockopt(s,IPPROTO_IP,IP_HDRINCL,(char *)&bFlag,sizeof(bFlag));
    if(err!=0)
    return false;
    char hostname[256];
    memset(hostname,0,256);
    err=gethostname(hostname,256);
    if(err!=0)
    return false;
    struct hostent * phost=gethostbyname(hostname);
    if(!phost)
    return false;
    struct sockaddr_in addr_in;
    memset(&addr_in,0,sizeof(addr_in));
    addr_in.sin_addr=*(in_addr *)phost->h_addr_list[0];
    addr_in.sin_family = AF_INET;
    addr_in.sin_port = htons(57274);
    bind(s, (PSOCKADDR)&addr_in, sizeof(addr_in));
    DWORD dwValue = 1; 
    ioctlsocket(s, SIO_RCVALL, &dwValue);
    return true;
    }
      

  3.   

    用socket(AF_INET,SOCK_RAW,IPPROTO_RAW);创建一个原始套接字。
    设置好以后,ioctlsocket(socket, SIO_RCVALL, &dwValue);这条语句就可以设置接受所有的数据包.
    你也可以自己编写NDIS。
    当然也可以使用winpcap