问题标签 [multihomed]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
29973 浏览

c# - 向所有可用的网卡广播 UDP 消息

我需要向特定的 IP 和端口发送 UDP 消息。

由于有3个网卡,

当我发送 UDP 消息时,我只在一个网络适配器中接收消息……其余的 ip 没有接收。

我想在发送消息时检查网络适配器。我怎样才能做到这一点?


目前我正在使用以下内容:

0 投票
3 回答
2117 浏览

c# - 尝试将数据包单播到可用网络时出现问题

尝试将数据包单播到可用网络。总共有3个网络。设法仅在一个网络中获取数据包。但我无法在不同的网络中接收数据包。

使用此代码..

问题是什么?谢谢。

0 投票
2 回答
2622 浏览

python - UDP 服务是否必须从连接的 IP 地址响应?

Pyzor使用 UDP/IP 作为通信协议。我们最近将公共服务器切换到一台新机器,并开始收到许多超时的报告。我发现如果我将查询的 IP 从 更改为 ,我可以解决eth0:1问题eth0

我可以用一个简单的例子重现这个问题:

这是服务器代码:

这是客户端代码(188.40.77.206is eth0. 188.40.77.236是同一个服务器,但是 is eth0:1):

服务器在这两种情况下都会收到“ping”数据包(因此在这两种情况下都会发送“pong”数据包)。

奇怪的是,这在某些地方确实有效(即我会得到两个 IP 的响应)。例如,它适用于188.40.37.137(相同的网络/数据中心,不同的服务器),也适用于89.18.189.160(不同的数据中心)。在这些情况下,recvfrom响应确实具有eth0IP,而不是连接到的 IP。

这只是UDP的规则吗?这是Python UDPServer类的问题/限制吗?是我做错了什么吗?除了简单地连接到eth0IP(或侦听特定 IP 而不是0.0.0.0)之外,还有什么方法可以让我完成这项工作?

0 投票
4 回答
6773 浏览

java - 如何在多宿主系统(Java、Linux)上使用多播

这是在 Java 中,但如果需要,我总是可以通过 JNI 恢复为 C。

我有一个带有两个 NIC 的系统,每个 NIC 都连接到一个不同的子网。我想使用多播(特别是 SDP)来发现两个网络上的其他主机。

一个网络很简单:在指定的端口上创建一个 MulticastSocket,将它加入组,然后我得到数据包。简单。

两个网络:到目前为止不可能。我试过了:

1) 创建两个套接字,绑定到同一个端口并使用 setInterface() 或 setNetworkInterface() “连接”到正确的接口。没有运气,即使在 setReuseAddress() 的各种排列之后。

2) 创建一个套接字,然后尝试加入两次,两次调用 joinGroup(SocketAddress mcastaddr, NetworkInterface netIf)。第二次加入呼叫失败。

Java 之外的解决方案会很棒。特别是,如果我可以设置有效“组合”两个接口的多播路由(然后我可以查看每个数据包以确定哪个网络),那就没问题了。正如我之前提到的,任何数量的本机代码都可以在这个环境中使用(Linux,带有 Apache “luni” java 基础设施)。

谢谢!

0 投票
2 回答
7148 浏览

windows - 在多宿主 Windows PC 上接收多播消息

我正在使用基于多播/udp 的多个网络接口的 PC 上开发诊断工具。用户可以选择一个 NIC,应用程序创建套接字,将它们绑定到这个 NIC 并将它们添加到特定的多播组。

多播消息的发送工作正常。但是,只有当我将套接字绑定到我的 PC 的特定 NIC 时,才能成功接收消息。它几乎看起来像在 Windows 中有一个用于接收多播消息的“默认”NIC,它始终是GetAdapterInfo函数返回的第一个 NIC。

我使用 Wireshark 监控网络,发现“IGMP 加入组”消息不是从我绑定套接字的 NIC 发送的,而是通过这个“默认”NIC 发送的。

如果我禁用此网卡(或移除网线),GetAdapterInfo 返回的列表中的下一个网卡将用于接收多播消息。

我通过在我的 PC 的路由表中添加一个附加条目成功地更改了这个“默认”网卡,但我认为这不是解决问题的好方法。

下面附加的代码也会出现问题。加入组消息不是通过 192.168.52 发送的,而是通过不同的 NIC 发送的。

谢谢四爷的帮助!

0 投票
0 回答
1125 浏览

c++ - 当第一个 ip 错误时使用 winhttp 连接到多宿主主机

我试图确认这里描述的功能:

http://msdn.microsoft.com/en-us/library/aa384066(VS.85).aspx

