File size: 2,519 Bytes
494c89b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#!/usr/bin/env python3
"""
Анализатор HAR файлов

Использование:
    python -m debugger.analyze_har path/to/file.har
    python debugger/analyze_har.py ../1.har
"""

import sys
import os

sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

from debugger.analyzers import RequestAnalyzer, FingerprintAnalyzer


def analyze_har(har_path: str):
    """Анализирует HAR файл"""
    
    print(f"\nAnalyzing: {har_path}")
    print("="*60)
    
    # Request analysis
    req_analyzer = RequestAnalyzer(har_path=har_path)
    req_analyzer.print_report()
    
    # Fingerprint analysis
    fp_analyzer = FingerprintAnalyzer(requests=req_analyzer.requests)
    fp_analyzer.print_report()
    
    # Дополнительная информация
    print("\n" + "="*60)
    print("ADDITIONAL INFO")
    print("="*60)
    
    # Ищем redirect запросы
    redirects = [r for r in req_analyzer.requests if r.get('status') in (301, 302, 303, 307, 308)]
    if redirects:
        print(f"\nREDIRECTS ({len(redirects)}):")
        for r in redirects[:10]:
            location = r.get('responseHeaders', {}).get('location', r.get('responseHeaders', {}).get('Location', ''))
            print(f"  {r.get('status')} {r.get('url')[:50]}...")
            if location:
                print(f"       -> {location[:60]}...")
    
    # Ищем OAuth запросы
    oauth_reqs = [r for r in req_analyzer.requests if 'oauth' in r.get('url', '').lower() or 'token' in r.get('url', '').lower()]
    if oauth_reqs:
        print(f"\nOAUTH REQUESTS ({len(oauth_reqs)}):")
        for r in oauth_reqs[:10]:
            print(f"  {r.get('method')} {r.get('url')[:60]}... -> {r.get('status')}")
    
    # Ищем signin запросы
    signin_reqs = [r for r in req_analyzer.requests if 'signin' in r.get('url', '').lower()]
    if signin_reqs:
        print(f"\nSIGNIN REQUESTS ({len(signin_reqs)}):")
        for r in signin_reqs[:15]:
            print(f"  {r.get('method'):4} {r.get('status'):3} [{r.get('duration', 0):5}ms] {r.get('url')[:60]}...")


if __name__ == '__main__':
    if len(sys.argv) < 2:
        print("Usage: python analyze_har.py <path_to_har_file>")
        print("\nExample:")
        print("  python analyze_har.py ../1.har")
        sys.exit(1)
    
    har_path = sys.argv[1]
    
    if not os.path.exists(har_path):
        print(f"Error: File not found: {har_path}")
        sys.exit(1)
    
    analyze_har(har_path)