شرح كيفية استخدام مكتبة شودان مع بايثون | Shodan API Python

0
شرج كيفية استخدام مكتبة شودان مع بايثون | Shodan API Python

ماهو شودان

شودان هو محرك بحث على الإنترنت تم تطويره من قبل المطور جون مارتلي، شودان  مختلف تماما عن محركات البحث التقليدية مثل جوجل وياهووبينج.
شودان يتميز بخصائص مختلفة عنهم تماما، فبدلا من البحث داخل الصفحات والمواقع فهو يبحث عن عنواين الاي بيIP والبورتاتPorts المختلفة المتعلقة بها، شودان  يمكنك من البحث عن أجهزة الكمبيوتر أو السيرفرات والراواترات أو حتى الكاميرات والطابعات أو أي جهاز متصل بالنت، لذا شودان يعتبر أداة مهمة جدا سواء للهاكرز أو لخبراء أمن المعلومات.

طبعا يمكننا استخدام محرك البحث الشهير شودان مع لغة بايثون وهذا بالاستعانة بمكتبة shodan api هذه المكتبة تحتاج ما يسمى api وهي مقابض للتحكم بموقع شودان عن بعد تستطيع الحصول على سيريال خاص بك بالتسجيل بموقع شودان https://account.shodan.io وسيعطيك سيريال مجاني خاص بك

طريقة تثبيت مكتبة شودان

pip install shodan

طريقة استدعاء المكتبة 

from shodan import Shodan
أو

try:
    import shodan
except ImportError:
    print "Shodan library not found. Please install it prior to running script"

الان نقوم بانشاء كائن object باسم api يمكنك اختيار اي اسم ,
نمرر له الفنكشن shodan()
نقوم بتمرير السريال الخاص بك الذي حصلت عليه من الموقع على شكل سترينج  كالاتي
api = Shodan('LLjMe3l294mAwPocYl4ikK4KIWfI7y5U')

  • الان سنجرب مثلا استخراج معلومات من الاي بي   IP lookup

ipinfo = api.host('8.8.8.8')


مثال اخر للبحث عن المواقع المخترقة hacked by
for banner in api.search_cursor('http.title:"hacked by"'):
           print(banner)
  • للبحث عن قواعد البيانات مونغو 


results = api.search('MongoDB')
أو أكثر احترافية نظيف try لاستخراج اي خطأ يحدث وطبعه   except shodan.APIError, error:
try:
    results = api.search('MongoDB')
except shodan.APIError, error:
    print 'Error: {0}'.format(error)
  • للبحث عن الانظمة التحكم الصناعية industrial control systems

ics_services = api.count('tag:ics')
print('Industrial Control Systems: {}'.format(ics_services['total']))


يمكنك ايضا البحث عن apache بالكود الاتي:

try:
        # Search Shodan
        results = api.search('apache')
        # Show the results
        print('Results found: {}'.format(results['total']))
        for result in results['matches']:
                print('IP: {}'.format(result['ip_str']))
                print(result['data'])
                print('')
except shodan.APIError, e:
        print('Error: {}'.format(e))


يمكنك نسخ السكريبت وحفظه بصيغة بايثون shodan.py  وتطويره

from shodan import Shodan
api = Shodan('LLjMe3l294mAwPocYl4ikK4KIWfI7y5U')
# Lookup an IP
ipinfo = api.host('8.8.8.8')
print(ipinfo)
# Search for websites that have been "hacked"
for banner in api.search_cursor('http.title:"hacked by"'):
    print(banner)
# Get the total number of industrial control systems services on the Internet
ics_services = api.count('tag:ics')
print('Industrial Control Systems: {}'.format(ics_services['total']))

وهذا سكريبت جاهز Basic Shodan Search ضع السيريال الخاص بك api ثم قم بحفظه .py

#!/usr/bin/env python
#
# shodan_ips.py
# Search SHODAN and print a list of IPs matching the query
#
# Author: achillean

import shodan
import sys

# Configuration
API_KEY = "YOUR_API_KEY"

# Input validation
if len(sys.argv) == 1:
        print 'Usage: %s ' % sys.argv[0]
        sys.exit(1)

try:
        # Setup the api
        api = shodan.Shodan(API_KEY)

        # Perform the search
        query = ' '.join(sys.argv[1:])
        result = api.search(query)

        # Loop through the matches and print each IP
        for service in result['matches']:
                print service['ip_str']
except Exception as e:
        print 'Error: %s' % e
        sys.exit(1)

وهذا سكريبت اخر لجمع المعلومات Collecting Summary Information using Facets

#!/usr/bin/env python
#
# query-summary.py
# Search Shodan and print summary information for the query.
#
# Author: achillean

import shodan
import sys

# Configuration
API_KEY = 'YOUR API KEY'

# The list of properties we want summary information on
FACETS = [
    'org',
    'domain',
    'port',
    'asn',

    # We only care about the top 3 countries, this is how we let Shodan know to return 3 instead of the
    # default 5 for a facet. If you want to see more than 5, you could do ('country', 1000) for example
    # to see the top 1,000 countries for a search query.
    ('country', 3),
]

FACET_TITLES = {
    'org': 'Top 5 Organizations',
    'domain': 'Top 5 Domains',
    'port': 'Top 5 Ports',
    'asn': 'Top 5 Autonomous Systems',
    'country': 'Top 3 Countries',
}

# Input validation
if len(sys.argv) == 1:
    print 'Usage: %s ' % sys.argv[0]
    sys.exit(1)

try:
    # Setup the api
    api = shodan.Shodan(API_KEY)

    # Generate a query string out of the command-line arguments
    query = ' '.join(sys.argv[1:])

    # Use the count() method because it doesn't return results and doesn't require a paid API plan
    # And it also runs faster than doing a search().
    result = api.count(query, facets=FACETS)

    print 'Shodan Summary Information'
    print 'Query: %s' % query
    print 'Total Results: %s\n' % result['total']

    # Print the summary info from the facets
    for facet in result['facets']:
        print FACET_TITLES[facet]

        for term in result['facets'][facet]:
            print '%s: %s' % (term['value'], term['count'])

        # Print an empty line between summary info
        print ''

except Exception, e:
    print 'Error: %s' % e
    sys.exit(1)


لمعرفة المزيد حول اوامر المكتبة شودان اتبع الرابط الاتي
https://developer.shodan.io/api

https://shodan.readthedocs.io/en/latest/tutorial.html#searching-shodan