C++ 创建一个套接字来接收杂乱的数据包

C++ 创建一个套接字来接收杂乱的数据包,c++,network-programming,vxworks,C++,Network Programming,Vxworks,我的驱动程序已经处于混杂模式,我甚至可以在驱动程序中记录混杂数据包,其中目标MAC和IP不是我的机器MAC和IP。我被卡住的地方是创建一个套接字来从mux层拉出数据包。我使用的是vxworks,所以我没有linux中的一些定义,比如ETH_P_ALL等。我在创建套接字的过程中进行了尝试,我可以在应用层中接收到任何发送给我的机器的数据包,无论其来源如何。但是应用程序没有收到杂乱的数据包,即使我的驱动程序收到了。套接字是将mux连接到我的应用程序以接收这些混乱数据包的唯一方法吗?如果是这样的话,有人

我的驱动程序已经处于混杂模式,我甚至可以在驱动程序中记录混杂数据包,其中目标MAC和IP不是我的机器MAC和IP。我被卡住的地方是创建一个套接字来从mux层拉出数据包。我使用的是vxworks,所以我没有linux中的一些定义,比如ETH_P_ALL等。我在创建套接字的过程中进行了尝试,我可以在应用层中接收到任何发送给我的机器的数据包,无论其来源如何。但是应用程序没有收到杂乱的数据包,即使我的驱动程序收到了。套接字是将mux连接到我的应用程序以接收这些混乱数据包的唯一方法吗?如果是这样的话,有人能解释一下为什么我的套接字没有提取不适合我的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, "Failed to translate address", __PRETTY_FUNCTION__);
        return;
    }

    if(bind(descriptor, (sockaddr *)&localAddr, sizeof(localAddr)) == -1)
    {
        reportError(errno, "Failed to bind socket", __PRETTY_FUNCTION__);
        return;
    }
std::string newIP=“0.0.0.0”;
描述符=套接字(AF_INET,SOCK_DGRAM,0);
如果(描述符==-1)
{
reportError(错误号,“无法打开套接字”,函数);
返回;
}
remoteAddress=makeSockaddr(远程端口);
if(inet_aton(const_cast(newIP.c_str()),&remoteAddress.sin_addr)=-1)
{
reportError(错误号,“翻译地址失败”,函数错误);
返回;
}
其他=远程地址;
localAddr中的sockaddr\u=makeSockaddr(localPort);
if(inet_aton(const_cast(newIP.c_str()),&localAddr.sin_addr)=-1)
{
reportError(错误号,“翻译地址失败”,函数错误);
返回;
}
if(bind(descriptor,(sockaddr*)&localAddr,sizeof(localAddr))=-1)
{
reportError(错误号,“绑定套接字失败”,函数);
返回;
}