Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
strot — 웹 API용 API 스크레이퍼 에이전트 | Kitploit
도구/GitHubGitHub/vertexcover-io/strot
ReconnaissanceScripting & AutomationAPI Security TestingInformation GatheringWeb SecurityCrawler
GitHubvertexcover-io/strot

strot

웹 API용 API 스크레이퍼 에이전트

저장소 보기
1869개월 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
웹사이트

자연어로 모든 웹사이트의 내부 API를 리버스 엔지니어링하세요

License Python


문제

현대 웹사이트는 숨겨진 AJAX 호출을 통해 데이터를 로드합니다:

  • 데이터는 HTML에 없습니다 - 내부 API를 통해 가져옵니다
  • 네트워크 요청을 수동으로 검사해야 합니다
  • JavaScript에 숨겨진 복잡한 페이지네이션 로직
  • API는 엔드포인트와 파라미터를 자주 변경합니다

해결책

Strot은 웹사이트를 분석하여 내부 API 호출을 찾아줍니다.

Strot이 실제로 수행하는 작업:

  1. 웹페이지를 분석하여 원하는 데이터를 파악합니다
  2. 해당 데이터를 가져오는 AJAX 요청을 캡처합니다
  3. 모든 파라미터를 감지합니다 - 페이지네이션(limit/offset, 커서, 페이지 번호) 및 동적 파라미터(정렬, 필터링, 검색)
  4. JSON 응답을 파싱하는 추출 코드를 생성합니다
  5. 웹사이트 자체 API 호출을 완전한 파라미터 제어로 재현하는 Source를 반환합니다

🐳 지금 체험하기 - 설정 불필요!

전체 Strot 경험(Web UI + API)을 즉시 체험하세요:

Patchright 브라우저 사용

root@kitploit:~
docker run -d --name browser-server -p 5678:5678 synacktra/patchright-headless-server
STROT_ANTHROPIC_API_KEY=sk-ant-apiXXXXXX \
  docker compose -f https://raw.githubusercontent.com/vertexcover-io/strot/refs/heads/main/docker-compose.yml up

또는 Steel 브라우저 사용

root@kitploit:~
STROT_BROWSER_WS_URL=wss://connect.steel.dev?apiKey=ste-XXXXXX STROT_ANTHROPIC_API_KEY=sk-ant-apiXXXXXX \
  docker compose -f https://raw.githubusercontent.com/vertexcover-io/strot/refs/heads/main/docker-compose.yml up

그런 다음 방문하세요:

  • 🌐 웹 대시보드: http://localhost:3000 - 웹사이트 분석을 위한 시각적 인터페이스
  • 🔌 REST API: http://localhost:1337 - 프로그래매틱 액세스

🐍 Python 라이브러리

설치

root@kitploit:~
pip install strot

또는 uv 사용:

root@kitploit:~
uv pip install strot

예제 1: 리뷰 API 리버스 엔지니어링

root@kitploit:~
import strot
import asyncio
from pydantic import BaseModel

class Review(BaseModel):
    title: str | None = None
    username: str | None = None
    rating: float | None = None
    comment: str | None = None
    date: str | None = None

async def get_reviews():
    # Strot discovers the internal API that loads reviews
    source = await strot.analyze(
        url="https://www.getcleanpeople.com/product/fresh-clean-laundry-detergent/",
        query="Customer reviews with ratings and comments",
        output_schema=Review,
        code_executor="e2b" # Defaults to "unsafe"
    )

    # Use the same API call the website uses, with full parameter control
    async for reviews in source.generate_data(limit=500, offset=100, sortBy="date desc"):
        for review in reviews:
            print(f"{review['rating']}⭐ by {review['username']}: {review['comment']}")

if __name__ == "__main__":
    asyncio.run(get_reviews())

예제 2: 제품 목록 API 캡처

root@kitploit:~
import strot
import asyncio
from pydantic import BaseModel

class Product(BaseModel):
    name: str | None = None
    price: float | None = None
    rating: float | None = None
    availability: str | None = None
    description: str | None = None

async def get_products():
    # Strot finds the AJAX endpoint that loads product listings
    source = await strot.analyze(
        url="https://blinkit.com/cn/fresh-vegetables/cid/1487/1489",
        query="Listed products with names and prices.",
        output_schema=Product
    )

    # Set code executor of your choice into source
    source.set_code_executor("e2b")

    # Access all products with custom filtering and sorting
    async for products in source.generate_data(limit=100, offset=0, category="vegetables", sortBy="price"):
        for product in products:
            print(f"{product['name']}: ${product['price']} ({product['rating']}⭐)")

if __name__ == "__main__":
    asyncio.run(get_products())

🔌 MCP 서버

Strot은 MCP(Model Context Protocol) 서버를 제공하여 Claude와 같은 MCP 클라이언트가 웹사이트를 분석하고 내부 API를 직접 발견할 수 있게 해줍니다.

설정

root@kitploit:~
git clone https://github.com/vertexcover-io/strot.git
cd strot && uv sync --group mcp

환경 변수 설정:

root@kitploit:~
export STROT_ANTHROPIC_API_KEY=sk-ant-apiXXXXXX
export STROT_BROWSER_MODE_OR_WS_URL=headless  # or 'headed' or ws://browser-url

호스팅된 브라우저를 사용하려면 다음을 수행할 수 있습니다:

docker 내에서 헤드리스 서버 실행

root@kitploit:~
docker run -d --name browser-server -p 5678:5678 synacktra/patchright-headless-server
export STROT_BROWSER_MODE_OR_WS_URL=ws://localhost:5678/patchright

또는 원격 브라우저 서버에 연결:

