
مقدمة: لماذا 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 --version1.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
كن أول من يشارك رأيه أو استفساره التقني حول هذا الموضوع
إضافة رد أو استفسار تقني
يجب تسجيل الدخول لإضافة ردود ومشاركة الأكواد في هذا الموضوع.