将原始套接字绑定到特定地址

时间:2014-04-21 10:47:25

标签: c linux sockets

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

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

的东西
CreateSocket
BindSocketToInterface
Sendto
recvfrom

现在它正在接收它自己的数据,这是不受欢迎的。所以我想将socket绑定到特定的地址。 我可以做吗? 还怎么做??

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

谢谢:)

2 个答案:

答案 0 :(得分:0)

如果你想要接口,那就如下

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

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

您无法将原始套接字绑定到特定端口,因为" port"是TCP和UDP中的概念,而不是IP。看看这三个协议的标题图,它应该变得很明显:你在较低的层次上工作,其中端口的概念是未知的。

答案 1 :(得分:0)

您可以使用setsockopt将其绑定到特定设备。

struct ifreq *ifr = <populate some values>;
setsockopt(sockfd, SOL_SOCKET, SO_BINDTODEVICE, (void *)ifr, sizeof(struct ifreq))

尝试上面的代码,它应该工作。正确填充所需网络设备的ifreq