【发布时间】:2014-05-07 05:20:52
【问题描述】:
要从主机名获取目标或应用目标地址选择算法(根据 RFC 3484),我们有一个库 api getaddrinfo()。如果您在网上搜索,您会发现相同的 API 可用于源地址选择。但是当我实际测试它时,它并没有发生。
当我对其进行一些功课时发现,在 linux 中,内核本身通过应用这些规则(根据 RFC 3484)根据目标地址决定适当的源地址。这是由内核在fib6_rule_action() 方法中完成的,这是在发送数据时完成的(例如在sendto() 中)。
我的问题是在发送数据之前的早期阶段,是否有任何库 API 或系统调用可以为我执行此操作。
【问题讨论】:
-
为了确保我明白这一点:你想向某人发送一个 UDP 数据包,并指定源地址?
-
不清楚你真正想要什么,但如果你 connect() 套接字,你会用getsockname() 得到源地址。 (如果将来内核路由表发生变化,源地址也可能会发生变化——至少对于 UDP)。
-
是的,这就是我想要的,但由于我有多个 ipv6 地址,我将如何决定应该从哪个源 ip 发送数据。是否有任何库 API 可以根据目标 IP 地址实际给我排序的源 IP 列表。