C ++ Windows中的RAW套接字

时间:2018-06-23 08:52:41

标签: c++ sockets udp packets

我想在Visual C ++中使用RAW Socket

我在Linux上看到了一个函数,

int out = socket(AF_INET, SOCK_RAW, htons(ETH_P_ALL));

我们可以在linux中使用此代码,但是如何在Windows平台上使用RAW SOCKET,因为在Visual C ++中使用此代码时出现错误。

谢谢。

编辑

int out1 = socket(AF_INET, SOCK_RAW, IPPROTO_SCTP);
for (; ;)
{
    int bytesIn = recvfrom(out1, buf, 2000, 0, (sockaddr*)&server, &serverLength);
    if (bytesIn == SOCKET_ERROR)
    {
        cout << "Error Receving from Server" << WSAGetLastError() << endl;
    }
    else
    {
        cout << "MESSAGE RECV from Server " << " : " << bytesIn << endl;
    }
}

这是我接收数据包的代码

1 个答案:

答案 0 :(得分:2)

在Windows中,最接近的等效项是SOCK_RAW,您将必须使用一种技术来使您的代码跨平台兼容。

例如,使用宏并将基本通用虚拟类扩展为Windows派生类和Linux派生类,对于Windows使用WSAPROTOCOL,对于Linux使用POSIX库。

此处是有关如何使用raw sockets with Winsock的指南。 这是how to identify platform with macros的答案。