我目前正在从事一项编程任务。作业是实现客户端、网络模拟器和服务器。客户端将数据包传递给网络模拟器,网络模拟器将数据包传递给服务器。反之亦然。分配的前提是我只能使用原始套接字。所以我将创建自己的 IP 和 UDP 标头。我已经用wireshark测试了我的数据包。它们都是正确的并且格式正确(它可以正确读取它们)。
另一个要求是模拟器、客户端和服务器都有必须绑定到的特定端口。现在,我不明白如何将原始套接字绑定到特定端口。我的所有原始套接字都会接收它们绑定到的主机地址上的所有流量。根据手册页和互联网上的其他地方,包括理查德·史蒂文斯(Richard Stevens)的“Unix网络编程”,这就是它们应该如何工作。我的老师没有回复我的任何电子邮件,我可能要到周二才能问他。我面前有两个选择。首先,我可以使用 libpcap 从特定设备进行过滤,然后输出到我的原始套接字。不过,我觉得这超出了我们的任务范围。或者我可以在从套接字收到它们后过滤它们。这显然有很多开销,因为所有数据包都通过内核复制/移动。至少,这是我的理解(如果我错了,请随时纠正我)。
所以我的问题是:
他们是一个选项还是我可以为此设置的东西?原始套接字将在哪里绑定到端口?我错过了一些明显的事情吗?
感谢您的时间。
--
The raw(7) 的手册页 http://linux.die.net/man/7/raw says:
可以使用bind(2)调用将原始套接字绑定到特定的本地地址。如果未绑定,则将接收具有指定 IP 协议的所有数据包。此外,可以使用 SO_BINDTODEVICE 将 RAW 套接字绑定到特定的网络设备;请参见套接字(7)。
编辑:您不能将原始套接字绑定到特定端口,因为“端口”是 TCP 和 UDP 中的概念,而不是 IP 中的概念。看看这三个协议的标头图,它应该变得很明显:您正在较低的级别上工作,其中端口的概念是未知的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)