如何通过给定设备(不是默认设备)发送数据?

发布于 2024-12-03 09:53:31 字数 488 浏览 1 评论 0原文

可能的重复:
在Linux/Unix特定网络接口

我想在Ubuntu上写一个socket程序,我的PC中有很多网络设备。 程序会通过DeviceA向ServerA发送UDP数据包, 但在路由表中,ServerA的默认设备是DeviceB, 如何在不修改路由表的情况下通过 DevideA 发送数据包?

多谢!

/* 我使用 C 或 C++ */

/* 注意:DeviceA 是无线接口,例如:“wlan0”。 */

/* 注意:我在网上找到了一种方法 --> libnet,但它不支持无线接口。 */

Possible Duplicate:
Using a C++ TCP client socket on a specific network interface Linux/Unix

I want to write a socket program on Ubuntu, and there are many network devices in my PC.
The program will send a UDP packet to ServerA by DeviceA,
but in routing table, default device to the ServerA is DeviceB,
how do I send the packet by DevideA without modify the routing table?

Thanks a lot!

/* I use C or C++ */

/* Note: DeviceA is a wireless interface, e.g: "wlan0". */

/* Note: I found a way on internet --> libnet, but it's not support the wireless interface. */

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

凌乱心跳 2024-12-10 09:53:31

我相信您必须将 SO_BINDTODEVICE 选项与 setsockopt。代码是这样的(未经测试):

const char *interface = "wlan0";

int sock = socket(AF_INET, SOCK_DGRAM, 0);
setsockopt(sock, SOL_SOCKET, SO_BINDTODEVICE, interface, strlen(interface));

I believe you have to use the SO_BINDTODEVICE option with setsockopt. The code is something like this (untested):

const char *interface = "wlan0";

int sock = socket(AF_INET, SOCK_DGRAM, 0);
setsockopt(sock, SOL_SOCKET, SO_BINDTODEVICE, interface, strlen(interface));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文