C++ 中的 RAW 套接字 Windows
RAW Sockets in C++ Windows
我想在 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;
}
}
这是我接收数据包的代码
在 Windows 中,最接近的等价物是 SOCK_RAW,您将不得不使用一种技术使您的代码跨平台兼容。
例如,使用宏并将基本通用虚拟 class 扩展为 windows 派生 class 和 linux 派生 class,使用 [= Windows 的 11=] 和 Linux 的 POSIX 库。
这里是关于如何使用 raw sockets with Winsock 的指南。
这是 how to identify platform with macros.
上的一个答案
我想在 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;
}
}
这是我接收数据包的代码
在 Windows 中,最接近的等价物是 SOCK_RAW,您将不得不使用一种技术使您的代码跨平台兼容。
例如,使用宏并将基本通用虚拟 class 扩展为 windows 派生 class 和 linux 派生 class,使用 [= Windows 的 11=] 和 Linux 的 POSIX 库。
这里是关于如何使用 raw sockets with Winsock 的指南。 这是 how to identify platform with macros.
上的一个答案