이는 네트워크의 멀티캐스트 트래픽 흐름을 테스트하고 네트워크와 장치에 대한 스트레스 테스트를 위해 작성된 명령줄 유틸리티 및 라이브러리입니다.
이 유틸리티는 강력하게 구성되지 않은 L2 환경을 완전히 중단시킬 수 있으므로 주의가 필요합니다.
mcast는 멀티캐스트 또는 일반 UDP 트래픽을 보내고 받을 수 있는 명령줄 유틸리티입니다. 또한 IGMP 조인, 탈퇴 및 쿼리를 시뮬레이션할 수 있습니다.
참고: 현재 Go 버전 1.10이 설치된 Mac OSX 10.13.3에서 개발 및 테스트되었습니다. 이 프로그램은 모든 Posix/Unix에서 작동해야 하지만 현재 Windows에서는 완전히 작동하지 않습니다. 일부 기능에는 수퍼유저 권한이 필요할 수 있습니다.
이 저장소는 GPLv3에 따른 라이센스입니다. 자세한 내용은 LICENSE.md를 참조하세요.
저작권 (C) 2018 윌 스미스
이 프로그램은 무료 소프트웨어입니다. 자유 소프트웨어 재단(Free Software Foundation)에서 발표한 GNU General Public License(라이센스 버전 3) 또는 (귀하의 선택에 따라) 이후 버전의 조건에 따라 재배포 및/또는 수정할 수 있습니다.
이 프로그램은 유용할 것이라는 희망으로 배포되지만 어떠한 보증도 제공하지 않습니다. 상품성이나 특정 목적에의 적합성에 대한 묵시적인 보증도 제공되지 않습니다. 자세한 내용은 GNU 일반 공중 사용 허가서를 참조하세요.
이 프로그램과 함께 GNU General Public License 사본을 받으셨을 것입니다. 그렇지 않은 경우 http://www.gnu.org/licenses/를 참조하세요.
go가 설치되어 있어야 합니다. 그렇지 않거나 확실하지 않은 경우 https://golang.org/doc/install을 방문하세요. 또한 지원되고 테스트된 OS 및 Go 버전을 실행해야 합니다.
다음으로 프로그램 설치
go install github.com/individuwill/mcast
또는 릴리스 v0.1에서 사전 구축된 바이너리를 다운로드하세요.
한 대의 컴퓨터에서 수신기 실행
mcast receive
다른 컴퓨터에서 보낸 사람 실행
mcast send
호스트 간에 멀티캐스트 라우팅을 활성화해야 합니다.
mcast는 하위 명령에 의해 구동됩니다. 다음과 같이 mcast를 호출합니다.
mcast subcommand [-options...]
하위 명령 목록은 다음과 같습니다.
그러면 각 하위 명령에는 해당 동작을 제어하는 옵션 세트가 있습니다. 대부분의 명령은 비슷한 옵션을 공유하며 이 경우 옵션 구문도 동일합니다. 다음은 각 하위 명령 및 관련 옵션에 대한 자세한 설명입니다.
애플리케이션에 대한 도움말 및 사용 메시지 표시
mcast help [command]
도움말을 원하는 명령을 지정하면 특정 하위 명령에 대한 도움말이 표시될 수 있습니다.
지정된 IP 주소로 UDP 트래픽을 보냅니다. 프로그램이 종료되거나 최대 메시지 수가 전송될 때까지 지정된 간격으로 루프에서 계속 전송됩니다.
mcast send [-options...]
옵션은 다음과 같습니다:
옵션이 활성화된 경우 지정된 IP 주소에서 UDP 트래픽을 수신하고 수신된 UDP 메시지의 텍스트 내용을 인쇄합니다.
mcast receive [-options...]
옵션은 다음과 같습니다:
아직 구현되지 않음
아직 구현되지 않음
아직 구현되지 않음
일부 기본 코드 테스트는 현재 저장소에 있지만 훨씬 더 광범위한 적용 범위가 필요합니다.
다음 명령 중 하나를 사용하여 테스트를 수동으로 실행할 수 있습니다.
go test ./..
go test github.com/individuwill/mcast
go test github.com/individuwill/mcast/multicast
자동으로 테스트를 실행하고, 3개 운영 체제에 대해 크로스 컴파일하고, zip 아티팩트를 생성하기 위한 Jenkins 파일이 저장소 루트에 있습니다. 이 온 커밋을 실행하는 저장소에 git-hook이 있으며 커밋을 통과 또는 실패로 표시합니다.
계획은 3개 운영 체제에서 코드를 테스트하고 젠킨스 클러스터에서 멀티캐스트 전송 및 수신 간의 상호 작용을 테스트하는 것입니다.
마스터에 대한 새 태그 커밋이 만들어지고 테스트를 통과하면 바이너리가 포함된 새 릴리스를 자동으로 생성할 계획도 있습니다.
현재는 코드 테스트만 실행됩니다. 공식 golang docker 컨테이너를 통해 Linux 환경에서 실행됩니다. 바이너리는 Jenkins에 저장되며 수동 릴리스가 이루어져야 합니다.
멀티캐스트 테스트를 위한 기존 도구가 부족하다는 것을 알았기 때문에 네트워크 설계에서 멀티캐스트 기능을 테스트하기 위해 이 프로그램을 작성했습니다. 빠른 테스트를 위해 모든 호스트에 복사할 수 있는 작은 휴대용 바이너리가 필요했습니다. 이는 가상 랩 환경에 특히 유용합니다.
또한 무선 환경을 위한 가장 강력한 멀티캐스트 구성으로 이어지는 공급업체 구성 옵션을 이해하기 위해 무선 네트워크의 트래픽 동작을 테스트하고 관찰할 수 있어야 했습니다. 지금까지 이 프로그램의 올바른 옵션 세트를 사용하면 무선 인프라가 제대로 구성되지 않았거나 공급업체가 멀티캐스트 동작을 구성 또는 제어하는 기능을 제공하지 않는 경우 단일 호스트가 전체 무선 세그먼트에 DoS를 일으킬 수 있습니다.
나는 이 프로그램을 사용하여 멀티캐스트에 대해 더 많이 배우고 Golang에서 코딩을 할 수 있는 기회를 얻었습니다.
프로그램을 개발하는 동안 프로그램의 초기 테스트를 위해 https://github.com/troglobit/mtools 제품군을 사용했습니다. 이 도구 세트는 mcast에도 영감을 주었습니다. 나는 쉬운 동시성, 쉬운 크로스 컴파일 및 크로스 플랫폼 바이너리를 원했기 때문에 mtool을 확장하지 않기로 결정했습니다.
멀티캐스트 기능을 테스트하기 위해 사용하거나 사용한 다른 도구는 다음과 같습니다.