拜托各位了

解决方案 »

  1.   

    windows下设混杂模式很麻烦。有个叫winpcap的东西,抓包的,带源代码,也可以直接用。
      

  2.   

    设置SOCK_RAW为SIO_RCVALL以便接收所有的IP包。
      

  3.   

    //建立一个套接字
    if (INVALID_SOCKET == (m_Sock= socket(AF_INET, SOCK_RAW, IPPROTO_RAW)))
    return FALSE;
    //设置 IP 头操作选项
    BOOL flag= TRUE;
    if (SOCKET_ERROR == (setsockopt(m_Sock, IPPROTO_IP, IP_HDRINCL, (char*)&flag, sizeof(flag))))
    return FALSE;  //获取本机名
    char    LocalName[256];
        struct  hostent *pHost;
        if (gethostname((char*)LocalName, sizeof(LocalName)-1) == SOCKET_ERROR)
            return FALSE;    //获取本地 IP 地址
        if ((pHost = gethostbyname((char*)LocalName)) == NULL)
            return FALSE; SOCKADDR_IN addrLocal;
        addrLocal.sin_addr    = *(in_addr *)pHost->h_addr_list[0]; //IP
        addrLocal.sin_family  = AF_INET;
        addrLocal.sin_port    = htons(DEF_PORT);
    //把 sockRaw 绑定到本地网卡上

        if (SOCKET_ERROR ==bind(m_Sock, (PSOCKADDR)&addrLocal, sizeof(addrLocal)))
    return FALSE; 
    为什么一到bind的时候就绑定失败,而且WSAGetLastError为0?