UDP: чтение данных со всех сетевых интерфейсов

У меня есть следующий код для чтения многоадресных сообщений, поступающих из сети, для указанного порта IP +

private static void ReceiveMessages(int port, string ip, CancellationToken token)
{
    Task.Factory.StartNew(() =>
        {
            using (var mUdpClientReceiver = new UdpClient())
            {
                var mReceivingEndPoint = new IPEndPoint(IPAddress.Any, port);
                mUdpClientReceiver.ExclusiveAddressUse = false;
                mUdpClientReceiver.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
                mUdpClientReceiver.ExclusiveAddressUse = false;
                mUdpClientReceiver.Client.Bind(mReceivingEndPoint);
                mUdpClientReceiver.JoinMulticastGroup(IPAddress.Parse(ip), 255);

                while (!token.IsCancellationRequested)
                {
                    byte[] receive = mUdpClientReceiver.Receive(ref mReceivingEndPoint);

                    Console.WriteLine("Message received from {0} ",mReceivingEndPoint);
                }
            }
        });
}

У меня есть два сетевых адаптера, с которых поступают данные на этот многоадресный порт ip + (подтверждается двумя случаями мониторинга Wireshark каждого сетевого адаптера). Я вижу на wireshark много трафика, приходящего на эти порты + Ip) для обеих сетевых карт.

Проблема в том, что на моей консоли я вижу только сообщения, приходящие с одной сетевой карты.

Я дважды проверил с помощью netstat, у меня нет другого программного обеспечения, прослушивающего мой порт:

Так почему я получаю трафик только от одной из двух моих сетевых карт?

РЕДАКТИРОВАТЬ:

Я даже попробовал следующее:

private static void ReceiveMessages(int port, string ip, CancellationToken token, IEnumerable<IPAddress> ipAddresses)
{
    foreach (IPAddress ipAddress in ipAddresses)
    {
        IPAddress ipToUse = ipAddress;
        Task.Factory.StartNew(() =>
        {
            using (var mUdpClientReceiver = new UdpClient())
            {

                var mReceivingEndPoint = new IPEndPoint(ipToUse, port);
                mUdpClientReceiver.ExclusiveAddressUse = false;
                mUdpClientReceiver.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
                mUdpClientReceiver.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);
                mUdpClientReceiver.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.DontRoute, 1);
                mUdpClientReceiver.ExclusiveAddressUse = false;
                mUdpClientReceiver.Client.Bind(mReceivingEndPoint);
                mUdpClientReceiver.JoinMulticastGroup(IPAddress.Parse(ip), 255);
                Console.WriteLine("Starting to listen on "+ipToUse);
                while (!token.IsCancellationRequested)
                {
                    byte[] receive = mUdpClientReceiver.Receive(ref mReceivingEndPoint);

                    Console.WriteLine("Message received from {0} on {1}",  mReceivingEndPoint,ipToUse);
                }
            }
        });
    }
}

Я вижу «Начало прослушивания правильного IP» дважды (для двух моих IP-адресов), но он по-прежнему отображает только данные, поступающие с одной сетевой карты.

РЕДАКТИРОВАТЬ 2

Я заметил еще кое-что странное. Если я отключаю интерфейс, на котором я получаю все данные, а затем запускаю программное обеспечение, я теперь получаю данные из другого интерфейса. Если я снова активирую интерфейс и перезапущу программное обеспечение, я по-прежнему получаю трафик на неактивированной карте.

И я точно знаю, что у меня есть устройства, которые отвечают мне, которые подключены только к одной сети (не обе)

РЕДАКТИРОВАТЬ 3

Другое дело: если я отправляю сообщение от себя (localhost) на все сетевые карты, которые у меня есть, я вижу, что они появляются на моих двух сетевых интерфейсах. НО, если я запускаю свою программу дважды, сообщения получает только первая программа, а не вторая.

Редактировать 4

Дополнительная информация после первого комментария: у меня есть две карты Ethernet, одна с10.10.24.78 IP, другой с10.9.10.234 ф. Не я посылаю данные, а куски сети (порт5353 с этим ip является известным многоадресным адресом, используемым для mDNS, поэтому я должен получать трафик от таких вещей, как принтер, itunes, macs и некоторые другие части программного обеспечения, которые мы создали). Данные многоадресные на ip224.0.0.251 и порт5353.

Вот код, который можно использовать для отправки данных по нескольким IP-адресам, но, как я уже описал, если вы запускаете его на локальном компьютере, он почти работает (за исключением того, что только один локальный клиент получает сообщение).

private static void SendManuallyOnAllCards(int port, string multicastAddress, IEnumerable<IPAddress> ipAddresses)
{
    foreach (IPAddress remoteAddress in ipAddresses)
    {
        IPAddress ipToUse = remoteAddress;
        using (var mSendSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp))
        {
            mSendSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership,
                                        new MulticastOption(IPAddress.Parse(multicastAddress)));
            mSendSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, 255);
            mSendSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);

            var ipep = new IPEndPoint(ipToUse, port);
            //IPEndPoint ipep = new IPEndPoint(IPAddress.Parse(multicastAddress), port);
            mSendSocket.Bind(ipep);
            mSendSocket.Connect(ipep);


            byte[] bytes = Encoding.ASCII.GetBytes("This is my welcome message");
            mSendSocket.Send(bytes, bytes.Length, SocketFlags.None);
        }
    }
}

РЕДАКТИРОВАТЬ 5 Вот результат моегоroute print(Не знал эту команду), и на моих двух IP-адресах я всегда получаю данные о10.9.10.234

Редактировать 6

Я пробовал несколько других вещей:

Используйте сокет для получения вместо UdpClient -> Не работаетУстановить дополнительное считывание socketOption для считывателя (DontRoute = 1, Broadcast = 1) -> Не работаетУкажите MulticastInterface, который должен использовать модуль чтения Socket (используя socketOption MulticastInterface) -> Не работает

Ответы на вопрос(3)

Ваш ответ на вопрос