Shodan: محرك البحث الأكثر رعباً في العالم — دليل عمل...

Shodan: محرك البحث الأكثر رعباً في العالم — دليل عملي بالعربي مع أكواد Python

Community Member
2026/10/06 6 0
مخطط توضيحي

مقدمة: لماذا Shodan؟

في عالم OSINT & Recon، هناك مقولة شائعة: "Google يبحث في صفحات الويب، Shodan يبحث في الأشياء". بينما تفهرس محركات البحث التقليدية المحتوى النصي، يقوم Shodan بمسح الإنترنت بالكامل بحثاً عن المنافذ المفتوحة، الخدمات المكشوفة، الكاميرات، أجهزة IoT، قواعد البيانات، وأنظمة التحكم الصناعي (SCADA) — أي شيء متصل بالإنترنت ويستجيب.

ما يجعل Shodan أداة لا غنى عنها لمحترفي الأمن السيبراني هو قدرته على كشف سطح الهجوم (Attack Surface) من منظور المهاجم نفسه، قبل أن يفعل ذلك. الفرق بين Shodan وأدوات الاستطلاع التقليدية هو أن Shodan لا ينتظر هدفاً محدداً — بل يمسح الإنترنت باستمرار ويفهرس كل شيء.


الجزء الأول: التثبيت والإعداد

1.1 الحصول على مفتاح API

قبل أي شيء، تحتاج إلى مفتاح API. سجّل في Shodan واحصل على مفتاحك. الحساب المجاني يمنحك حداً محدوداً من الاستعلامات، لكنه كافٍ للتعلم.

1.2 التثبيت

bash

# التثبيت عبر pip
pip install shodan

# أو على Kali/Arch
sudo pacman -S python-shodan

# التحقق من التثبيت
shodan --version

1.3 تهيئة مفتاح API

bash

# الطريقة الأسهل: استخدام CLI
shodan init YOUR_API_KEY

# أو تعيين متغير بيئة
export SHODAN_API_KEY="YOUR_API_KEY"

# التحقق من حالة الحساب
shodan info

الجزء الثاني: الاستخدام عبر سطر الأوامر (CLI)

واجهة CLI هي أسرع طريقة للبدء. إليك أهم الأوامر:

bash

# البحث عن خدمة معينة
shodan search "apache 2.4.49"

# معلومات عن IP محدد
shodan host 8.8.8.8

# عد النتائج دون تنزيلها (اقتصادي في الاستعلامات)
shodan count "mongodb"

# تنزيل النتائج بصيغة JSON مضغوطة
shodan download results.json.gz "openssh port:22"

# تحليل ملف النتائج
shodan parse --fields ip_str,port,org results.json.gz

# البحث عن ثغرات محددة
shodan search "vuln:CVE-2021-44228"

# فحص IP الخارجي الخاص بك
shodan myip

نصيحة عملية: استخدم shodan count أولاً لتقدير حجم النتائج قبل استخدام download، لأن كل استعلام يستهلك رصيدك.


الجزء الثالث: البرمجة بـ Python — القوة الحقيقية

CLI رائع، لكن Python يمنحك أتمتة كاملة وتحكماً دقيقاً في البيانات. هذه هي الطريقة التي يستخدمها المحترفون.

3.1 الاستعلام الأساسي

python

import shodan

# تهيئة العميل
API_KEY = "YOUR_API_KEY"
api = shodan.Shodan(API_KEY)

# البحث عن خدمة معينة
try:
    results = api.search('apache country:"SA"')
    print(f"عدد النتائج: {results['total']}")
    
    for result in results['matches']:
        print(f"IP: {result['ip_str']}")
        print(f"المنفذ: {result['port']}")
        print(f"المنظمة: {result.get('org', 'N/A')}")
        print(f"البيانات: {result['data'][:100]}...")
        print("-" * 50)
except shodan.APIError as e:
    print(f"خطأ: {e}")

3.2 البحث المتقدم مع الفلاتر

Shodan يدعم فلاتر قوية جداً. إليك مثالاً عملياً للبحث عن قواعد بيانات MongoDB مكشوفة:

python

import shodan
import json

API_KEY = "YOUR_API_KEY"
api = shodan.Shodan(API_KEY)

# البحث عن MongoDB مكشوفة بدون مصادقة
query = 'product:"MongoDB" "no auth"'
results = api.search(query, limit=50)

print(f"إجمالي النتائج: {results['total']}")

for result in results['matches']:
    ip = result['ip_str']
    port = result['port']
    org = result.get('org', 'Unknown')
    country = result.get('location', {}).get('country_name', 'Unknown')
    
    print(f"🌍 {country} | 🏢 {org} | 🖥️ {ip}:{port}")
    
    # حفظ البيانات الخام
    with open(f"mongo_{ip}.json", "w") as f:
        json.dump(result, f, indent=2)

3.3 استخراج بيانات IP محدد

python

import shodan

api = shodan.Shodan("YOUR_API_KEY")

def get_host_info(ip):
    """استخراج كل المعلومات عن IP محدد"""
    try:
        host = api.host(ip)
        
        print(f"IP: {host['ip_str']}")
        print(f"المنظمة: {host.get('org', 'N/A')}")
        print(f"نظام التشغيل: {host.get('os', 'N/A')}")
        print(f"الدولة: {host.get('country_name', 'N/A')}")
        print(f"المدينة: {host.get('city', 'N/A')}")
        print(f"آخر تحديث: {host.get('last_update', 'N/A')}")
        
        print("\n--- المنافذ المفتوحة ---")
        for item in host['data']:
            print(f"المنفذ {item['port']}: {item.get('product', 'Unknown')} "
                  f"{item.get('version', '')}")
            
            # عرض البانر (Banner) إذا وجد
            if 'data' in item:
                banner = item['data'][:200].strip()
                print(f"  البانر: {banner[:100]}...")
        
        return host
    except shodan.APIError as e:
        print(f"خطأ: {e}")
        return None

