⛏️ 삽시일반

[아프리카TV 분석] 시청자의 IP,PORT 추출하기 (2부)

안녕하세요. 구독자님, 한국의 스트리밍 라이브 방송인 '아프리카TV'라고 들어보았나요? 오늘 공유드릴 내용은 아프리카TV에서 사용되는 '고화질 스트리머'라는 프로그램을 분석한 내용입니다.

2024.04.16 | 조회 249 |
0
|

Hello.Stranger

출근길에 읽을 수 있도록 매일 아침에 개발 및 IT 소식을 전해드립니다. 🛸

안녕하세요. 구독자님, 벌써 '아프리카TV 프로그램 분석'의 두 번째 Article을 보내드려요. 사실 지난주에 나갔어야 했는데, 조금 늦은 점에 양해를 구합니다. 😱 이와 더불어서 이 시리즈의 마지막인 3부도 이번 주 중으로 나갈 예정이니 많은 기대를 해주세요!

 

목차

  • 1부 (보러가기)
    • '고화질 스트리머' 프로그램이란?
    • 그리드를 위한 초기 네트워크 설정
  • 2부
    • Client Center 서버간의 통신
    • Client와 Client 간의 통신
    • Frida를 이용한 타시청자의 IP/Port 정보 획득 POC
  • 3부 (예정)
    • 아프리카TV에서의 P2P 프로토콜 통신 순서
    • 아프리카TV의 P2P 패킷 뜯어보기
    • 타사용자에게 영상데이터 요청하는 코드 짜보기

1. Client와 Center 서버간의 통신

이 전 포스팅에서 afreecastreamer.exe를 실행하고, 실시간 방송을 재생하면 Center로 불리는 아프리카 서버 (TCP PORT:19000)로 연결되는 것을 확인하였습니다. 이 Center와 연결한 후에는 다양한 작업을 하지만, 눈에 띄는 몇 가지만 나열해보면 아래와 같습니다.

1) Client -> Center

고화질 스트리머를 실행한 사용자의 각종 설정값이 아프리카TV의 Center 서버로 전송됩니다. 이 중에서는 UUID, OS, Language 등 기본 정보도 전달되며, path_key, ticket와 같이 Center와 연결에 필요한 식별 정보도 함께 전달됩니다.

Send data from Client to Center
Send data from Client to Center

 

2) Center -> Client

Center 서버에 기본적인 정보를 전달했다면, 사용자는 Center에서 부터는 방송에 대한 각종 정보를 받게됩니다. 우선, 아래 이미지에서는 Region 타입, 워터마크 여부, 1440p 지원 여부, bj 등급, 생방송 비밀번호 여부 등의 정보가 담겨있습니다.

Send information from Center to Client (1)
Send information from Center to Client (1)

 

이 후 채팅창에 대한 정보가 전달되는데요. 패킷 내부에는 broadno(방송 고유 번호), chat IP, chat Port, chat roomno, title 값들이 담겨져 있네요.

Send information from Center to Client (2)
Send information from Center to Client (2)

 

이렇게 방송국에 대한 정보를 모두 내려주고 끝나지 않더라구요. 해당 시스템은 그리드 네트워크, 즉 P2P인 만큼 타사용자에 대한 정보도 전달되어야 p2p 연결이 될텐데요. 여기에 필요한 정보들이 아래와 같이 포함되어 내려오게 됩니다. 이 때 타사용자를 Parent라고 칭하는데, 나 자신에게 영상데이터를 전달해줄 다른 시청자의 IP와 Port가 전달돼요.

Main parent
Main parent

혹여나 이 Parent와 연결이 끊긴다면 생방송에 버퍼링가 발생하겠죠? 그리하여 아프리카측에서는 다른 Parent의 정보를 3개정도 더 내려주게 되며, 혹여나 방송이 끊길 경우 예비 Parent로 연결을 하는 것 같습니다. (물론 이 Parent에서도 영상이 끊긴다면 아프리카TV 서버로부터 영상을 받아옴)

Sub parents
Sub parents

2. Client와 Client간의 통신

1) Grid Network

Grid Network라고 함은 쉽게 말해 사용자들끼리의 네트워크를 연결하여 형성한 것을 의미합니다. 보통의 인터넷 서비스들은 Server와 Client와 같이 1대 다수가 연결하는 망구조 인데요. 스트리밍 서비스에서 이런 네트워크 구조를 ...

멤버십 구독자만 읽을 수 있어요

가입하시려면 아래를 클릭해주세요

댓글

의견을 남겨주세요

확인
의견이 있으신가요? 제일 먼저 댓글을 달아보세요 !

© 2024 Hello.Stranger

출근길에 읽을 수 있도록 매일 아침에 개발 및 IT 소식을 전해드립니다. 🛸

뉴스레터 문의 : hello.stranger1337@gmail.com

자주 묻는 질문 오류 및 기능 관련 제보

서비스 이용 문의admin@team.maily.so

메일리 (대표자: 이한결) | 사업자번호: 717-47-00705 | 서울 서초구 강남대로53길 8, 8층 11-7호

이용약관 | 개인정보처리방침 | 정기결제 이용약관