> ## Documentation Index
> Fetch the complete documentation index at: https://docs.didit.me/llms.txt
> Use this file to discover all available pages before exploring further.

# تقرير تحليل الجهاز وعنوان IP: الحقول وحالات التطابق

> يوفر Didit تقرير تحليل الجهاز وعنوان IP لفحص الموقع الجغرافي، بصمة الجهاز، مؤشرات VPN/Tor/البروكسي، ومطابقات الأجهزة المكررة لمنع الاحتيال.

## نظرة عامة

ينشئ تحليل الجهاز وعنوان IP ملفاً تعريفياً لكل جلسة بالاعتماد على الموقع الجغرافي لعنوان IP، وبصمة الجهاز، والمتصفح/نظام التشغيل، ونوع الشبكة.
يتم تشغيل تحديد الموقع الجغرافي، وإثراء مخاطر الشبكة، ومطابقة الأجهزة، وفحوصات سلامة الأجهزة عن بُعد بشكل غير متزامن أثناء إكمال المستخدم لعملية التحقق.
تظل بيانات رصد الجهاز وعنوان IP متاحة أثناء انتظار اكتمال التحليل؛ وقد تكون حقول الموقع الجغرافي فارغة حتى تصل النتائج، أو عندما لا يكون العنوان عاماً.
إذا كان سير العمل الخاص بك يعتمد على هذه الفحوصات لتحديد النتيجة أو اختيار خطوة لاحقة، فستظل الجلسة بحالة `In Progress` حتى تتوفر النتائج المطلوبة.
إذا ظل التحليل المطلوب غير متاح بعد عدد محدد من عمليات إعادة المحاولة، تنتقل الجلسة إلى حالة `In Review` لاتخاذ قرار يدوي.
لا تؤدي حالات فشل الإثراء الاختياري إلى منع اكتمال العملية، وتظل القرارات اليدوية هي المرجع النهائي المعتمد.
ينتج عن هذا الفحص:

* كتلة **الموقع الجغرافي لعنوان IP** (الدولة، والولاية/المقاطعة، والمدينة، وخطوط الطول/العرض، والمنطقة الزمنية) المستخرجة من عنوان IP العام.
* **إشارات مخاطر الشبكة** — `is_vpn_or_tor` و`is_data_center` — لاكتشاف محاولات إخفاء الهوية (مثل VPN، وعُقد خروج Tor، ومزودي خدمات الاستضافة، وأدوات حجب الهوية).
* **حسابات المسافة عبر المستندات** — المسافة بخط مستقيم بالكيلومترات بين موقع IP، وموقع مستند الهوية، وموقع مستند إثبات العنوان.
* **تطابقات عبر الجلسات** — عندما يظهر نفس عنوان IP أو هوية الجهاز عبر جلسات تنتمي لمستخدمين مختلفين (مجمعة حسب `vendor_data`).
* **استعادة بصمة الجهاز** — إشارة استعادة عالية الثقة تربط الجلسات حتى بعد قيام المستخدم بمسح التخزين المحلي، أو التبديل إلى وضع التصفح المتخفي، أو إعادة تثبيت التطبيق.

