사용 가능한 네트워크로 패킷을 유니 캐스트하는 데 문제가 있습니다

StackOverflow https://stackoverflow.com/questions/1096497

  •  11-09-2019
  •  | 
  •  

문제

사용 가능한 네트워크로 패킷을 유니 캐스트하려고합니다. 완전히 3 개의 네트워크가 있습니다. 하나의 네트워크에서만 패킷을 얻을 수 있었지만 다른 네트워크에서 패킷을 수신 할 수 없습니다.

이 코드 사용 ..

        foreach (var i in System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces())
        {
            foreach (var ua in i.GetIPProperties().UnicastAddresses)
            {
                System.Windows.Forms.MessageBox.Show(ua.Address.ToString());
                IPAddress Tip = IPAddress.Parse(ua.Address.ToString());
                IPEndPoint targetEndPoint = new IPEndPoint(Tip, iTargetPort);
                MyUdpClient sendUdpClient = new MyUdpClient();
                int numBytesSent = sendUdpClient.Send(CombineHeaderBody, CombineHeaderBody.Length, targetEndPoint);
            }
        }

프로브는 무엇입니까? 감사.

도움이 되었습니까?

해결책

패킷을 스스로 보내려고한다고 생각하십니까?

유니 캐스트 및 멀티 캐스트 주소를 혼동하지 않는 것이 확실합니까?

좋아, 당신은 멀티 캐스트하려고하지 않습니다 ...

각 네트워크 인터페이스에는 IP 주소가 있습니다. 여기서하고있는 일은 패킷을 네트워크 카드로 보내는 것입니다. 당신의 컴퓨터는 아마도 자체 IP 주소를 알고 127.0.0.1로 다시 라우팅하기 때문에 실제로 네트워크의 문제가 아닙니다.

다른 팁

둘 이상의 인터페이스가 있으므로 멀티 하이머드입니다. 각 인터페이스마다 iPaddress가 있습니다. 따라서 3 개의 인터페이스를 사용하면 3 개의 로컬 IP가 있습니다. UDPClient를 사용하는 경우 IP를 사용하여 전송할 인터페이스를 지정해야합니다.

다음 3 개의 로컬 IP가 있다고 가정하자.

10.1.0.1
10.2.0.1
10.4.0.1
255.255.0.0의 넷 마스크

UDP 패킷을 10.2.5.5로 보내려면 10.2.0.1을 보내야하므로 다음 코드를 사용하십시오.

IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Parse("10.2.0.1"), 0);
IPEndPoint targetEndPoint = new IPEndPoint(IPAddress.Parse("10.2.5.5"), iTargetPort);
UdpClient sendUdpClient = new UdpClient(localEndPoint);
int numBytesSent = sendUdpClient.Send(CombineHeaderBody, CombineHeaderBody.Length, targetEndPoint);

UDP 패킷을 10.1.90.5로 보내려면 10.1.0.1을 보내야하므로 다음 코드를 사용하십시오.

IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Parse("10.1.0.1"), 0);
IPEndPoint targetEndPoint = new IPEndPoint(IPAddress.Parse("10.1.90.5"), iTargetPort);
UdpClient sendUdpClient = new UdpClient(localEndPoint);
int numBytesSent = sendUdpClient.Send(CombineHeaderBody, CombineHeaderBody.Length, targetEndPoint);

둘의 차이점은 LocalEndpoint와 TargetendPoint입니다.

나는 네트워크 전문가가 많지 않지만, 나는 그것을 찌르려고 노력할 것입니다. 나는 모든 패킷이 3 개의 신분을 알고있는 기본 인터페이스를 통해 전송된다고 가정합니다 : 자체, 루프백 및 게이트웨이. 따라서 10.10.1.117로 향하는 192.168.1.111의 패킷은 기본 게이트웨이를 통과해야 할 것입니다 (이것은 192.168.1.1이라고 가정 해 봅시다.) 도달 할 수없는 권리? 모르겠어, 그게 내 추측이야.

그래도, 내가 틀렸을 수도 있습니다. 기본 장치를 사용하지 않고 TCP/IP 스택과 함께 사용 가능한 모든 인터페이스를 사용합니다. 어쨌든, 나는 당신이 찾은 것을보고 궁금합니다. 우리를 계속 업데이트하십시오.

또한 주소를 지적하는 것이 도움이 될 수 있습니다. 추적 경로는 당신의 친구입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top