tcpdump 캡처를 위한 멀티캐스트 연결 생성

tcpdump 캡처를 위한 멀티캐스트 연결 생성

특정 멀티캐스트 트래픽을 캡처하기 위해 Linux 쉘 스크립트를 작성하고 싶습니다. 특히 특정 멀티캐스트 그룹/포트에 대한 모든 트래픽을 포함하는 pcap 파일을 생성하고 싶습니다.

다음은 트래픽을 보는 데 사용하는 명령줄입니다.

tcpdump -nnXs 0 -i eth1 udp port 22001 and dst 233.54.12.234

그룹에 대한 멀티캐스트 구독을 설정한 경우에는 정상적으로 작동합니다. 예를 들어, 다른 콘솔에서 이 명령을 실행하면 다음과 같습니다.

mdump 233.54.12.234 22001 10.13.252.51

tcpdump패킷이 보입니다. mdump실행 중이 아니면 아무것도 tcpdump표시되지 않습니다.

캡처를 시작하기 전에 이러한 멀티캐스트 연결을 설정하는 표준 Linux 방식 방법이 있습니까? 이러한 연결을 만드는 데 사용할 수 있지만 그룹의 모든 데이터가 처리되므로 mdump낭비처럼 보이지만 mdump그냥 버릴 것입니다.

내 특정 환경으로 인해 인터페이스를 무차별 모드로 설정하는 것을 권장하지 않습니다. 실제로 금지될 수도 있습니다.

답변1

TL;DR - 다음 중 하나를 선택하세요.

sudo ip addr add 233.54.12.234/32 dev eth1 autojoin

socat STDIO UDP4-RECV:22001,ip-add-membership=233.54.12.234:eth1 > /dev/null


처음에는 "그냥 사용해 보세요"라고 말하고 싶었어요 ip maddress add. 문제 ip maddress는 그 영향뿐링크 레이어멀티캐스트 주소가 아닙니다.규약멀티캐스트 주소(man 8 ip-maddress).

autojoin,주소동사는 잘 작동합니다.

그러나 이로 인해 몇 가지 후속 질문이 제기됩니다. 나는 당신이 실행 중이 tcpdump거나 tshark루트 액세스 권한이 있다고 가정합니다. 그렇지 않으면22001은 높은 번호의 포트이며 다음 socat과 같은 기타 유틸리티입니다.

그러나 내 말을 그대로 받아들이지는 마십시오. 이를 테스트하기 위해 socat멀티캐스트 UDP 패킷 ncat(보통 nmap/packet을 통해)을 사용하거나 생성할 수 있습니다 nmap-ncat.

특정 수의 호스트에서 실행하나다음 두 가지 조합:

옵션 1:

sudo ip addr add 233.54.12.234/32 dev eth1 autojoin

옵션 2:

socat -u UDP4-RECV:22001,ip-add-membership=233.54.12.234:eth1 /dev/null &

첫 번째 옵션에는 루트가 필요하거나 최소한 루트가 필요합니다.능력 CAP_NET_ADMIN. 두 번째 옵션은 루트가 필요하지 않지만 포그라운드에서 실행될 것으로 예상하므로가능한스크립팅에 그다지 도움이 되지 않습니다(하위 프로세스 ID를 추적하고trapBASH가 바로 당신이 찾고 있는 것일 수도 있습니다.

tcpdump작업이 완료되면(그러나 테스트 / 명령 으로 너무 복잡해지기 전에 tshark) 커널이 인터페이스가 올바른 IGMP 그룹에 조인된 것으로 인식하는지 확인하십시오. 아주 멋지다고 느끼면 미친듯이 16진수를 분석할 수도 있지만 /proc/net/igmp그냥 실행하는 것이 좋습니다 netstat -gn.

올바른 그룹에 구독된 인터페이스가 표시되는지 확인한 후 tcpdump 명령을 실행할 수 있습니다.

tcpdump -nnXs 0 -i eth1 udp port 22001 and dst 233.54.12.234

또는 tcpdump 경로를 완전히 사용하고 싶지 않은 경우(또는 이 답변을 우연히 발견하여 멀티캐스트가 작동하는 것을 보고 싶은 경우) 위 명령을 사용하여 다음을 대체하여 참여 socat하고 내용을 에코 할 수 있습니다 .STDOUT/dev/nullSTDOUT

socat -u UDP4-RECV:22001,ip-add-membership=233.54.12.234:eth1

그런 다음 다음 두 가지 옵션 중 하나를 사용하여 다른 컴퓨터에서 간단한 테스트 데이터를 보냅니다.

옵션 1:

socat STDIO UDP-DATAGRAM:233.54.12.234:22001

옵션 2:

ncat  -u 233.54.12.234 22001

이러한 명령을 실행하면 대화형으로 입력을 기다립니다. 무언가를 입력하고 Enter 키를 눌러 전송하고, CTRL+D완료되면 EOF메시지를 보내세요.

이 시점에서 여러분은 엔드투엔드 테스트를 확인하고 몇 가지 명령을 사용하여 세계에서 가장 최악이고 가장 안전하지 않은 채팅 시스템을 구축했어야 합니다.

ip addr add ...참고: (옵션 1)을 사용하여 가입한 멀티캐스트 그룹을 탈퇴하려는 경우 다음을 수행할 수 있습니다.

sudo ip addr del 233.54.12.234/32 dev eth1 autojoin

관련 정보