当前位置: 首页 > 知识库问答 >
问题:

从c中的特定接口发送数据包

印曜灿
2023-03-14

我一直在用c做一些套接字编程,我想让我的程序的用户指定要从中发送和接收数据包的接口。套接字(7) 的 linux 手册页说, 你可以设置套接字选项SO_BINDTODEVICE将套接字绑定到一个特定的设备, 比如 “eth0”。我还想到,在调用 bind() 时,您通常会向它传递一个sockaddr_in结构,并将 sin_addr.s_addr 属性设置为 INADDR_ANY 以指示套接字绑定到所有接口,如下所示

int sd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);

struct sockaddr_in local;

local.sin_family = AF_INET;
local.sin_addr.s_addr = INADDR_ANY;
local.sin_port = 0;

bind(sd, (struct sockaddr *)&local, sizeof local);

如果传入sockaddr进行绑定的目的是指定在机器上本地绑定套接字的位置,那么可以只传入特定接口的IP地址来将套接字绑定到它吗?我希望有人能澄清一下套接字在这里做什么,以及这种方法与使用< code>setsockopt(sd,SOL_SOCKET,SO_BINDTODEVICE,

注意:在上面的示例中,为了简单起见,我使用了UDP并删除了错误检查,理想情况下,上述问题的答案应该能够独立于所使用的协议工作。

共有1个答案

匡安宜
2023-03-14

如果传递要绑定的sockaddr的目的是指定在您的机器上本地绑定套接字的位置,您可以只传递特定接口的IP地址以将您的套接字绑定到它吗?

绑定到一个地址(通过< code>bind())和绑定到一个接口(通过< code>setsockopt())服务于不同但重叠的目的。通常< code>bind()就是您想要的。

特别是,您的问题似乎假设地址和接口之间存在1:1映射,但这不是一个安全的假设。一个接口可以有多个地址,至少原则上,一个地址可以由多个接口提供服务。

 类似资料:
  • 问题内容: 尝试了所有可能的方法后,找不到解决该问题的方法。我有一台具有两个接口eth0和eth2的机器。我希望所有ff38:40:2001:dead:beef:cafe :: // 96数据包都在eth2上传输。我尝试了以下所有操作,但在执行ping6 ff38:40:2001:dead:beef:cafe :: 1时,数据包始终在eth0上进行。我尝试过但没有奏效的事情(即,数据包在eth0上

  • 问题内容: 我正在尝试为请求和响应应用程序创建桌面客户端。 我能够轻松地执行GET请求。但是我想知道是否有人可以帮助我确定如何进行JSON请求和响应。并将其解析为字符串,从那里我可以锻炼如何将其全部切开 问题答案: Json.net在.net世界中无处不在。

  • 问题内容: 我有两个可以同时访问互联网的网络接口(WiFi和以太网)。假设我的界面是(以太网)和(wifi)。我需要特定的请求才能通过接口,其他需要通过。 就像是: 我正在使用,但是我可以使用或如果没有任何方法可以使用它。 问题答案: 我找到了使用的方法。这就像一个魅力。 我让问题悬而未决,希望有人可以使用给出答案。

  • 一个非常基本的电路使用MicroPython和SPI接口将ESP8266 MCU连接到74HC595移位寄存器。这就是我尝试发送数据的方式: 为了测试,我在输出引脚和5V(通过100欧姆电阻)之间放置了8个LED,以查看发生了什么,并尝试使用此测试功能发送数据: 正如您所看到的,在这个测试中有移动的1和移动的0。结果很有趣。值0000 0000被传输为1100 0010。之后,所有设置了一个位的值

  • 我有一个客户端和一个服务器。它们通过使用以下命令创建的套接字进行通信: 套接字(AF_INET,SOCK_STREAM,0) 他们之间的交流很好。 我想创建第三个程序,充当服务器并向客户端发送假消息。此程序必须使用以前创建的客户端和服务器套接字。 我使用发送命令与套接字ID由我的静态设置 写入(插座号,消息,1024) 但是它不起作用(我不确定这是正确的方法)。 因此,我尝试了telnet和nc(

  • 我试图做一些非常简单的东西,按钮计数器,有一个按钮在我的HTML-php当我点击它我发送数据'按'到我的arduino和它使led闪烁,到目前为止,还不错,但然后我想发送信号,当我在arduino中按下按钮,我想让我的php读取字符串"点击次数: N"的串行端口,N是从arduio的推送计数。 这里的问题是,在arduino串行我可以看到他字符串,一切正常,但在PHP我做