استخدام مكتبة شودان مع بايثون
شودان هو محرك بحث على الإنترنت تم تطويره من قبل المطور جون مارتلي، شودان مختلف تماما عن محركات البحث التقليدية مثل جوجل وياهووبينج.شودان يتميز بخصائص مختلفة عنهم تماما، فبدلا من البحث داخل الصفحات والمواقع فهو يبحث عن عنواين الاي بي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"
نمرر له الفنكشن shodan()
نقوم بتمرير السريال الخاص بك الذي حصلت عليه من الموقع على شكل سترينج كالاتي
api = Shodan('LLjMe3l294mAwPocYl4ikK4KIWfI7y5U')
- الان سنجرب مثلا استخراج معلومات من الاي بي IP lookup
ipinfo = api.host('8.8.8.8')
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 Shodanapi = Shodan('LLjMe3l294mAwPocYl4ikK4KIWfI7y5U')# Lookup an IPipinfo = 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 Internetics_services = api.count('tag:ics')print('Industrial Control Systems: {}'.format(ics_services['total']))
#!/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 <search query>' % 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 <search query>' % 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)
لمعرفة المزيد حول اوامر المكتبة شودان اتبع الرابط الاتي