WINHTTP_OPTION_CONNECT_RETRIES 设置或检索一个无符号长整数值,该值包含 WinHTTP 尝试连接到主机的次数。Microsoft Windows HTTP 服务 (WinHTTP) 每个 Internet 协议 (IP) 地址仅尝试一次。例如,如果您尝试连接到具有 10 个 IP 地址且 WINHTTP_OPTION_CONNECT_RETRIES 设置为 7 的多宿主主机,则 WinHTTP 仅尝试连接到前七个 IP 地址。给定同一组 10 个 IP 地址,如果 WINHTTP_OPTION_CONNECT_RETRIES 设置为 20,WinHTTP 只尝试这 10 个 IP 地址中的每一个。如果在指定的尝试次数后连接尝试仍然失败,或者在此之前连接超时过期,则取消请求。WINHTTP_OPTION_CONNECT_RETRIES 的默认值为五次尝试。

确实有效。

我的代码是:

一种测试方法是将其放在您的 C:\WINDOWS\system32\drivers\etc\hosts 文件中:

类型

(这应该失败)然后

您应该会看到 google.com 的两条 dns 记录。

如上所述,默认值为 5,这意味着它应该继续尝试第二个 ip,但事实并非如此。我错过了什么?

0 投票
3 回答
8122 浏览

sockets - 如何在多宿主服务器的非默认接口上接收多播数据

我有一个带有两个 NIC(eth0 和 eth1)的 linux 服务器,并在“ip route”中将 eth0 设置为默认值。现在我想在 eth1 上接收多播数据包。我在路由表中添加了“224.0.20.0/24 dev eth1 proto static scope link”,连接如下:

根据ip maddr它连接到正确接口上的该组,并tshark -i eth1表明我实际上正在获取多播数据包。

但是,调用时我没有收到任何数据包recvfrom(sock)。如果我将“ip route default”设置为 eth1(而不是 eth0),我会通过 recvfrom 获取数据包。这是我的代码还是网络设置的问题,正确的做法是什么?

(更新)解决方案: caf 暗示可能是同一个问题;确实:这样做之后,echo 0 > /proc/sys/net/ipv4/conf/eth1/rp_filter我现在可以接收多播数据包了!

0 投票
4 回答
9548 浏览

c# - 绑定IP地址只是第一次工作

我想从服务器上的一个可用 IP 地址发出 Web 请求,所以我使用这个类:

然后:

但解决方案只是第一次起作用!

0 投票
3 回答
18383 浏览

c - SCTP Multihoming

I've been developing this simple client - server application with C where the client is just sending random data to the server and the server just listens to what the client sends. The protocol I'm using is SCTP and I'm interested on how to implement the multihoming feature to it.

I've been searching through the internet about SCTP and multihoming and haven't been able to find any examples about how to instruct SCTP to use multiple addresses for communication. I've only managed to find what commands one should use when trying to setup SCTP with multihoming and it should be quite straightforward.

I've created a client and a server which both use my computers two WLAN interfaces as their connection points. Both adapters are connected to the same AP. The server is listening for data from the client from these interfaces and the client sends data through them. The problem is that when I disconnect the primary WLAN adapter the client is sending data to, the transmission just halts when it should fallback to the secondary connection. I've traced the packets with Wireshark and the first INIT and INIT_ACK packets report that both the client and the server are using the WLAN adapters as their communication links.

When I reconnect the primary WLAN connection the transmission continues after a little while and bursts a huge load of packets to the server which isn't right. The packets should have been transmitted over the secondary connection. On many sites it is said that SCTP switches between connections automagically but in my case that's not happening. So do you guys have any clues why the transmission doesn't fallback to the secondary connection when the primary link is down even though the client and the server knows each others addresses including the secondary address?

About the server:

The server creates a SOCK_SEQPACKET type socket and binds all interfaces found with INADDR_ANY. getladdrs reports that the server is bounded to 3 addresses (including 127.0.0.1). After that the server listens to the socket and waits the client to send data. Server reads the data with sctp_recvmsg call.

About the client:

The client creates also a SEQPACKET socket and connects to an IP-address specified by a commandline argument. getladdrs in this case returns also 3 addresses like in the servers case. After that the client just starts to send data to the server with one second delay to the server until the user interrupts the send with Ctrl-C.

Here's some source code:

Server:

And the Client:

So do you guys have any clues what I'm doing wrong?

0 投票
1 回答
1613 浏览

sockets - 在多宿主主机中选择接口

在 C 中通过套接字进行编程时,可以通过使用节点 as和in 中的标志getaddrinfo调用该函数来自动获取有关其接口的信息。它返回适合ing 和ing 连接的结构列表。在配置了默认接口的多宿主主机上,将返回与可能不正确的默认接口相关的结构。如何调用以从所有可用接口返回结构,以便可以适当地选择一个。NULLAI_PASSIVEhints.ai_flagsaddrinfobind()accept()getaddrinfogetaddrinfo