gpt4 book ai didi

c - 如何将原始套接字绑定(bind)到特定端口?

转载 作者:太空狗 更新时间:2023-10-29 15:04:56 26 4
gpt4 key购买 nike

我目前正在从事一项编程任务。任务是实现客户端、网络仿真器和服务器。客户端将数据包传递给网络仿真器,网络仿真器将数据包传递给服务器。反之亦然。分配的先决条件是我只能使用原始套接字。所以我将创建自己的 IP 和 UDP header 。我已经用 wireshark 测试了我的数据包。它们都是正确的并且格式正确(它可以正确读取它们)。

另一个要求是模拟器、客户端和服务器都有必须绑定(bind)的特定端口。现在,我不明白如何将原始套接字绑定(bind)到特定端口。我所有的原始套接字都接收到它们绑定(bind)到的主机地址上的所有流量。根据手册页和互联网上的其他任何地方,包括 Richard Stevens 的“Unix 网络编程”,它们应该是这样工作的。我的老师没有回复我的任何电子邮件,我可能要到星期二才能问他。我看到面前有两个选择。首先,我可以使用 libpcap 从特定设备进行过滤,然后输出到我的原始套接字。不过,我觉得这超出了我们的任务范围。或者我可以在从套接字接收到它们后过滤它们。这显然有很多开销,因为所有数据包都通过内核复制/移动。至少,这是我的理解(如果我错了,请随时纠正我)。

所以我的问题是:他们是一个选项还是我可以为此设置的东西?原始套接字将在哪里绑定(bind)到端口?我错过了一些明显的东西吗?

感谢您的宝贵时间。

--

最佳答案

man page for raw(7)说:

A raw socket can be bound to a specific local address using the bind(2) call. If it isn't bound all packets with the specified IP protocol are received. In addition a RAW socket can be bound to a specific network device using SO_BINDTODEVICE; see socket(7).

编辑:您不能将原始套接字绑定(bind)到特定端口,因为“端口”是 TCP 和 UDP 中的一个概念,而不是 IP。看看这三个协议(protocol)的头图,它应该变得很明显:您在较低级别工作,其中端口的概念是未知的。

关于c - 如何将原始套接字绑定(bind)到特定端口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4988027/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com