局域网有电脑在强行推送组播视频报文,也就是说我的电脑直接用抓包软件在网卡抓包就能抓到一大堆组播报文。现在我需要在不发送组播加入报文的前提下,如何用socket接收组播报文。
我曾经尝试用原始套接字的方法来接收,但是失败了,一个组播报文都收不到,
但是一旦我发送了加入报文就可以接收得到了。按照如下方式是抓不到组播报文的,请高手不吝赐教:
int sockRaw = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
setsockopt(sock, IPPROTO_IP, IP_HDRINCL, (char*)&flag, sizeof(flag);        
bind(sockRaw, (PSOCKADDR)&addrLocal, sizeof(addrLocal); 
ioctlsocket(sockRaw, SIO_RCVALL, &dwValue);

解决方案 »

  1.   

    实际上我是需要实现IGMP V3的组播。
    也就是说我的加入报文是IGMP V3的,上层路由器能识别,并且能将组播流传下来。
    但是我电脑的操作系统一般是WIN2000、WIN98,他们是不识别IGMP V3加入报文的,也就是说电脑认为我没有发送加入报文,所以不接收组播报文。
    于是就出现了上面需要解决的问题。
      

  2.   

    是,的确可以通过wipcap来抓报文,那样我就和抓包软件差不多。但是我更希望能通过soket编程方式实现。
      

  3.   

    Winpcap有个例子可以到他们网站去下来看看!
      

  4.   

    听说有种 RAW SOCKET
    或许可以,但我没用过.
      

  5.   

    谢谢楼上回复,在最顶上的代码“int sockRaw = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);”就是用的RAW SOCKET,可是还是抓不到