본문 바로가기
C#

VirtualBox 호스트와 멀티캐스트(Multicast) 패킷 송/수신 테스트 진행

by Hwoarang757 2022. 3. 2.

출처 : #8698 (VirtualBox Host-Only Network Adapter prevents multicast traffic) – Oracle VM VirtualBox

 

#8698 (VirtualBox Host-Only Network Adapter prevents multicast traffic) – Oracle VM VirtualBox

After installing Oracle VirtualBox and VirtualBox installing the "VirtualBox Host-Only Network" on my Windows 7 64-bit machine, I am no longer able to receive multicast streams on the host machine. This problem occurs even when VirtualBox is not running. T

www.virtualbox.org

출처 : 멀티캐스트 송수신 - C# 프로그래밍 배우기 (Learn C# Programming) (csharpstudy.com)

 

멀티캐스트 송수신 - C# 프로그래밍 배우기 (Learn C# Programming)

멀티캐스트 송수신 Broadcast와 Multicast 하나의 컴퓨터에서 또 다른 하나의 컴퓨터에 데이타를 보내는 것을 Unicast라 하고, 하나의 컴퓨터에서 네트워크 상의 모든 컴퓨터에 데이타를 보내는 것을 Br

www.csharpstudy.com

 

 

1. Virtual Box 특정 Window Host에는 송신 역할을 설정 하였습니다 [ 위 출처의 소스 인용 ]

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Net;
using System.Threading;

namespace UdpSendTest
{
    class Program
    {
        static void Main(string[] args)
        {
            // (1) UdpClient 객체 성성
            UdpClient udp = new UdpClient();

            // (2) Multicast 종단점 설정           
            IPEndPoint multicastEP = new IPEndPoint(IPAddress.Parse("239.255.255.249"), 9554);

            for (int i = 1; i <= 60; i++)
            {
                byte[] dgram = Encoding.ASCII.GetBytes("Msg#" + i);
                // (3) Multicast 그룹에 데이타그램 전송     
                udp.Send(dgram, dgram.Length, multicastEP);
                Console.WriteLine("Send Msg#" + i);
                Thread.Sleep(1000);
            }
        }
    }
}

 

2. Local Host에는 Muticast Packet을 수신 역할을 설정 하였습니다 [ 위 출처의 소스 인용 ]

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Net;
using System.Threading;

namespace UdpTest
{
    class Program
    {
        static void Main(string[] args)
        {
            // (1) UdpClient 객체 성성
            UdpClient udp = new UdpClient();

            // (2) UDP 로컬 IP/포트에 바인딩            
            // udp.Client.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.ReuseAddress, true);
            IPEndPoint localEP = new IPEndPoint(IPAddress.Parse("192.168.56.1"), 9554);
            udp.Client.Bind(localEP);

            // (3) Multicast 그룹에 Join
            IPAddress multicastIP = IPAddress.Parse("239.255.255.249");
            udp.JoinMulticastGroup(multicastIP);

            IPEndPoint remoteEP = new IPEndPoint(IPAddress.Any, 0);

            while (!Console.KeyAvailable)
            {
                try
                {
                    // (4) Multicast 수신
                    byte[] buff = udp.Receive(ref remoteEP);

                    string data = Encoding.ASCII.GetString(buff, 0, buff.Length);
                    Console.WriteLine("Received=" + data);
                }
                catch (Exception exception)
                {
                    Console.WriteLine(exception);
                }
            }
        }
    }
}

 3. 내부 Route 경로에 대하여 목적지가 224.0.0.0인 부분에 대하여 Virtual Box Host Adapter metric 값을 가장 낮게 변경 하였습니다.

4. WireShark를 통하여 VirtualBox Host에서 Multicast 패킷 전송 시에 , LocalHost 에 패킷이 수신되는 것을 확인 할 수 있었습니다.

전송측

수신측