我目前正在做一个编程任务。任务是实现客户端、网络仿真器和服务器。客户端将数据包传递给网络模拟器,而网络模拟器则传递给服务器。反之亦然。分配的先决条件是我只能使用原始套接字。因此,我将创建自己的 IP 和 UDP 标头。我已经用wireshark测试了我的数据包。它们都是正确的并且格式正确(它可以正确读取它们)。
另一个要求是模拟器、客户端和服务器都必须绑定特定的端口。现在,我不明白如何将原始套接字绑定到特定端口。我所有的原始套接字都在它们绑定的主机地址上接收所有流量。根据手册页和 Internet 上的其他任何地方,包括 Richard Stevens 的“Unix Network Programming”,它们应该是这样工作的。我的老师没有回复我的任何电子邮件,我可能要到周二才能问他。我看到了两个选项。首先,我可以使用 libpcap 从特定设备进行过滤,然后输出到我的原始套接字。我觉得这超出了我们的任务范围。或者我可以在从套接字接收到它们后过滤它们。这显然有很多开销,因为所有数据包都通过内核复制/移动。至少,这是我的理解(如果我错了,请随时纠正我)。
所以我的问题是:他们是一个选项还是我可以为此设置的东西?原始套接字将在哪里绑定到端口?我错过了什么明显的东西吗?
感谢您的时间。
--