root@kitploit:~
export STROT_BROWSER_MODE_OR_WS_URL=wss://...

사용법

root@kitploit:~
$ uv run strotmcp
Usage: strotmcp COMMAND

╭─ Commands ─────────────────────────────────────────────╮
│ http             Start an http server.                 │
│ sse              Start an sse server.                  │
│ stdio            Start a stdio server.                 │
│ streamable-http  Start a streamable http server.       │
╰────────────────────────────────────────────────────────╯

Claude Code와 함께 사용

  • stdio 전송

    root@kitploit:~
    claude mcp add strot-mcp "uv run strotmcp stdio" --transport stdio \
      --env STROT_ANTHROPIC_API_KEY=$STROT_ANTHROPIC_API_KEY STROT_BROWSER_MODE_OR_WS_URL=$STROT_BROWSER_MODE_OR_WS_URL
    
  • sse, http, streamable-http 전송

    원하는 전송 방식으로 별도의 터미널에서 MCP 서버를 실행하세요:

    root@kitploit:~
    uv run strotmcp sse --port 8888
    # uv run strotmcp http --host 0.0.0.0
    # uv run strotmcp streamable-http --host 127.0.0.1 --port 8777
    

    Claude에 MCP 서버를 추가하세요:

    root@kitploit:~
    claude mcp add strot-mcp http://127.0.0.1:8888/sse --transport sse
    

🧪 평가

다양한 웹사이트와 개별 구성 요소에 걸쳐 Strot의 분석 정확도를 테스트하고 검증합니다. 평가 시스템은 다섯 가지 입력 유형을 지원합니다:

  • 기존 작업 (ID로 완료된 작업 평가),
  • 새 작업 (전체 분석 작업 생성 및 평가),
  • 요청 감지 (URL 및 쿼리 조합 테스트),
  • 파라미터 감지 (개별 요청 파라미터 분석 테스트 - 페이지네이션 및 동적 파라미터 모두),
  • 구조화된 추출 (특정 스키마를 사용한 응답 파싱 테스트).

실제 결과를 기대 결과와 비교하여 소스 URL 일치, 페이지네이션 키 감지, 동적 파라미터 감지, 엔터티 수 정확도와 같은 지표를 추적합니다. 모든 평가와 상세 분석 단계는 Airtable에 저장됩니다.

설정

root@kitploit:~
git clone https://github.com/vertexcover-io/strot.git
cd strot && uv sync --group eval

Airtable 설정

  1. 새 Airtable base 생성:

    • Workspaces로 이동
    • 원하는 작업공간에서 Create 버튼 클릭
    • Build an app on your own 선택
    • URL에서 Base ID 복사 (예: appXXXXXXXXXXXXXX)
  2. Personal Access Token 생성:

    • /create/tokens로 이동
    • 다음 스코프 추가:
      • data.records:read
      • data.records:write
      • schema.bases:read
      • schema.bases:write
    • 1단계에서 생성한 base에 대한 액세스 권한 부여
    • Create token을 누르고 토큰 복사 (예: patXXXXXXXXXXXXXX)
  3. 환경 변수 설정:

    root@kitploit:~
    export STROT_AIRTABLE_BASE_ID=appXXXXXXXXXXXXXX
    export STROT_AIRTABLE_TOKEN=patXXXXXXXXXXXXXX
    
    # set the following if you wish to evaluate separate tasks
    export STROT_ANTHROPIC_API_KEY=sk-ant-apiXXXXXX
    

참고: 평가를 실행하면 필요한 테이블이 적절한 스키마로 자동 생성됩니다.

사용법

root@kitploit:~
$ uv run stroteval
Usage: stroteval [OPTIONS]

Evaluate multiple job-based or task-based inputs from a file or stdin.

╭─ Parameters ──────────────────────────────────────────────────────────────────╮
│ --file  -f  Path to the JSON/JSONL file. If not provided, reads from stdin.   │
╰───────────────────────────────────────────────────────────────────────────────╯

작업 기반 입력을 평가하는 경우 API 서버가 실행 중인지 확인하세요.

root@kitploit:~
echo '[
  {
    "job_id": "existing-job-uuid",
    "expected_source": "https://api.example.com/reviews",
    "expected_pagination_keys": ["cursor", "limit"],
    "expected_dynamic_keys": ["sortBy", "category"],
    "expected_entity_count": 243
  },
  {
    "site_url": "https://example.com/category/abc",
    "query": "Listed products with name and prices",
    "expected_source": "https://api.example.com/products",
    "expected_pagination_keys": ["limit", "offset"],
    "expected_dynamic_keys": ["category", "sortBy"],
    "expected_entity_count": 100
  },
  {
    "request": {
      "method": "GET",
      "url": "https://example.com/api/products",
      "type": "ajax",
      "queries": {"page": "2", "limit": "50", "sortBy": "price", "category": "electronics"}
    },
    "expected_pagination_keys": ["page", "limit"],
    "expected_dynamic_keys": ["sortBy", "category"]
  },
  {
    "response": {
      "value": "",
      "request": {
        "method": "GET",
        "url": "https://example.com/api/reviews",
        "type": "ajax"
      },
      "preprocessor": {"element_selector": ".reviews-container"}
    },
    "output_schema_file": "review_schema.json",
    "expected_entity_count": 10
  }
]' | uv run stroteval

🆘 도움이 필요하신가요?

  • 💬 GitHub Discussions - 질문하기
  • 🐛 이슈 보고 - 버그를 찾으셨나요?

📄 라이선스

MIT 라이선스 - 원하는 대로 사용하세요!


❤️로 제작: Vertexcover Labs

도구 다운로드