我正在做C中的原始套接字编程。我正在创建自己的以太网,ip和tcp头。然后我将数据添加到数据包并发送。然后我需要等待其他程序的响应。将原始套接字绑定到特定地址
我有一台电脑。所以使用lo作为我的界面。我有类似的东西
CreateSocket
BindSocketToInterface
Sendto
recvfrom
现在它收到它自己的数据,这是不受欢迎的。所以我想要将套接字绑定到特定的地址。 我可以做到吗? 也是如何做到这一点?
可以选择解决这个问题吗?
谢谢:)
我正在做C中的原始套接字编程。我正在创建自己的以太网,ip和tcp头。然后我将数据添加到数据包并发送。然后我需要等待其他程序的响应。将原始套接字绑定到特定地址
我有一台电脑。所以使用lo作为我的界面。我有类似的东西
CreateSocket
BindSocketToInterface
Sendto
recvfrom
现在它收到它自己的数据,这是不受欢迎的。所以我想要将套接字绑定到特定的地址。 我可以做到吗? 也是如何做到这一点?
可以选择解决这个问题吗?
谢谢:)
,如果你想那么界面如下
char *opt;
opt = "eth0";
setsockopt(sd, SOL_SOCKET, SO_BINDTODEVICE, opt, 4);
喜欢,但如果你想端口地址,然后
不能在原始套接字绑定到特定端口,因为“口“是TCP和UDP中的一个概念,而不是IP。看看这三个协议的头部图,它应该变得很明显:你正在一个较低的层次上工作,在那里端口的概念是未知的。
您可以使用setsockopt
将其绑定到特定设备。
struct ifreq *ifr = <populate some values>;
setsockopt(sockfd, SOL_SOCKET, SO_BINDTODEVICE, (void *)ifr, sizeof(struct ifreq))
试试上面的代码,它应该工作。正确填写所需网络设备的ifreq
。
它可以是什么设备?它会是界面,像eth0还是lo? – user3542109
是的,它可以是任何网络接口,如'eth0或lo' –
这不是解决问题。我已经做到了。因为发送者和接收者都一样。我需要IP地址,以便我通过127.0.0.1发送,并且可以从127.0.0.2接收,因此可以限制其基础。或者可以选择发球的目的? – user3542109
端口没问题。但不能绑定它的地址,在我的情况呢?也可以选择打电话有帮助吗? – user3542109