LOT 1 - Optimizare script build -Instalare mono comanda
This commit is contained in:
parent
5380c3fc63
commit
42ff22bf85
127 changed files with 16163 additions and 532 deletions
578
ai_platform/modules/domain_check/use_api.md
Normal file
578
ai_platform/modules/domain_check/use_api.md
Normal file
|
|
@ -0,0 +1,578 @@
|
|||
# Domain Check API - Developer Documentation
|
||||
|
||||
**Base URL:** `http://domain-check-api:11000`
|
||||
|
||||
**API Version:** v1
|
||||
|
||||
---
|
||||
|
||||
## Authentication
|
||||
|
||||
Currently no authentication required (internal use only).
|
||||
|
||||
---
|
||||
|
||||
## Endpoints
|
||||
|
||||
### POST /api/v1/check/check
|
||||
|
||||
Perform comprehensive domain verification.
|
||||
|
||||
**Request:**
|
||||
|
||||
```bash
|
||||
curl -X POST "http://domain-check-api:11000/api/v1/check/check" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"domain": "example.com",
|
||||
"check_options": {
|
||||
"whois": true,
|
||||
"dns": true,
|
||||
"ssl": true,
|
||||
"ip_intelligence": true,
|
||||
"http_analysis": true,
|
||||
"blacklist": true,
|
||||
"port_scan": true,
|
||||
"subdomains": true
|
||||
}
|
||||
}'
|
||||
```
|
||||
|
||||
**Check Options:**
|
||||
|
||||
| Option | Type | Default | Description |
|
||||
|--------|------|---------|-------------|
|
||||
| `whois` | bool | true | WHOIS lookup (registrar, dates, nameservers) |
|
||||
| `dns` | bool | true | DNS records (A, AAAA, MX, TXT, NS, CNAME, SOA) |
|
||||
| `ssl` | bool | true | SSL certificate validation |
|
||||
| `ip_intelligence` | bool | true | IP geolocation, ASN, reverse DNS |
|
||||
| `http_analysis` | bool | true | HTTP headers, security, technologies |
|
||||
| `blacklist` | bool | true | DNSBL spam/malware blacklist check |
|
||||
| `port_scan` | bool | false | TCP port scanning (slower) |
|
||||
| `subdomains` | bool | false | Subdomain enumeration (slower) |
|
||||
| `force_refresh` | bool | false | Bypass cache |
|
||||
|
||||
---
|
||||
|
||||
## Response Structure
|
||||
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"domain": "example.com",
|
||||
"check_id": "uuid-v4",
|
||||
"timestamp": "2026-02-04T09:32:18.459703Z",
|
||||
"whois": { ... },
|
||||
"dns": { ... },
|
||||
"ssl": { ... },
|
||||
"ip_intelligence": { ... },
|
||||
"http_analysis": { ... },
|
||||
"blacklist": { ... },
|
||||
"port_scan": { ... },
|
||||
"subdomains": { ... },
|
||||
"risk_score": { ... }
|
||||
},
|
||||
"metadata": {
|
||||
"cached": false,
|
||||
"processing_time_ms": 40315,
|
||||
"api_version": "v1",
|
||||
"checks_performed": ["whois", "dns", "ssl", ...]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Data Sections
|
||||
|
||||
### 1. WHOIS (`data.whois`)
|
||||
|
||||
```json
|
||||
{
|
||||
"creation_date": "2017-10-13T07:59:48Z",
|
||||
"expiration_date": "2026-10-13T07:59:48Z",
|
||||
"updated_date": "2025-01-15T06:24:03Z",
|
||||
"registrar": "Vautron Rechenzentrum AG",
|
||||
"age_days": 3036,
|
||||
"status": "ok https://icann.org/epp#ok",
|
||||
"name_servers": ["NS1.CONTABO.NET", "NS2.CONTABO.NET"],
|
||||
"dnssec": null,
|
||||
"registrant_org": null,
|
||||
"registrant_country": "RO",
|
||||
"data_source": "whois"
|
||||
}
|
||||
```
|
||||
|
||||
### 2. DNS (`data.dns`)
|
||||
|
||||
```json
|
||||
{
|
||||
"a_records": ["84.54.23.135"],
|
||||
"aaaa_records": [],
|
||||
"mx_records": [{"priority": 10, "host": "mail.example.com"}],
|
||||
"txt_records": ["v=spf1 include:_spf.google.com ~all"],
|
||||
"ns_records": ["ns1.example.com", "ns2.example.com"],
|
||||
"cname_records": [],
|
||||
"soa_record": {
|
||||
"mname": "ns1.example.com",
|
||||
"rname": "hostmaster.example.com",
|
||||
"serial": 1770195563,
|
||||
"refresh": 10800,
|
||||
"retry": 3600,
|
||||
"expire": 604800,
|
||||
"minimum": 3600
|
||||
},
|
||||
"has_spf": true,
|
||||
"has_dkim": false,
|
||||
"has_dmarc": true,
|
||||
"spf_record": null,
|
||||
"dmarc_record": null
|
||||
}
|
||||
```
|
||||
|
||||
### 3. SSL (`data.ssl`)
|
||||
|
||||
```json
|
||||
{
|
||||
"has_ssl": true,
|
||||
"is_valid": true,
|
||||
"is_self_signed": false,
|
||||
"is_expired": false,
|
||||
"is_wildcard": false,
|
||||
"issuer": "CN=R13, O=Let's Encrypt, C=US",
|
||||
"subject": "CN=example.com",
|
||||
"valid_from": "2025-12-22T12:48:47Z",
|
||||
"valid_until": "2026-03-22T12:48:46Z",
|
||||
"days_until_expiry": 46,
|
||||
"key_size": 2048,
|
||||
"signature_algorithm": "sha256WithRSAEncryption",
|
||||
"san": ["example.com", "www.example.com", "mail.example.com"]
|
||||
}
|
||||
```
|
||||
|
||||
### 4. IP Intelligence (`data.ip_intelligence`)
|
||||
|
||||
```json
|
||||
{
|
||||
"ip": "84.54.23.135",
|
||||
"reverse_dns": "server.provider.net",
|
||||
"geolocation": null,
|
||||
"asn": "AS51167",
|
||||
"isp": "Contabo GmbH",
|
||||
"organization": "Contabo GmbH",
|
||||
"is_datacenter": true,
|
||||
"is_residential": false,
|
||||
"hostname": "server.provider.net",
|
||||
"city": "Lauterbourg",
|
||||
"region": "Grand Est",
|
||||
"country": "France",
|
||||
"country_code": "FR",
|
||||
"coordinates": {"latitude": 48.9751, "longitude": 8.1785},
|
||||
"timezone": "Europe/Paris",
|
||||
"postal": "67630",
|
||||
"data_source": "ipinfo.io",
|
||||
"hosting_score": {
|
||||
"score": 50,
|
||||
"reasons": [],
|
||||
"is_trusted": false,
|
||||
"is_suspicious": false
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 5. HTTP Analysis (`data.http_analysis`)
|
||||
|
||||
```json
|
||||
{
|
||||
"domain": "example.com",
|
||||
"http_status": 200,
|
||||
"https_status": 200,
|
||||
"has_https": true,
|
||||
"http_to_https_redirect": true,
|
||||
"final_url": "https://example.com/",
|
||||
"redirect_chain": [],
|
||||
"response_time_ms": 3351,
|
||||
"server": "Apache",
|
||||
"powered_by": null,
|
||||
"security_headers": {},
|
||||
"missing_security_headers": [
|
||||
{
|
||||
"header": "Strict-Transport-Security",
|
||||
"description": "HSTS - Forces HTTPS",
|
||||
"severity": "CRITICAL"
|
||||
},
|
||||
{
|
||||
"header": "X-Frame-Options",
|
||||
"description": "Prevents clickjacking",
|
||||
"severity": "HIGH"
|
||||
}
|
||||
],
|
||||
"cookies": [],
|
||||
"technologies": ["WordPress", "jQuery", "Apache"],
|
||||
"cms": "WordPress",
|
||||
"frameworks": ["jQuery"],
|
||||
"has_robots_txt": true,
|
||||
"has_sitemap": true,
|
||||
"has_favicon": true,
|
||||
"error": null
|
||||
}
|
||||
```
|
||||
|
||||
### 6. Blacklist (`data.blacklist`)
|
||||
|
||||
```json
|
||||
{
|
||||
"domain": "example.com",
|
||||
"ip": "84.54.23.135",
|
||||
"is_blacklisted": false,
|
||||
"ip_blacklisted": false,
|
||||
"domain_blacklisted": false,
|
||||
"total_listings": 0,
|
||||
"ip_check": {
|
||||
"ip": "84.54.23.135",
|
||||
"is_blacklisted": false,
|
||||
"blacklist_count": 0,
|
||||
"clean_count": 4,
|
||||
"total_checked": 4,
|
||||
"listings": [],
|
||||
"clean_lists": ["Spamhaus ZEN", "SpamCop", "Barracuda", "SORBS"],
|
||||
"check_errors": []
|
||||
},
|
||||
"domain_check": {
|
||||
"domain": "example.com",
|
||||
"is_blacklisted": false,
|
||||
"blacklist_count": 0,
|
||||
"clean_count": 4,
|
||||
"total_checked": 4,
|
||||
"listings": [],
|
||||
"clean_lists": ["Spamhaus DBL", "URIBL", "URIBL Black", "SURBL"],
|
||||
"check_errors": []
|
||||
},
|
||||
"reputation_score": 100,
|
||||
"risk_level": "LOW"
|
||||
}
|
||||
```
|
||||
|
||||
**Blacklists Checked:**
|
||||
|
||||
| List | Type | Description |
|
||||
|------|------|-------------|
|
||||
| Spamhaus ZEN | IP | Combined spam blocklist |
|
||||
| SpamCop | IP | User-reported spam sources |
|
||||
| Barracuda | IP | Barracuda reputation |
|
||||
| SORBS | IP | Spam and relay blocking |
|
||||
| Spamhaus DBL | Domain | Domain blocklist |
|
||||
| URIBL | Domain | URI blocklist |
|
||||
| URIBL Black | Domain | High-confidence spam URIs |
|
||||
| SURBL | Domain | Spam URI realtime blocklist |
|
||||
|
||||
### 7. Port Scan (`data.port_scan`)
|
||||
|
||||
```json
|
||||
{
|
||||
"ip": "84.54.23.135",
|
||||
"total_scanned": 9,
|
||||
"open_ports": [
|
||||
{
|
||||
"port": 443,
|
||||
"service": "HTTPS",
|
||||
"category": "web",
|
||||
"risk_level": "low",
|
||||
"banner": null
|
||||
},
|
||||
{
|
||||
"port": 22,
|
||||
"service": "SSH",
|
||||
"category": "remote_access",
|
||||
"risk_level": "low",
|
||||
"banner": "SSH-2.0-OpenSSH_8.7"
|
||||
}
|
||||
],
|
||||
"closed_ports": [8080, 23, 21, 3389],
|
||||
"filtered_ports": [],
|
||||
"dangerous_open": [
|
||||
{
|
||||
"port": 3306,
|
||||
"service": "MySQL",
|
||||
"category": "database",
|
||||
"risk_level": "critical",
|
||||
"banner": "Host not allowed to connect"
|
||||
}
|
||||
],
|
||||
"services_detected": ["HTTPS", "HTTP", "SSH", "MySQL"],
|
||||
"categories": {
|
||||
"web": [443, 80],
|
||||
"remote_access": [22],
|
||||
"database": [3306]
|
||||
},
|
||||
"security_issues": [
|
||||
{
|
||||
"severity": "CRITICAL",
|
||||
"port": 3306,
|
||||
"service": "MySQL",
|
||||
"issue": "Dangerous service MySQL exposed on port 3306"
|
||||
}
|
||||
],
|
||||
"scan_summary": {
|
||||
"open_count": 5,
|
||||
"closed_count": 4,
|
||||
"filtered_count": 0,
|
||||
"dangerous_count": 1,
|
||||
"has_web": true,
|
||||
"has_email": true,
|
||||
"has_database": true,
|
||||
"has_remote_access": true
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Ports Scanned (Quick Scan):**
|
||||
|
||||
| Port | Service | Risk Level |
|
||||
|------|---------|------------|
|
||||
| 21 | FTP | Medium |
|
||||
| 22 | SSH | Low |
|
||||
| 23 | Telnet | Critical |
|
||||
| 25 | SMTP | Low |
|
||||
| 80 | HTTP | Low |
|
||||
| 443 | HTTPS | Low |
|
||||
| 3306 | MySQL | Critical |
|
||||
| 3389 | RDP | High |
|
||||
| 8080 | HTTP Proxy | Medium |
|
||||
|
||||
### 8. Subdomains (`data.subdomains`)
|
||||
|
||||
```json
|
||||
{
|
||||
"domain": "example.com",
|
||||
"subdomains": [
|
||||
"admin.example.com",
|
||||
"api.example.com",
|
||||
"mail.example.com",
|
||||
"www.example.com"
|
||||
],
|
||||
"total_found": 93,
|
||||
"sources": {
|
||||
"certificate_transparency": ["mail.example.com", "www.example.com"],
|
||||
"dns_bruteforce": ["admin.example.com", "api.example.com"],
|
||||
"dns_records": ["mail.example.com"]
|
||||
},
|
||||
"live_subdomains": [
|
||||
{
|
||||
"subdomain": "www.example.com",
|
||||
"ip": "84.54.23.135",
|
||||
"http": 301,
|
||||
"https": 200
|
||||
}
|
||||
],
|
||||
"error": null
|
||||
}
|
||||
```
|
||||
|
||||
**Subdomain Sources:**
|
||||
|
||||
1. **Certificate Transparency** - crt.sh logs
|
||||
2. **DNS Bruteforce** - Common subdomain prefixes
|
||||
3. **DNS Records** - MX, NS, SOA records
|
||||
|
||||
### 9. Risk Score (`data.risk_score`)
|
||||
|
||||
```json
|
||||
{
|
||||
"total": 13,
|
||||
"level": "LOW",
|
||||
"factors": [
|
||||
{
|
||||
"factor": "domain_age",
|
||||
"score": 0,
|
||||
"weight": 0.2,
|
||||
"weighted_score": 0,
|
||||
"reason": "TRUSTED: Mature domain (3036 days, 8+ years)",
|
||||
"details": {"creation_date": "2017-10-13", "age_days": 3036}
|
||||
}
|
||||
],
|
||||
"formula_breakdown": [
|
||||
{
|
||||
"category": "Domain Age",
|
||||
"raw_score": 0,
|
||||
"weight": 0.2,
|
||||
"weighted_score": 0,
|
||||
"formula": "0 × 0.2 = 0.0"
|
||||
}
|
||||
],
|
||||
"formula_string": "Total = (0 × 0.2) + (0 × 0.15) + ... = 13",
|
||||
"thresholds": {
|
||||
"low": "0-25",
|
||||
"medium": "26-50",
|
||||
"high": "51-75",
|
||||
"critical": "76-100"
|
||||
},
|
||||
"is_new_domain": false,
|
||||
"is_suspicious": false,
|
||||
"is_blacklisted": false,
|
||||
"requires_manual_review": false
|
||||
}
|
||||
```
|
||||
|
||||
**Risk Score Formula:**
|
||||
|
||||
| Category | Weight | Description |
|
||||
|----------|--------|-------------|
|
||||
| Domain Age | 20% | New domains = higher risk |
|
||||
| SSL/TLS | 15% | Certificate validity |
|
||||
| DNS Configuration | 10% | Complete DNS setup |
|
||||
| Email Security | 10% | SPF, DKIM, DMARC |
|
||||
| WHOIS Privacy | 5% | Registration info |
|
||||
| IP Reputation | 10% | Datacenter/residential |
|
||||
| HTTP Security | 10% | Security headers |
|
||||
| Blacklist Status | 15% | DNSBL listings |
|
||||
| Port Security | 5% | Exposed dangerous ports |
|
||||
|
||||
**Risk Levels:**
|
||||
|
||||
| Level | Score Range | Color |
|
||||
|-------|-------------|-------|
|
||||
| LOW | 0-25 | Green |
|
||||
| MEDIUM | 26-50 | Yellow |
|
||||
| HIGH | 51-75 | Orange |
|
||||
| CRITICAL | 76-100 | Red |
|
||||
|
||||
---
|
||||
|
||||
## Examples
|
||||
|
||||
### Quick Check (Basic)
|
||||
|
||||
```bash
|
||||
curl -X POST "http://domain-check-api:11000/api/v1/check/check" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"domain": "google.com"}'
|
||||
```
|
||||
|
||||
### Full Check (All Options)
|
||||
|
||||
```bash
|
||||
curl -X POST "http://domain-check-api:11000/api/v1/check/check" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"domain": "example.com",
|
||||
"check_options": {
|
||||
"whois": true,
|
||||
"dns": true,
|
||||
"ssl": true,
|
||||
"ip_intelligence": true,
|
||||
"http_analysis": true,
|
||||
"blacklist": true,
|
||||
"port_scan": true,
|
||||
"subdomains": true
|
||||
}
|
||||
}'
|
||||
```
|
||||
|
||||
### Python Example
|
||||
|
||||
```python
|
||||
import requests
|
||||
|
||||
response = requests.post(
|
||||
"http://domain-check-api:11000/api/v1/check/check",
|
||||
json={
|
||||
"domain": "example.com",
|
||||
"check_options": {
|
||||
"whois": True,
|
||||
"dns": True,
|
||||
"ssl": True,
|
||||
"ip_intelligence": True,
|
||||
"http_analysis": True,
|
||||
"blacklist": True,
|
||||
"port_scan": True,
|
||||
"subdomains": True
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
data = response.json()
|
||||
print(f"Risk Score: {data['data']['risk_score']['total']}")
|
||||
print(f"Risk Level: {data['data']['risk_score']['level']}")
|
||||
print(f"Is Blacklisted: {data['data']['blacklist']['is_blacklisted']}")
|
||||
```
|
||||
|
||||
### JavaScript Example
|
||||
|
||||
```javascript
|
||||
const response = await fetch('http://domain-check-api:11000/api/v1/check/check', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({
|
||||
domain: 'example.com',
|
||||
check_options: {
|
||||
whois: true,
|
||||
dns: true,
|
||||
ssl: true,
|
||||
ip_intelligence: true,
|
||||
http_analysis: true,
|
||||
blacklist: true,
|
||||
port_scan: true,
|
||||
subdomains: true
|
||||
}
|
||||
})
|
||||
});
|
||||
|
||||
const data = await response.json();
|
||||
console.log(`Risk Score: ${data.data.risk_score.total}`);
|
||||
console.log(`Risk Level: ${data.data.risk_score.level}`);
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Error Responses
|
||||
|
||||
```json
|
||||
{
|
||||
"success": false,
|
||||
"error": {
|
||||
"code": "INVALID_REQUEST",
|
||||
"message": "Domain parameter is required",
|
||||
"status": 400
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Error Codes:**
|
||||
|
||||
| Code | Status | Description |
|
||||
|------|--------|-------------|
|
||||
| `INVALID_REQUEST` | 400 | Missing or invalid parameters |
|
||||
| `INVALID_DOMAIN` | 400 | Domain format invalid |
|
||||
| `NOT_FOUND` | 404 | Resource not found |
|
||||
| `INTERNAL_ERROR` | 500 | Server error |
|
||||
|
||||
---
|
||||
|
||||
## Rate Limits
|
||||
|
||||
No rate limits currently (internal use).
|
||||
|
||||
---
|
||||
|
||||
## Dashboard
|
||||
|
||||
Web interface available at: `http://domain-check-api:11000/`
|
||||
|
||||
---
|
||||
|
||||
## Network Info
|
||||
|
||||
- **Host:** domain-check-api
|
||||
- **IP:** 10.11.10.200
|
||||
- **Port:** 11000 (x1xxx = API/Gateway per Port Schema v2)
|
||||
- **Protocol:** HTTP (internal network)
|
||||
|
||||
## Port Allocation (Production Environment - 1xxxx)
|
||||
|
||||
| Service | Port | Category |
|
||||
|---------|------|----------|
|
||||
| API | 11000 | x1xxx = API/Gateway |
|
||||
| PostgreSQL | 12000 | x20xx = Databases/PostgreSQL |
|
||||
| Redis | 12300 | x23xx = Cache/Redis |
|
||||
Loading…
Add table
Add a link
Reference in a new issue