创建一个接收混杂数据包的套接字

问题描述

我的驱动程序已经处于混杂模式,我什至可以在驱动程序内记录混杂数据包,其中目标MAC和IP不是我的机器MAC和IP。我被卡住的地方是创建一个套接字来从多路复用器层提取数据包。我正在使用vxworks,因此我没有linux的一些定义,例如ETH_P_ALL等。我忙于我的套接字创建,无论源是什么,我都可以在应用程序层接收任何发往我机器的数据包。但是,即使我的驱动程序收到,该应用程序也不会收到混杂的数据包。套接字是将多路复用器连接到我的应用程序以接收这些混杂数据包的唯一方法吗?如果是这样,谁能阐明我的套接字为什么不提取不用于我的MAC / IP的数据包?预先谢谢你。

我曾尝试使用SOCK_RAW,IPPROTO_UDP,IPPROTO_RAW等,但也许我只是没有正确的组合。

    std::string newIP = "0.0.0.0";
    descriptor = socket(AF_INET,SOCK_DGRAM,0);
    if(descriptor == -1)
    {
        reportError(errno,"Couldn't open socket",__PRETTY_FUNCTION__);
        return;
    }

    remoteAddress = makeSockaddr(remotePort);

    if(inet_aton(const_cast<char *>(newIP.c_str()),&remoteAddress.sin_addr) == -1)
    {
        reportError(errno,"Failed to translate address",__PRETTY_FUNCTION__);
        return;
    }
    other = remoteAddress;

    sockaddr_in localAddr = makeSockaddr(localPort);
    if(inet_aton(const_cast<char *>(newIP.c_str()),&localAddr.sin_addr) == -1)
    {
        reportError(errno,__PRETTY_FUNCTION__);
        return;
    }

    if(bind(descriptor,(sockaddr *)&localAddr,sizeof(localAddr)) == -1)
    {
        reportError(errno,"Failed to bind socket",__PRETTY_FUNCTION__);
        return;
    }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...