
로컬 웹 앱 형태의 Telegram OSINT, 스크래핑 및 아카이빙. 다중 계정 수집, 과거 사진과 변경 diff를 포함한 프로필 조회, 10가지 내보내기 형식.
Telegram OSINT, 스크래핑 및 아카이빙.
사용자 컴퓨터에서 완전히 실행되며 오직 Telegram과만 통신하는 로컬 웹 앱.
npm install
npm start
그런 다음 **http://127.0.0.1:5173**을 여세요. 첫 실행 시 API 자격 증명, QR 로그인, 다이얼로그 로딩 과정을 안내합니다. 통신하는 서버는 Telegram이 유일합니다. 만들 계정도, 텔레메트리도, 중간에 끼어드는 서비스도 없습니다. 수집한 것은 사용자가 소유한 SQLite 파일에 그대로 남습니다.
telegram-scraper, telescope, Harrier의 후속작이며 Telethon 1.44 기반입니다.
| 수집(Collect) | 여러 계정에 걸친 채널, 그룹, 포럼 주제를 미디어, 중복 제거 및 재개(resume)와 함께 처리 |
| 조사(Investigate) | 전화번호, @username, id 또는 t.me 링크로 프로필 조회, 모든 과거 사진, 지난번 이후 변경분(diff) |
| 내보내기(Export) | 일반 CSV부터 해시 처리된 증거 번들까지 10가지 형식 |
| 실행 환경(Runs on) | Node 18+, Python 3.12+, SQLite. 데이터베이스 하나, 폴더 하나, 서비스 없음 |
수집(Collect)
-100 id와 해당 항목이 보이는 계정의 배지가 함께 표시됨조사(Investigate)
@username, 사용자 id 또는 t.me 링크 조회내보내기(Export)
npm install은 server/.venv 아래에 Python 환경을 만들고 양쪽 모두를 설치합니다.
| 항목 | 위치 |
|---|---|
| 설정 | ~/.config/tgscope/config.json (모드 600) |
하나의 데이터베이스가 모든 것을 담기 때문에 다이얼로그 간 검색, 공유 사용자 테이블, 미디어 중복 제거, 전달 그래프가 가능합니다.
파일은 다이얼로그 유형 → 다이얼로그 → 포럼 주제 → 미디어 종류 순으로 정리됩니다:
media/
├── channels/technews_-1002116176890/
│ ├── photos/00004711-8001-conference-slides.jpg
│ └── documents/00004802-8210-quarterly-report.pdf
├── groups/pythondev_-1001597139842/
│ ├── general/photos/…
│ └── help/voice/00000004-9004-voice.ogg
└── profiles/123456789/000-5544332211.jpg
디렉터리 이름은 핸들과 전체 id를 결합하며, 비ASCII 제목은 음역(transliteration)되고, 파일 이름은 연대순 정렬을 위해 0으로 패딩됩니다.
모든 Telegram 호출은 토큰 버킷과 FloodWait 백오프를 갖춘 계정별 거버너(governor)를
거치며, 모든 페이지 읽기(메시지, 다이얼로그, 멤버, 프로필 사진)는 플러드(flood) 대기를
기다렸다가 실행을 실패시키지 않고 재개합니다. 세 가지 프로필:
더 긴 대기는 활동 로그에 공지된 뒤 기다립니다. 한 번의 읽기에서 12회 연속 발생하면 포기하고 이를 보고합니다.
여러 계정이 지원됩니다. 설정에서 하나를 버너(burner) 로 지정하면 전화번호 조회가 자동으로 그 계정에서 실행됩니다. 이것이 유일한 위험한 작업이기 때문입니다:
전화번호 조회는 그 번호를 잠시 연락처로 가져왔다가 다시 삭제합니다. 상대방이 이미 내 번호를 저장해 두었다면 "Telegram 가입" 알림을 볼 수 있습니다. tgscope는 매번 먼저 확인을 거치며, 프로필 카드에는 어떤 계정이 사용되었는지 기록됩니다.
npm test # 92 backend and 42 frontend tests, no network needed
npm run build # production bundle of the client
백엔드는 Telethon 코어 위의 FastAPI이며, 가짜 Telethon 클라이언트로 테스트됩니다: 스크래퍼, 내보내기 도구, 미디어 구조, 모든 스키마 마이그레이션. 프론트엔드 테스트는 브라우저 뒤의 순수 로직, 기간 연산, 히스토그램 버케팅, 숫자 및 타임스탬프 형식 지정을 다루며, 모든 화면을 두 번씩(한 번은 빈 상태, 한 번은 데이터가 채워진 상태) 렌더링합니다.
scripts/demo/는 시드된 가짜 데이터로 docs/preview.gif를 재생성합니다. chromium과
ffmpeg가 필요하며, 실제 작업 공간에는 아무것도 건드리지 않고 앱의 일부도 아닙니다.
소스에는 주석이 없습니다 — 의미는 명명과 구조가 전달하며, 테스트가 이를 강제합니다.
연구, 저널리즘 및 승인된 조사를 위한 도구입니다. Telethon을 통해 공식 Telegram API를 사용하며 계정이 이미 볼 수 있는 것만 읽습니다 — 누구의 프라이버시 설정도 우회하지 않습니다. 괴롭힘이나 스토킹에 사용하지 말고, Telegram의 서비스 약관을 준수하며, 자신에게 적용되는 데이터 보호법을 유의하세요.
MIT 라이선스.
| 형식 | 제공 내용 |
|---|
csv | 다이얼로그당 파일 하나 |
json / jsonl | 전체 메타데이터; JSONL은 행 단위로 스트리밍 |
xlsx | 메시지, 미디어, 참가자, 반응 시트 |
html | 독립 실행형 보고서: 통계, 활동, 상위 발신자, 전달 출처, 검색 가능한 테이블 |
markdown | 동일한 보고서를 텍스트로 |
gexf / edges | Gephi 및 Maltego용 전달 그래프 |
sqlite | 선택한 다이얼로그만 담은 독립 데이터베이스 |
bundle | 데이터, 미디어, SHA-256 해시 매니페스트, 수집 로그가 담긴 ZIP |
| 데이터베이스 |
~/.local/share/tgscope/tgscope.db (WAL, FTS5) |
| 미디어 | ~/.local/share/tgscope/media/ |
| 내보내기 | ~/.local/share/tgscope/exports/<timestamp>-<label>/ |
| 프로필 | 미디어 워커 | 요청 간격 | 자동 흡수되는 대기 시간 |
|---|
stealth | 1 | 1.6초 | 최대 180초 |
balanced | 4 | 0.35초 | 최대 90초 |
fast | 8 | 없음 | 최대 45초 |