![لقطة شاشة لتقرير تحليل الجهاز وعنوان IP من Didit مع الموقع الجغرافي وبصمة الجهاز وإشارات المخاطر](https://mintcdn.com/didit-0f962782/z6T2GHM4Zh-iSj-K/images/ip-analysis-report.png?fit=max\&auto=format\&n=z6T2GHM4Zh-iSj-K\&q=85\&s=5d4877664a7c89384ee32d4a5cb6949b)

## أين تظهر في استجابات API

يُرجع endpoint القرار تحليل الجهاز وعنوان IP في هيئة مصفوفة بصيغة الجمع باسم **`ip_analyses[]`** في `GET /v3/session/{sessionId}/decision/`. تمثل المدخلات بيانات رصد `Location` غير مكررة مفهرسة حسب (`node_id`، و`ip_address`، و`device_fingerprint`) — حيث يمكن لعقدة واحدة أن تسفر عن مدخلات متعددة عندما يتغير عنوان IP أو جهاز المستخدم في منتصف الجلسة.

```text theme={null}
GET /v3/session/{sessionId}/decision/
  ──▶ { "ip_analyses": [ { status, node_id, ip_address, ip, id_document, poa_document, warnings, matches, … }, … ] }
```

يعكس الهيكل الموضح أدناه المخطط الأساسي — راجع [نماذج البيانات](https://docs.didit.me/ar/reference/data-models.md#تحليل-عنوان-ip).

## المخطط

راجع [تحليل الجهاز وعنوان IP في مرجع نماذج البيانات](https://docs.didit.me/ar/reference/data-models.md#تحليل-عنوان-ip) للاطلاع على المخطط الأساسي.

```typescript theme={null}
interface IPAnalysisV3 {
  status: 'Not Finished' | 'Approved' | 'Declined' | 'In Review' | 'Resub Requested';
  node_id: string | null;

  // Device
  device_brand: string | null;
  device_model: string | null;
  browser_family: string | null;
  os_family: string | null;
  platform: 'mobile' | 'tablet' | 'desktop' | null;
  device_fingerprint: string | null;

  // IP geolocation
  ip_country: string | null;
  ip_country_code: string | null;           // ISO 3166-1 alpha-2
  ip_state: string | null;
  ip_city: string | null;
  latitude: number | null;
  longitude: number | null;
  ip_address: string;
  isp: string | null;
  organization: string | null;
  is_vpn_or_tor: boolean;
  is_data_center: boolean;
  time_zone: string | null;
  time_zone_offset: string | null;

  // Distance blocks — each carries its own location + distances to the other two
  ip: {
    location: { latitude: number; longitude: number } | null;
    distance_from_id_document: number | null;   // km
    distance_from_poa_document: number | null;  // km
  };
  id_document: {
    location: { latitude: number; longitude: number } | null;
    distance_from_ip: number | null;
    distance_from_poa_document: number | null;
  };
  poa_document: {
    location: { latitude: number; longitude: number } | null;
    distance_from_ip: number | null;
    distance_from_id_document: number | null;
  };

  warnings: Warning[];          // see Data Models — Warning object

  // Cross-session matches — up to 5 IP matches + 5 device matches
  matches: IPAnalysisMatch[];
}

interface IPAnalysisMatch {
  session_id: string;                       // matching session UUID
  session_number: number;
  vendor_data: string | null;
  verification_date: string | null;         // "YYYY-MM-DDTHH:MM:SSZ"
  match_type: 'ip_address' | 'device_fingerprint';
  match_source: 'ip_address' | 'persistent_id' | 'legacy_fp' | 'recovered_high';
  matched_value: string | null;             // shared IP, device identifier, or recovered device UUID
  status: string;                           // lifecycle status of the matching session
  is_blocklisted: boolean;                  // currently always false
  api_service: string | null;               // standalone API service; null for workflow sessions
  source: 'session';
  device_info: {
    device_brand: string | null;
    device_model: string | null;
    browser_family: string | null;
    os_family: string | null;
    platform: string | null;
    device_fingerprint: string | null;
  };
  location_info: {
    ip_address: string | null;
    ip_country: string | null;
    ip_country_code: string | null;
    ip_state: string | null;
    ip_city: string | null;
    is_vpn_or_tor: boolean;
    is_data_center: boolean;
  };
  confidence: number;                       // 0–1, = 1 - P(false positive)
  match_mode: 'deterministic' | 'probabilistic' | 'co_occurrence';

  // Present only when match_source = 'recovered_high'
  recovery_similarity?: number;             // cosine similarity, 4 decimals
  tls_ja4_corroborated?: boolean;           // TLS JA4 fingerprints of both observations agree
  recovery_gate_reason?: string;            // e.g. 'hardware_root_match'
}
```

### دلالات المطابقة

يوضح لك `match_source` طريقة التوصل إلى المطابقة، بينما يقيس `confidence` مدى احتمالية أن تكون المطابقة *خاطئة* (`confidence = 1 - P(false positive)`):

| `match_source` | المعنى | `confidence` | `match_mode` |
| - | - | - | - |
| `ip_address` | عنوان IP مشترك — تواجد مشترك على الشبكة، ولا يمثل بأي حال ادعاءً بهوية الجهاز. | `0.0` | `co_occurrence` |
| `persistent_id` | معرّف جهاز دائم مخزّن مطابق تماماً. | `1.0` | `deterministic` |
| `legacy_fp` | تجزئة بصمة الجهاز القديمة `didit-fp-*`. | `0.5` | `probabilistic` |
| `recovered_high` | نتيجة استعادة ضبابية لبصمة الجهاز عالية الثقة بعد تجاوز معايير صارمة وحاسمة. | `1.0` عند الارتباط بالعتاد، وتكون أقل من `< 1.0` في الحالات الأخرى، مع تعزيزها عند تطابق TLS JA4 ودولة IP بشكل مستقل | `deterministic` أو `probabilistic` |

تظهر العناصر المحتملة للاستعادة ذات درجة الثقة المنخفضة كتحذيرات مخاطر فقط — ولا تظهر إطلاقاً في `matches[]`. يقتصر عدد تطابقات IP وتطابقات الأجهزة على 5 تطابقات كحد أقصى لكل منهما، لذا تحتوي المصفوفة على 10 مدخلات على الأكثر.

## قيم الحالة

الحالات هي قيم `FeatureStatusChoices` على مستوى الميزة. يُسنَد كل تحذير يتم إطلاقه إلى الإجراء المُعدّ له على عقدة سير العمل؛ ويُطبَّق الإجراء الأقوى دائماً.

| القيمة | المعنى |
| - | - |
| `Not Finished` | لم تكتمل عقدة تحليل IP لهذه الجلسة بعد (القيمة الافتراضية). |
| `Approved` | لم يتم إطلاق أي تحذير، أو ضُبط كل تحذير مُطلَق على عدم اتخاذ أي إجراء. |
| `In Review` | ضُبط تحذير مُطلَق واحد على الأقل على خيار المراجعة (راجع [التحذيرات](https://docs.didit.me/ar/core-technology/ip-analysis/warnings-ip-analysis.md)). |
| `Declined` | تم إطلاق تحذير من قائمة الحظر (`IP_ADDRESS_IN_BLOCKLIST` أو `DEVICE_FINGERPRINT_IN_BLOCKLIST` — يتم الرفض دائماً)، أو ضُبط تحذير قابل للإعداد على الرفض في سير العمل الخاص بك. |
| `Resub Requested` | طلب المراجِع إعادة إرسال هذه الخطوة. |

يمكن لقواعد الحالة المخصصة المكونة على عقدة تحليل IP تعديل الحالة الناتجة بشكل إضافي.

## اكتشاف VPN والوكيل وTor

يمثل كل من `is_vpn_or_tor` و`is_data_center` قيمتين منطقيتين مستقلتين يتم إرجاعهما لكل جلسة. عندما تكون قيمة `is_vpn_or_tor` هي `true`، يطلق Didit أيضاً التحذير `PRIVATE_NETWORK_DETECTED` حتى يتمكن فريقك من اتخاذ الإجراء المناسب بناءً على إعدادات سير العمل. تؤدي حركة المرور الصادرة من مراكز البيانات فقط (بدون VPN/Tor) إلى تعيين `is_data_center=true` ولكنها لا تُطلق تحذيراً تلقائياً — يمكنك استخدام ذلك كإشارة إضافية في عملية احتساب الدرجات الخاصة بك.

## أمثلة

### مقبولة

```json theme={null}
{
  "ip_analyses": [
    {
      "status": "Approved",
      "node_id": "ip-1",
      "device_brand": "Apple",
      "device_model": "iPhone",
      "browser_family": "Mobile Safari",
      "os_family": "iOS",
      "platform": "mobile",
      "device_fingerprint": "didit-fp-8d2c7a91f4b3e042",
      "ip_country": "Spain",
      "ip_country_code": "ES",
      "ip_state": "Barcelona",
      "ip_city": "Barcelona",
      "latitude": 41.4022,
      "longitude": 2.1407,
      "ip_address": "83.50.226.71",
      "isp": "Telefonica",
      "organization": "Telefonica de Espana",
      "is_vpn_or_tor": false,
      "is_data_center": false,
      "time_zone": "Europe/Madrid",
      "time_zone_offset": "+0100",
      "ip": {
        "location": { "latitude": 41.4022, "longitude": 2.1407 },
        "distance_from_id_document": 23.4,
        "distance_from_poa_document": 12.3
      },
      "id_document": {
        "location": { "latitude": 41.2706, "longitude": 1.9770 },
        "distance_from_ip": 23.4,
        "distance_from_poa_document": 18.7
      },
      "poa_document": {
        "location": { "latitude": 41.3128, "longitude": 2.0540 },
        "distance_from_ip": 12.3,
        "distance_from_id_document": 18.7
      },
      "warnings": [],
      "matches": []
    }
  ]
}
```

### مرفوضة — تطابق مع قائمة حظر IP + شبكة VPN + جهاز مكرر

```json theme={null}
{
  "ip_analyses": [
    {
      "status": "Declined",
      "node_id": "ip-1",
      "device_brand": null,
      "device_model": null,
      "browser_family": "Chrome",
      "os_family": "Linux",
      "platform": "desktop",
      "device_fingerprint": "didit-fp-a13c0d22e8b94471",
      "ip_country": "Netherlands",
      "ip_country_code": "NL",
      "ip_state": "North Holland",
      "ip_city": "Amsterdam",
      "latitude": 52.3676,
      "longitude": 4.9041,
      "ip_address": "45.61.20.5",
      "isp": "Example Hosting",
      "organization": "Example Hosting BV",
      "is_vpn_or_tor": true,
      "is_data_center": true,
      "time_zone": "Europe/Amsterdam",
      "time_zone_offset": "+0100",
      "ip": {
        "location": { "latitude": 52.3676, "longitude": 4.9041 },
        "distance_from_id_document": 1834.2,
        "distance_from_poa_document": 1822.5
      },
      "id_document": {
        "location": { "latitude": 40.4168, "longitude": -3.7038 },
        "distance_from_ip": 1834.2,
        "distance_from_poa_document": 14.0
      },
      "poa_document": {
        "location": { "latitude": 40.5070, "longitude": -3.6720 },
        "distance_from_ip": 1822.5,
        "distance_from_id_document": 14.0
      },
      "warnings": [
        {
          "feature": "LOCATION",
          "risk": "IP_ADDRESS_IN_BLOCKLIST",
          "additional_data": { "ip_address": "45.61.20.5" },
          "log_type": "error",
          "short_description": "IP address in blocklist",
          "long_description": "The IP address used for this session was found in the application's IP blocklist, indicating a known suspicious or forbidden origin.",
          "node_id": "ip-1"
        },
        {
          "feature": "LOCATION",
          "risk": "PRIVATE_NETWORK_DETECTED",
          "additional_data": null,
          "log_type": "warning",
          "short_description": "Private network (VPN/Tor) detected",
          "long_description": "The system detected that the user tried to use a private network (VPN/TOR) to complete the verification process.",
          "node_id": "ip-1"
        },
        {
          "feature": "LOCATION",
          "risk": "COUNTRY_FROM_DOCUMENT_DOES_NOT_MATCH_COUNTRY_FROM_IP",
          "additional_data": { "document_country_code": "ESP", "ip_country_code": "NLD" },
          "log_type": "warning",
          "short_description": "Document country does not match IP country",
          "long_description": "The country from the document does not match the country from the IP address, suggesting a potential mismatch between the document and the user's location.",
          "node_id": "ip-1"
        },
        {
          "feature": "LOCATION",
          "risk": "DUPLICATED_DEVICE_FINGERPRINT",
          "additional_data": {
            "duplicated_session_id": "11111111-2222-3333-4444-555555555555",
            "duplicated_session_number": 1042,
            "api_service": null,
            "match_source": "persistent_id"
          },
          "log_type": "warning",
          "short_description": "Duplicated device fingerprint from another session",
          "long_description": "The same device fingerprint was detected in another session with a different vendor_data, which may indicate multiple identities verified from the same device.",
          "node_id": "ip-1"
        }
      ],
      "matches": [
        {
          "session_id": "11111111-2222-3333-4444-555555555555",
          "session_number": 1042,
          "vendor_data": "user-other",
          "verification_date": "2026-05-28T14:03:21Z",
          "match_type": "device_fingerprint",
          "match_source": "persistent_id",
          "matched_value": "pid_9f1c2b7a8d3e4f50",
          "status": "Declined",
          "is_blocklisted": false,
          "api_service": null,
          "source": "session",
          "device_info": {
            "device_brand": null,
            "device_model": null,
            "browser_family": "Chrome",
            "os_family": "Linux",
            "platform": "desktop",
            "device_fingerprint": "didit-fp-a13c0d22e8b94471"
          },
          "location_info": {
            "ip_address": "45.61.23.99",
            "ip_country": "Netherlands",
            "ip_country_code": "NL",
            "ip_state": "North Holland",
            "ip_city": "Amsterdam",
            "is_vpn_or_tor": true,
            "is_data_center": true
          },
          "confidence": 1.0,
          "match_mode": "deterministic"
        }
      ]
    }
  ]
}
```

## ذات صلة

* [تحذيرات تحليل الجهاز وعنوان IP](https://docs.didit.me/ar/core-technology/ip-analysis/warnings-ip-analysis.md) — جميع رموز التحذيرات التي يمكن لتحليل IP إطلاقها
* [نظرة عامة على تحليل الجهاز وعنوان IP](https://docs.didit.me/ar/core-technology/ip-analysis/overview.md) — ما يقيسه كل جزء
* [نماذج البيانات — تحليل IP](https://docs.didit.me/ar/reference/data-models.md#تحليل-عنوان-ip) — المخطط الأساسي
* [webhook](https://docs.didit.me/ar/integration/webhooks.md) — يحمل `status.updated` نفس payload الخاص بتحليل IP


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.