我正在尝试在具有多个主机 IP 地址(假设 IP A 和 B)的网络接口上发送多播数据包。如何将所述多播数据包的源 IP 字段指定为我首选的主机 IP(A)。目前,多播数据包的源 IP 为 B。我更愿意在操作系统(Windows 10)级别执行此操作。如何正确设置?
我正在使用 java 作为发送方程序,我发现对于 MulticastSocket 对象,setInterface(InetAddress inf) 方法可用于(我假设)指定所选的源 ip 地址,但 DatagramChannel 仅允许设置网络接口,而我更愿意在操作系统级别进行配置。
编辑:忘记添加:路由表的第一行是目标 - (0.0.0.0) | 网络掩码 - (0.0.0.0) | 网关 - 网关 IP | 接口 - 路由表中所有条目中度量值最低的 IP A。多播数据包仍然以 IP B 作为其源
EDIT2:我尝试了以下场景 1:
- 将套接字绑定到通配符地址
- 迭代所有有效接口
- 设置套接字接口到每个有效接口并发送数据包
- 有了这个,我可以使用单个套接字对象通过多个接口发送数据包
场景 2:
- 将套接字绑定到接口 1 上的特定本地 IP 地址(例如 IP1)
- 迭代有效接口
- 尝试将套接字接口设置为每个接口并发送数据包
- 在此示例中,接口设置不执行任何操作,迭代期间发送的所有数据包都留在 IP1 接口上
第一个方法的缺点是,虽然我可以指定网络接口,但如果该接口上有多个本地 IP 地址,则无法指定本地 IP;第二个方法允许指定本地 IP 地址,但无法仅使用 1 个套接字遍历所有有效接口。看来我需要在 n 个不同的接口上创建绑定到 n 个本地 IP 地址的 n 个套接字,才能在 n 个有效接口上发送数据包。
答案1
您可以将发送方绑定到特定的本地 IP 地址,以用作源地址。
如果您使用未指定的地址 0.0.0.0,大多数平台会使用“默认”地址,通常是第一个或最后一个(!)地址。