c - 将原始套接字绑定(bind)到特定地址

标签 c linux sockets

我正在用 C 语言进行原始套接字编程。我正在创建自己的以太网、ip 和 tcp header 。然后我将数据添加到数据包中并发送它。然后我需要等待其他程序的响应。

我有一台电脑。所以使用 lo 作为我的界面。我有类似的东西

CreateSocket
BindSocketToInterface
Sendto
recvfrom

现在它正在接收自己的数据,这是不希望的。所以我想将套接字绑定(bind)到特定地址。 我可以做吗? 还有怎么做??

可以选择解决这个问题吗??

谢谢:)

最佳答案

如果你想要界面,那么如下

char *opt;
opt = "eth0";
setsockopt(sd, SOL_SOCKET, SO_BINDTODEVICE, opt, 4);

但是如果你想要端口地址那么

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

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

相关文章:

c - 攻击堆栈

java - 如何将文件传递给 JNI 以在 OpenSL ES AudioPlayer 中播放?

Linux从文件中取出字符串并将其用作文件名?

windows - 类似于 Windows cmd "start"的 Linux/Ubuntu 命令?

javascript - Node.js - Socket.io 只能通过 localhost 访问

c++ - 以可移植的方式将类导出到 dll,而不使用接口(interface)?

c - 段错误,C 中的列表

R:无法在 PopOS 21.04 中安装天才包

运行套接字时android无法关闭对话框

javascript - 如何抽象WebRTC报价?