누군가가 특정 멀티캐스트 주소를 통해 RTP를 스트리밍하고 있는지 확인하는 방법은 무엇입니까?

누군가가 특정 멀티캐스트 주소를 통해 RTP를 스트리밍하고 있는지 확인하는 방법은 무엇입니까?

동일한 네트워크에 우분투 머신 A(ip 192.168.0.20)와 우분투 머신 B(ip 192.168.0.21)가 있다고 가정합니다. 예를 들어 시스템 A가 RTP를 멀티캐스트 주소 및 포트로 스트리밍하는지 확인하는 방법

239.0.0.1:5005

B 머신에서요?

답변1

IP 멀티캐스트가 단순 스위치의 모든 포트에 단순히 플러딩되는 것이 아닌 환경에서는 tcpdump트래픽을 캡처하지 못할 수도 있습니다. 스위치는 IGMP 보고서 및 쿼리를 수신하고(또는 자체 쿼리를 수행) 이 멀티캐스트 트래픽이 그렇지 않음을 확인합니다. 필요합니다. 머신 B 포트는 이를 보내지 않습니다. 이것반품setsockopt(fd, SOL_IP, IP_ADD_MEMBERSHIP, ...)소켓에서 멀티캐스트 클라이언트를 사용해야 합니다.

설치 socat및 사용:

socat -d -d -u udp4-recv:5005,reuseaddr,ip-add-membership=239.0.0.1:192.168.0.21 /dev/null

이는 다음을 수행합니다.

  • 초기 IGMP 멤버십 보고서를 전송하여 인터페이스 192.168.0.21에서 멀티캐스트 그룹 239.0.0.1에 참여하세요. 쿼리자가 있는 경우 IGMP 스누핑 브리지에서 처리하면 스마트 스위치가 머신 B 스위치 포트로 트래픽을 보내게 됩니다.

    • 선택적으로 여기에서 reuseaddr동일한 명령을 여러 번 실행할 수 있습니다(시스템 수준 멀티캐스트만 각 명령이 단일 멀티캐스트 스트림의 복사본을 수신하도록 함).

    • -d -d자세히 표시 socat: 수신된 패킷의 소스도 표시됩니다.

    • 가입 후에는 이제 239.0.0.1과 관련된 모든 것을 캡처할 수 있습니다 tcpdump.

    • 192.168.0.20이 239.0.0.1로 전송되는 경우 수신된 패킷에는 192.168.0.20이 소스로 포함되어 이를 보낸 시스템이 표시됩니다.

  • 데이터가 수신되었으나 잊혀졌습니다 /dev/null. 데이터가 비디오 스트림(실제로는 5004가 아닌 포트 5005)인 경우 대체 장치는 /dev/null해당 명령을 사용하여 - | mpv -비디오를 표시합니다.mpv

언제소캇중지되면 커널은 IGMP 종료 메시지를 보냅니다. 스위치 설정에 따라 해당 멀티캐스트 대상을 컴퓨터 B로 보내는 것이 즉시 중지되거나 다음 분 내에 발생합니다. tcpdump따라서 트래픽이 계속 캡처될 수 있지만 이것이 지속되지는 않습니다.

노트:

멍청한 스위치(또는 가상 Linux 브리지)로 네트워킹을 처리하는 환경mcast_querier스위치를 설정하지 않은 경우) tcpdump스위치가 모든 포트에서 트래픽을 플러딩하기 때문에 모든 경우에 멀티캐스트 트래픽이 캡처됩니다.

관련 정보