
OSINT 아카이브에서 URL을 추출하여 보안 인사이트를 제공합니다
OSINT 아카이브에서 URL을 추출하여 보안 인사이트를 제공합니다.
Urx는 Wayback Machine, Common Crawl과 같은 OSINT 아카이브에서 URL을 수집하기 위해 설계된 명령줄 도구입니다. 효율성을 위해 Rust로 제작되었으며, 비동기 처리를 활용하여 여러 데이터 소스를 빠르게 쿼리합니다. 이 도구는 지정된 도메인에 대한 URL 정보를 수집하는 과정을 단순화하며, 보안 테스트 및 분석을 포함한 다양한 목적으로 사용할 수 있는 포괄적인 데이터셋을 제공합니다.

# https://crates.io/crates/urx
cargo install urx
# https://formulae.brew.sh/formula/urx
brew install urx
git clone https://github.com/hahwul/urx.git
cd urx
cargo build --release
컴파일된 바이너리는 target/release/urx에서 찾을 수 있습니다.
# 단일 도메인 스캔
urx example.com
# 여러 도메인 스캔
urx example.com example.org
# 파일에서 도메인 읽기
cat domains.txt | urx
Usage: urx [OPTIONS] [DOMAINS]...
Arguments:
[DOMAINS]... URL을 가져올 도메인
Options:
-c, --config <CONFIG> 로드할 설정 파일
--provider-config <PATH> API 키만 저장하는 별도 제공자 설정 파일 (기본값: $XDG_CONFIG_HOME/urx/provider-config.toml). CLI/env > provider-config > 기본 설정.
-h, --help 도움말 출력
-V, --version 버전 출력
입력 옵션:
--files <FILES>... 파일에서 직접 URL 읽기 (WARC, URLTeam 압축 파일, 텍스트 파일 지원)
--domain-list <PATH> 개행으로 구분된 도메인 목록 파일 (반복 가능; 위치 인수 DOMAINS 및 stdin과 병합; `#` 주석 허용)
출력 옵션:
-o, --output <OUTPUT> 결과를 쓸 출력 파일
--output-dir <PATH> 도메인별로 하나의 파일을 이 디렉토리에 씁니다 (확장자는 --format과 일치). --output / stdout과 공존 가능.
-f, --format <FORMAT> 출력 형식 (예: "plain", "json", "csv") [기본값: plain]
--merge-endpoint 동일한 경로의 엔드포인트를 병합하고 URL 매개변수 병합
--normalize-url URL 정규화로 중복 제거 개선 (쿼리 매개변수 정렬, 후행 슬래시 제거)
제공자 옵션:
--providers <PROVIDERS>
사용할 제공자 (쉼표로 구분, 예: "wayback,cc,otx,arquivo,vt,urlscan") [기본값: wayback,cc,otx]
--exclude-providers <EXCLUDE_PROVIDERS>
제외할 제공자 (쉼표로 구분). --providers / --all-providers와 충돌 시 우선 적용.
--all-providers
지원되는 모든 제공자 활성화. API 키가 필요한 제공자는 키가 있을 때만 활성화.
--list-providers
지원되는 모든 제공자를 나열하고 종료.
--subs
검색 시 서브도메인 포함
--cc-index <CC_INDEX>
사용할 Common Crawl 인덱스; 쉼표로 구분된 목록을 병렬로 쿼리 가능 (예: `CC-MAIN-2026-17,CC-MAIN-2025-51`). `latest` (기본값)는 collinfo.json을 통해 최신 인덱스를 확인. [기본값: latest]
--wayback-from <DATE>
Wayback Machine 결과를 DATE (YYYY/YYYYMM/YYYYMMDD/YYYYMMDDhhmmss) 이후의 스냅샷으로 제한
--wayback-to <DATE>
Wayback Machine 결과를 DATE (--wayback-from과 동일한 형식) 이전의 스냅샷으로 제한
--vt-api-key <VT_API_KEY>
VirusTotal용 API 키 (순환을 위해 여러 번 사용 가능, 쉼표로 구분된 키를 사용하여 URX_VT_API_KEY 환경 변수도 사용 가능)
--urlscan-api-key <URLSCAN_API_KEY>
Urlscan용 선택적 API 키; 제공자는 익명으로도 작동 (IP당 약 30 req/min 속도 제한). 순환을 위해 여러 번 사용 가능하거나 URX_URLSCAN_API_KEY (쉼표로 구분된 키)로 설정 가능.
--github-api-key <GITHUB_API_KEY>
GitHub Code Search 제공자용 개인 액세스 토큰 (URX_GITHUB_API_KEY도 읽음, 순환을 위해 쉼표로 구분)
발견 옵션:
--exclude-robots robots.txt 발견 제외
--exclude-sitemap sitemap.xml 발견 제외
표시 옵션:
-v, --verbose 상세 출력 표시
--silent 자동 모드 (출력 없음)
--no-progress 진행률 표시줄 없음
--show-sources 출력 URL에 해당 URL을 반환한 제공자 주석 표시
--stats 실행 종료 시 stderr에 제공자별 요약 출력
필터 옵션:
-p, --preset <PRESET>
필터 사전 설정 (예: "no-resources,no-images,no-audio,only-js,only-style")
-e, --extensions <EXTENSIONS>
특정 확장자만 포함하도록 URL 필터링 (쉼표로 구분, 예: "js,php,aspx")
--exclude-extensions <EXCLUDE_EXTENSIONS>
특정 확장자를 제외하도록 URL 필터링 (쉼표로 구분, 예: "html,txt")
--patterns <PATTERNS>
특정 패턴을 포함하는 URL만 필터링 (쉼표로 구분)
--exclude-patterns <EXCLUDE_PATTERNS>
특정 패턴을 포함하는 URL 제외 (쉼표로 구분)
--show-only-host
URL의 호스트 부분만 표시
--show-only-path
URL의 경로 부분만 표시
--show-only-param
URL의 매개변수 부분만 표시
--min-length <MIN_LENGTH>
포함할 최소 URL 길이
--max-length <MAX_LENGTH>
포함할 최대 URL 길이
--strict
정확한 호스트 검증 적용 (기본값)
네트워크 옵션:
--network-scope <NETWORK_SCOPE> 네트워크 설정이 적용되는 구성 요소 제어 (all, providers, testers 또는 providers,testers) [기본값: all]
--proxy <PROXY> HTTP 요청에 프록시 사용 (형식: <http://proxy.example.com:8080>)
--proxy-auth <PROXY_AUTH> 프록시 인증 자격 증명 (형식: username:password)
--insecure SSL 인증서 검증 건너뛰기 (자체 서명 인증서 허용)
--random-agent HTTP 요청에 임의 User-Agent 사용
--timeout <TIMEOUT> 요청 시간 제한 (초) [기본값: 120]
--retries <RETRIES> 실패한 요청의 재시도 횟수 [기본값: 2]
--parallel <PARALLEL> 제공자별 동시에 가져올 최대 도메인 수 (및 동시 URL 테스트); 제공자의 --rate-limit이 이들 간에 공유됨 [기본값: 5]
--rate-limit <RATE_LIMIT> 속도 제한 (초당 요청 수)
--rate-limit-by <PAIRS> 제공자별 속도 재정의 (예: `vt=1,wayback=10`); 목록에 없는 제공자는 --rate-limit 사용
--max-time <MAX_TIME> 제공자 열거의 전역 최대 시간 제한 (초) (0 = 무제한) [기본값: 0]
테스트 옵션:
--check-status
수집된 URL의 HTTP 상태 코드 확인 [aliases: ----cs]
--include-status <INCLUDE_STATUS>
특정 HTTP 상태 코드 또는 패턴이 있는 URL 포함 (예: --is=200,30x) [aliases: ----is]
--exclude-status <EXCLUDE_STATUS>
특정 HTTP 상태 코드 또는 패턴이 있는 URL 제외 (예: --es=404,50x,5xx) [aliases: ----es]
--extract-links
수집된 URL에서 추가 링크 추출 (HTTP 요청 필요)
# 결과를 파일에 저장
urx example.com -o results.txt
# JSON 형식으로 출력
urx example.com -f json -o results.json
# JavaScript 파일만 필터링
urx example.com -e js
# HTML 및 텍스트 파일 제외
urx example.com --exclude-extensions html,txt
# API 엔드포인트 필터링
urx example.com --patterns api,v1,graphql
# 특정 패턴 제외
urx example.com --exclude-patterns static,images
# 파일터 사전 설정 사용 (--exclude-extensions=png,jpg,.....와 유사)
urx example.com -p no-images
# 특정 제공자 사용
urx example.com --providers wayback,otx
# 키가 필요 없는 Arquivo.pt (포르투갈 웹 아카이브) 제공자 추가
urx example.com --providers wayback,cc,otx,arquivo
# URLScan은 키 없이도 작동 (익명, 속도 제한 있음); 키는 한도를 높임
urx example.com --providers urlscan
# VirusTotal 및 URLScan 제공자 사용
# 1. 제공자에 명시적으로 추가 (명령줄로 API 키 제공)
urx example.com --providers=vt,urlscan --vt-api-key=*** --urlscan-api-key=***
# 2. 환경 변수를 사용하여 API 키 제공
URX_VT_API_KEY=*** URX_URLSCAN_API_KEY=*** urx example.com --providers=vt,urlscan
# 3. 자동 활성화: API 키가 제공되면 제공자가 자동으로 추가됨
urx example.com --vt-api-key=*** --urlscan-api-key=*** # --providers에 지정할 필요 없음
# 4. 여러 API 키 순환 (속도 제한 완화)
# 반복 플래그 사용
urx example.com --vt-api-key=key1 --vt-api-key=key2 --vt-api-key=key3
# 쉼표로 구분된 키로 환경 변수 사용
URX_VT_API_KEY=key1,key2,key3 URX_URLSCAN_API_KEY=ukey1,ukey2 urx example.com
# CLI 플래그와 환경 변수 결합 (CLI 키가 먼저 사용됨)
URX_VT_API_KEY=env_key1,env_key2 urx example.com --vt-api-key=cli_key1 --vt-api-key=cli_key2
# robots.txt 및 sitemap.xml의 URL은 기본적으로 포함됨
# robots.txt 파일의 URL 제외
urx example.com --exclude-robots
# sitemap의 URL 제외
urx example.com --exclude-sitemap
# 서브도메인 포함
urx example.com --subs
# 수집된 URL의 상태 확인
urx example.com --check-status
# 텍스트 파일에서 직접 URL 읽기
urx --files urls.txt
# 파일 입력과 필터링 결합
urx --files urls.txt --patterns api,admin -f json
# 수집된 URL에서 추가 링크 추출
urx example.com --extract-links
# 네트워크 구성
urx example.com --proxy http://localhost:8080 --timeout 60 --parallel 10 --insecure
# 고급 필터링
urx example.com -e js,php --patterns admin,login --exclude-patterns logout,static --min-length 20
# HTTP 상태 코드 기반 필터링
urx example.com --include-status 200,30x,405 --exclude-status 20x
# 호스트 검증 비활성화
urx example.com --strict false
# URL 정규화 및 중복 제거
# 쿼리 매개변수 정렬 및 후행 슬래시 제거를 통한 URL 정규화
urx example.com --normalize-url
# 정규화와 엔드포인트 병합 결합으로 포괄적인 중복 제거
urx example.com --normalize-url --merge-endpoint
# 파일 입력과 URL 정규화
urx --files urls.txt --normalize-url
Urx는 반복 스캔의 성능을 향상시키기 위한 캐싱과 새 URL만 검색하기 위한 증분 스캔을 지원합니다.
# SQLite 캐싱 활성화 (기본값)
urx example.com --cache-type sqlite --cache-path ~/.urx/cache.db
# 분산 캐싱을 위한 Redis 사용
urx example.com --cache-type redis --redis-url redis://localhost:6379
# 증분 스캔 - 마지막 스캔 이후의 새 URL만 표시
urx example.com --incremental
# 캐시 TTL(만료 시간)을 12시간으로 설정
urx example.com --cache-ttl 43200
# 캐싱 완전 비활성화
urx example.com --no-cache
# 증분 스캔과 필터 결합
urx example.com --incremental -e js,php --patterns api
# 캐싱 설정이 포함된 설정 파일
urx -c example/config.toml example.com
# 일일 모니터링 - 새 URL에 대해서만 알림
urx target.com --incremental --silent | notify-tool
# 효율적인 도메인 목록 처리
cat domains.txt | urx --incremental --cache-ttl 3600 > new_urls.txt
# Redis를 사용한 분산 팀 스캔
urx example.com --cache-type redis --redis-url redis://shared-cache:6379
# 개발 중 빠른 재스캔
urx test-domain.com --cache-ttl 300 # 빠른 반복을 위한 5분 캐시
Urx는 다른 보안 및 정찰 도구와의 파이프라인에서 잘 작동합니다:
# 도메인 찾은 후 URL 발견
echo "example.com" | urx | grep "login" > potential_targets.txt
# 다른 도구와 결합
cat domains.txt | urx --patterns api | other-tool
Urx는 gau (GetAllUrls)에서 영감을 받았습니다. gau는 AlienVault의 Open Threat Exchange, Wayback Machine, Common Crawl에서 알려진 URL을 가져오는 도구입니다. 유사한 핵심 기능을 공유하지만, Urx는 Rust로 처음부터 구축되어 성능, 동시성 및 확장된 필터링 기능에 중점을 두었습니다.
Urx는 오픈 소스 프로젝트이며 ❤️로 만들어졌습니다. 이 프로젝트에 기여하고 싶다면 CONTRIBUTING.md를 참조하고 멋진 내용으로 Pull-Request를 보내주세요.