# مثال: فحص خادم DNS عام
get_host_info("8.8.8.8")

3.4 البحث عن ثغرات CVE محددة

python

import shodan

api = shodan.Shodan("YOUR_API_KEY")

def search_vulnerability(cve_id):
    """البحث عن أنظمة مصابة بثغرة محددة"""
    query = f'vuln:"{cve_id}"'
    try:
        results = api.search(query, limit=100)
        
        print(f"🔴 الثغرة: {cve_id}")
        print(f"📊 عدد الأنظمة المصابة: {results['total']}")
        print("=" * 60)
        
        for r in results['matches']:
            print(f"IP: {r['ip_str']}:{r['port']}")
            print(f"المنظمة: {r.get('org', 'N/A')}")
            print(f"الدولة: {r.get('location', {}).get('country_name', 'N/A')}")
            
            # استخراج معلومات الثغرة
            vulns = r.get('vulns', {})
            if cve_id in vulns:
                print(f"التفاصيل: {vulns[cve_id].get('summary', 'N/A')[:150]}...")
            print("-" * 40)
            
    except shodan.APIError as e:
        print(f"خطأ: {e}")

# مثال: Log4Shell
search_vulnerability("CVE-2021-44228")

3.5 أتمتة كاملة: مراقبة نطاق IP

python

import shodan
import ipaddress
from datetime import datetime

api = shodan.Shodan("YOUR_API_KEY")

def monitor_network(network_cidr):
    """مراقبة نطاق شبكة كامل واكتشاف الأجهزة المكشوفة"""
    net = ipaddress.ip_network(network_cidr, strict=False)
    
    print(f"🔍 مراقبة الشبكة: {network_cidr}")
    print(f"📅 التاريخ: {datetime.now().strftime('%Y-%m-%d %H:%M')}")
    print("=" * 70)
    
    exposed = []
    
    for ip in net.hosts():
        try:
            host = api.host(str(ip))
            
            services = []
            for item in host.get('data', []):
                services.append(f"{item['port']}/{item.get('transport', 'tcp')} "
                              f"({item.get('product', 'unknown')})")
            
            if services:
                exposed.append({
                    'ip': str(ip),
                    'org': host.get('org', 'N/A'),
                    'services': services
                })
                
                print(f"⚠️  {ip} — {host.get('org', 'N/A')}")
                for svc in services:
                    print(f"   └─ {svc}")
                    
        except shodan.APIError:
            # IP غير موجود في Shodan
            pass
    
    print(f"\n📈 إجمالي الأجهزة المكشوفة: {len(exposed)}")
    return exposed

# مثال
monitor_network("192.0.2.0/24")

الجزء الرابع: نصائح احترافية

4.1 فلاتر Shodan الأكثر استخداماً

الفلترالوصفمثالport:رقم المنفذport:27017country:رمز الدولةcountry:"SA"org:اسم المنظمةorg:"Aramco"hostname:اسم المضيفhostname:"example.com"net:نطاق IPnet:192.168.0.0/24vuln:ثغرة محددةvuln:CVE-2021-44228product:اسم المنتجproduct:"Apache"os:نظام التشغيلos:"Windows"

4.2 تجنب استهلاك الرصيد

python

# ❌ سيء: استعلام ضخم بدون فلترة
api.search("apache")

# ✅ جيد: استعلام محدد مع حد النتائج
api.search("apache country:SA port:8080", limit=20)

# ✅ أفضل: استخدام count أولاً
total = api.count("apache country:SA")['total']
if total < 100:
    results = api.search("apache country:SA")

4.3 التكامل مع أدوات أخرى

Shodan لا يعمل بمعزل عن الآخرين. أداة osint-mcp الحديثة (2026) تدمج 26 أداة OSINT في خادم MCP واحد، مما يتيح للوكلاء الذكيين (Claude، GPT-4) استخدام Shodan وAmass وtheHarvester وMaigret وTruffleHog من خلال محادثة واحدة. هذا هو الاتجاه الحديث في OSINT: الذكاء الاصطناعي + الأدوات الكلاسيكية.

الخلاصة

Shodan ليس مجرد أداة — بل منهجية كاملة في فهم سطح الهجوم. الأكواد التي قدمتها هنا هي نقطة البداية. القوة الحقيقية تأتي من:

  • الأتمتة: دمج Shodan مع Python لأتمتة المراقبة الدورية.

  • التكامل: ربط Shodan مع أدوات مثل theHarvester وAmass وNuclei للحصول على صورة كاملة.

  • التحليل: استخدام البيانات المجمعة لتحديد الأولويات واتخاذ قرارات أمنية مبنية على معلومات.

إذا كان لديك أسئلة أو تريد التعمق في جانب معين (مثل تكامل Shodan مع MCP أو أتمتة المراقبة الكاملة)، اطرحها في الردود.

ابقَ آمنًا، وابقَ فضولياً. 🛡️

الردود والمناقشات التقنية 0

لا توجد ردود بعد

كن أول من يشارك رأيه أو استفساره التقني حول هذا الموضوع

إضافة رد أو استفسار تقني

يجب تسجيل الدخول لإضافة ردود ومشاركة الأكواد في هذا الموضوع.