首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ICMPv6 -无法读取任何路由器通告消息

ICMPv6 -无法读取任何路由器通告消息
EN

Stack Overflow用户
提问于 2011-10-24 18:29:55
回答 1查看 612关注 0票数 1

我正在尝试使用原始套接字和ICMPv6在Windows上读取路由器通告消息。通过Wireshark,我可以看到路由器( Cisco 877)大约每200秒发送一次这些消息,但我的应用程序从未接收到它们。

我的代码执行以下步骤:

1)使用ICMPv6协议创建IPv6原始套接字

2)将套接字绑定到IPv6未指定地址(::)

3)在FF02::1加入链路本地全节点组播组

4)接收路由器通告(...或者不是:)

如果我加入FF02::16...

我尝试过设置其他套接字选项,比如跳数限制、多播跳数,但都无济于事。任何想法都是受欢迎的,因为我不喜欢它们。

代码语言:javascript
复制
#include "stdlib.h"
#include "winsock2.h"
#include "Ws2tcpip.h"

#pragma comment(lib, "ws2_32.lib")

void
main (int argc,char **argv)
{
    WSADATA wsaData;
    SOCKET nSocket;
    struct sockaddr_in6 sockinfo;
    struct ipv6_mreq mreq;
    char strBuffer[1024];
    int nBytes;

    WSAStartup (MAKEWORD (2,2),&wsaData);

    // Create a raw socket talking ICMPv6

    if ((nSocket = socket (AF_INET6,SOCK_RAW,IPPROTO_ICMPV6)) == SOCKET_ERROR)
       return;

    // Bind to ::

    ::memset (&sockinfo,0,sizeof (sockinfo));
    sockinfo.sin6_family = AF_INET6;
    inet_pton (AF_INET6,"::",&sockinfo.sin6_addr);
    if (bind (nSocket,(struct sockaddr *) &sockinfo,sizeof (sockinfo)) < 0)
       return;

    // Join the link-local all nodes multicast group

    inet_pton (AF_INET6,"FF02::1",&mreq.ipv6mr_multiaddr);
    mreq.ipv6mr_interface = 0;
    if (setsockopt (nSocket,IPPROTO_IPV6,IPV6_ADD_MEMBERSHIP,(char *) &mreq,sizeof (mreq)) < 0)
       return;

    // Wait for advertisements

    for (;;)
        nBytes = ::recvfrom (nSocket,strBuffer,sizeof (strBuffer),0,NULL,0);

    closesocket (nSocket);

    WSACleanup ();
}
EN

回答 1

Stack Overflow用户

发布于 2011-10-25 06:30:19

它在FF02::16上工作,因为这是思科用于其广播的。有关更多详细信息,请参阅思科论坛上的此讨论:

IPv6 address FF02::16 Significance

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7874280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档