diff --git a/README.md b/README.md index 0850763..787b159 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,10 @@

- ReconSpider height= + ReconSpider 		height=

+

Most advanced Open Source Intelligence (OSINT) Framework

+

+ +

# ReconSpider @@ -11,12 +15,29 @@ ReconSpider can be used by Infosec Researchers, Penetration Testers, Bug Hunters ReconSpider aggregate all the raw data, visualize it on a dashboard and facilitate alerting and monitoring on the data. + +# Table Of Contents + +1. [Version (beta)](https://github.com/bhavsec/reconspider#version-beta) +2. [Overview of the tool](https://github.com/bhavsec/reconspider#overview-of-the-tool) +3. [Mind Map (v1)](https://github.com/bhavsec/reconspider#mind-map-v1) +4. [License Information](https://github.com/bhavsec/reconspider#license-information) +5. [ReconSpider Banner](https://github.com/bhavsec/reconspider#reconspider-banner) +6. [Required Setup](https://github.com/bhavsec/reconspider#required-setup) +7. [Documentation](https://github.com/bhavsec/reconspider#documentation) +8. [Setting up the environment (Linux Operating System)](https://github.com/bhavsec/reconspider#setting-up-the-environment-linux-operating-system) +9. [Setting up the environment (Windows Operating System)](https://github.com/bhavsec/reconspider#setting-up-the-environment-windows-operating-system) +10. [Setting up the environment using (Termux) in Android](https://github.com/bhavsec/reconspider#setting-up-the-environment-using-termux-in-android) +11. [Adding API Keys](https://github.com/bhavsec/reconspider#adding-api-keys) +12. [Usage](https://github.com/bhavsec/reconspider#usage) + + + # Version (beta) - File Name : README - Developer : @bhavsec - Version : 0.0.1 - Website : reconspider.com + ReconSpider : 1.0.2 + Python : 3.7.1 + Website : reconspider.com @@ -38,14 +59,14 @@ http://reconspider.com/mindmap.html -# Licenses information +# License Information ``` ReconSpider and its documents are covered under GPL-3.0 (General Public License v3.0) ``` -## Using ReconSpider +## ReconSpider Banner ``` __________ _________ __ ___ @@ -72,9 +93,9 @@ OPTIONS: -# Required setup +# Required Setup -* Python 2.7 Download latest version from here: [python.org](https://www.python.org/downloads/) +* Python 3.7 Download latest version from here: [python.org](https://www.python.org/downloads/) * Use install.py For installing all dependencies and libraries @@ -93,7 +114,7 @@ Let's Begin !! ### Setting up the environment (Linux Operating System) -Step 1 - cloning ReconSpider on your linux system. +Step 1 - Cloning ReconSpider on your linux system. In order to download ReconSpider simply clone the github repository. Below is the command which you can use in order to clone ReconSpider repository. ``` @@ -132,7 +153,34 @@ After unzipping, go to that directory using Command Prompt and type the followin python install.py ``` -### Generating and adding API Keys + + +### Setting up the environment using (Termux) in Android + +Step 1 - Cloning ReconSpider on your Termux in Android operating system. + +In order to download ReconSpider from github you need to install git package using this command. +``` +pkg install git +``` + + +Step 2 - After installing git package, Simply clone the github repository. Below is the command which you can use in order to clone ReconSpider repository. +``` +git clone https://github.com/bhavsec/reconspider.git +``` + + +Step 3 - Installing all dependencies. + +Once you clone, you will find directory name as **reconspider**. Just go to that directory and install using these commands: +``` +cd reconspider +python install.py +``` + + +### Adding API Keys We need some API Keys before using this tool. Following are the API's which we are using in this tool for a time being. diff --git a/install.py b/install.py index 97936b8..77c6654 100644 --- a/install.py +++ b/install.py @@ -2,17 +2,21 @@ import sys import platform -def exec_api(): - os.system('python main/gen_api.py') - os.system('python reconspider.py') +def exec_api_linux(): + os.system('python3 main/gen_api.py') + os.system('python3 reconspider.py') -if sys.version_info[0] < 3: +def exec_api_win(): + os.system('py -3 main/gen_api.py') + os.system('py -3 reconspider.py') + +if sys.version_info[0] > 2: if (platform.system() != "Windows"): os.system('sudo apt-get install python-pip') os.system('sudo pip install python-whois clearbit shodan fullcontact.py requests') - exec_api() + exec_api_linux() else: - os.system('C:\Python27\Scripts\pip install python-whois clearbit shodan fullcontact.py requests') - exec_api() + os.system('pip3 install python-whois clearbit shodan fullcontact.py requests') + exec_api_win() else: - print("Your System Python Version "+ str(sys.version_info[0]) + " isn't compatible with ReconSpider. Use Python 2.7") + print(("Your System Python Version "+ str(sys.version_info[0]) + " isn't compatible with ReconSpider. Use Python 3.7")) diff --git a/main/__init__.py b/main/__init__.py index 0473ae3..43148b7 100644 --- a/main/__init__.py +++ b/main/__init__.py @@ -1 +1 @@ -from args import * +from .args import * diff --git a/main/gen_api.py b/main/gen_api.py index 23eb557..83ec880 100644 --- a/main/gen_api.py +++ b/main/gen_api.py @@ -1,12 +1,12 @@ -print "\n\n[+] Enter your API Keys below\n" +print("\n\n[+] Enter your API Keys below\n") -sd = raw_input("Enter your Shodan API Key: ").replace(" ", "") -cb = raw_input("Enter your Clearbit Secret API Key: ").replace(" ", "") -fc = raw_input("Enter your Full Contact API Key: ").replace(" ", "") +sd = input("Enter your Shodan API Key: ").replace(" ", "") +cb = input("Enter your Clearbit Secret API Key: ").replace(" ", "") +fc = input("Enter your Full Contact API Key: ").replace(" ", "") -fout = open('modules/config.py', 'w') -fout.write("shodan_api = "+"\"" + sd + "\""+"\n") -fout.write("clearbit_api = "+"\"" + cb + "\""+"\n") -fout.write("fullcontact_api = "+"\"" + fc + "\""+"\n") +fout = open("modules/config.py", "w") +fout.write("shodan_api = " + '"' + sd + '"' + "\n") +fout.write("clearbit_api = " + '"' + cb + '"' + "\n") +fout.write("fullcontact_api = " + '"' + fc + '"' + "\n") fout.close() diff --git a/modules/__init__.py b/modules/__init__.py index e467540..5808a33 100644 --- a/modules/__init__.py +++ b/modules/__init__.py @@ -1,6 +1,6 @@ -from company import * -from email import * -from ip import * -from person import * -from url import * -from who_is import * +from .company import * +from .email import * +from .ip import * +from .person import * +from .url import * +from .who_is import * diff --git a/modules/company.py b/modules/company.py index 41deb01..0ecf471 100644 --- a/modules/company.py +++ b/modules/company.py @@ -1,4 +1,4 @@ -from config import clearbit_api +from .config import clearbit_api import requests, json, clearbit, os clearbit.key=clearbit_api @@ -6,17 +6,17 @@ def comDetail(domain): try: company=clearbit.Company.find(domain=domain,stream=True) if company != None: - print "\n-------------------------------------------------\n" - print "[+] Gathering Company Information from [clearbit]...\n" - print "Location-------------> "+str(company['name']) - print "Domain Name----------> "+str(company['domain']) - print "Location-------------> "+str(company['location']) - print "Email Address--------> "+str(company['site']['emailAddresses']) - print "Number of Employees--> "+str(company['metrics']['employees']) - print "Contact Number-------> "+str(company['phone']) - print "Description----------> "+str(company['description']) + print("\n-------------------------------------------------\n") + print("[+] Gathering Company Information from [clearbit]...\n") + print("Location-------------> "+str(company['name'])) + print("Domain Name----------> "+str(company['domain'])) + print("Location-------------> "+str(company['location'])) + print("Email Address--------> "+str(company['site']['emailAddresses'])) + print("Number of Employees--> "+str(company['metrics']['employees'])) + print("Contact Number-------> "+str(company['phone'])) + print("Description----------> "+str(company['description'])) else: - print "No information" + print("No information") except: - print "Try Again" + print("Try Again") diff --git a/modules/email.py b/modules/email.py index e837bc3..58449dd 100644 --- a/modules/email.py +++ b/modules/email.py @@ -1,6 +1,6 @@ from fullcontact import FullContact -from config import fullcontact_api -from person import perDetail +from .config import fullcontact_api +from .person import perDetail import json fc = FullContact(fullcontact_api) @@ -9,37 +9,37 @@ def fetchData(email_id): person = fc.person(email=email_id) data = person.json() try: - print "\n-------------------------------------------------\n" - print "[+] Gathering Personal Details from [FullContact]\n" - print "Full Name: ----> "+data['contactInfo']['fullName'] - print "Gender: -------> "+str(data['demographics']['gender']) - print "State: --------> "+str(data['demographics']['locationDeduced']['state']['name']) - print "Country: ------> "+str(data['demographics']['locationDeduced']['country']['name']) + print("\n-------------------------------------------------\n") + print("[+] Gathering Personal Details from [FullContact]\n") + print("Full Name: ----> "+data['contactInfo']['fullName']) + print("Gender: -------> "+str(data['demographics']['gender'])) + print("State: --------> "+str(data['demographics']['locationDeduced']['state']['name'])) + print("Country: ------> "+str(data['demographics']['locationDeduced']['country']['name'])) for u in data['contactInfo']['websites']: - print "Website: ------> "+u['url'] + print("Website: ------> "+u['url']) except: - print "Unavailable" + print("Unavailable") try: - print "\n\n[+] Gathering Employment Details from [FullContact]\n" + print("\n\n[+] Gathering Employment Details from [FullContact]\n") for org in data['organizations']: - print "Organisation Name: "+org['name']+" "+"\nJob Title: "+" "+org['title']+" "+"\nStart date: "+" "+org['startDate']+"\n" + print("Organisation Name: "+org['name']+" "+"\nJob Title: "+" "+org['title']+" "+"\nStart date: "+" "+org['startDate']+"\n") except: - print "Unavailable" + print("Unavailable") try: - print "\n\n[+] Gathering Social Accounts from [FullContact]\n" + print("\n\n[+] Gathering Social Accounts from [FullContact]\n") for soc in data['socialProfiles']: - print ""+soc['typeName'] + ": " +soc['url'] - print "\n-------------------------------------------------\n" + print(""+soc['typeName'] + ": " +soc['url']) + print("\n-------------------------------------------------\n") - print perDetail(email_id) + print(perDetail(email_id)) except: - print "Unavailable" - print "\n-------------------------------------------------\n" + print("Unavailable") + print("\n-------------------------------------------------\n") - print perDetail(email_id) + print(perDetail(email_id)) diff --git a/modules/ip.py b/modules/ip.py index 589178a..76fef9b 100644 --- a/modules/ip.py +++ b/modules/ip.py @@ -1,20 +1,20 @@ import shodan -from config import shodan_api +from .config import shodan_api api = shodan.Shodan(shodan_api) def ipEnum(IP): try: host = api.host(IP) - print "\n-------------------------------------------------\n" - print "[+] Gathering IP Address Information from [shodan]\n" - print "IP Address ----> "+str(host['ip_str']) - print "Country -------> "+str(host['country_name']) - print "City ----------> "+str(host['city']) - print "Organization --> "+str(host['org']) - print "ISP -----------> "+str(host['isp']) - print "Open ports ----> "+str(host['ports']) - print "\n-------------------------------------------------\n" + print("\n-------------------------------------------------\n") + print("[+] Gathering IP Address Information from [shodan]\n") + print("IP Address ----> "+str(host['ip_str'])) + print("Country -------> "+str(host['country_name'])) + print("City ----------> "+str(host['city'])) + print("Organization --> "+str(host['org'])) + print("ISP -----------> "+str(host['isp'])) + print("Open ports ----> "+str(host['ports'])) + print("\n-------------------------------------------------\n") except: - print "Unavailable" - print "\n-------------------------------------------------\n" + print("Unavailable") + print("\n-------------------------------------------------\n") diff --git a/modules/person.py b/modules/person.py index e3d6562..d7d8fb1 100644 --- a/modules/person.py +++ b/modules/person.py @@ -1,4 +1,4 @@ -from config import clearbit_api +from .config import clearbit_api import requests, json, clearbit, os clearbit.key=clearbit_api @@ -7,40 +7,40 @@ def perDetail(email_id): person=clearbit.Person.find(email=email_id,stream=True) if person != None: - print "\n[+] Gathering Personal Information from [clearbit]\n" - print "First Name: ---------> "+str(person['name']['givenName']) - print "Last Name: ----------> "+str(person['name']['familyName']) - print "Full Name: ----------> "+str(person['name']['fullName']) - print "Description: --------> "+str(person['bio']) - print "Website: ------------> "+str(person['site']) + print("\n[+] Gathering Personal Information from [clearbit]\n") + print("First Name: ---------> "+str(person['name']['givenName'])) + print("Last Name: ----------> "+str(person['name']['familyName'])) + print("Full Name: ----------> "+str(person['name']['fullName'])) + print("Description: --------> "+str(person['bio'])) + print("Website: ------------> "+str(person['site'])) - print "\n[+] Gathering Location Information from [clearbit]\n" - print "City:----------------> "+str(person['geo']['city']) - print "State: --------------> "+str(person['geo']['state']) - print "Country: ------------> "+str(person['geo']['country']) - print "Full Location: ------> "+str(person['location']) - print "Time Zone: ----------> "+str(person['timeZone']) - print "Latitude: -----------> "+str(person['geo']['lat']) - print "Longitude: ----------> "+str(person['geo']['lng']) + print("\n[+] Gathering Location Information from [clearbit]\n") + print("City:----------------> "+str(person['geo']['city'])) + print("State: --------------> "+str(person['geo']['state'])) + print("Country: ------------> "+str(person['geo']['country'])) + print("Full Location: ------> "+str(person['location'])) + print("Time Zone: ----------> "+str(person['timeZone'])) + print("Latitude: -----------> "+str(person['geo']['lat'])) + print("Longitude: ----------> "+str(person['geo']['lng'])) - print "\n[+] Gathering Employment Information from [clearbit]\n" - print "Company Name: -------> "+str(person['employment']['name']) - print "Title: --------------> "+str(person['employment']['title']) - print "Role: ---------------> "+str(person['employment']['role']) - print "Seniority: ----------> "+str(person['employment']['seniority']) - print "Domain: -------------> "+str(person['employment']['domain']) + print("\n[+] Gathering Employment Information from [clearbit]\n") + print("Company Name: -------> "+str(person['employment']['name'])) + print("Title: --------------> "+str(person['employment']['title'])) + print("Role: ---------------> "+str(person['employment']['role'])) + print("Seniority: ----------> "+str(person['employment']['seniority'])) + print("Domain: -------------> "+str(person['employment']['domain'])) - print "\n[+] Gathering Social Accounts Information from [clearbit]\n" - print "Facebook: -----------> "+str(person['facebook']['handle']) - print "Github: -------------> "+str(person['github']['handle']) - print "Twitter: ------------> "+str(person['twitter']['handle']) - print "LinkedIn: -----------> "+str(person['linkedin']['handle']) - print "Google Plus: --------> "+str(person['googleplus']['handle']) - print "\n-------------------------------------------------\n" + print("\n[+] Gathering Social Accounts Information from [clearbit]\n") + print("Facebook: -----------> "+str(person['facebook']['handle'])) + print("Github: -------------> "+str(person['github']['handle'])) + print("Twitter: ------------> "+str(person['twitter']['handle'])) + print("LinkedIn: -----------> "+str(person['linkedin']['handle'])) + print("Google Plus: --------> "+str(person['googleplus']['handle'])) + print("\n-------------------------------------------------\n") else: - print "No information" + print("No information") except: - print "Try Again" + print("Try Again") diff --git a/modules/url.py b/modules/url.py index 7fce83d..88f95dd 100644 --- a/modules/url.py +++ b/modules/url.py @@ -1,21 +1,21 @@ import shodan, socket -from config import shodan_api +from .config import shodan_api api = shodan.Shodan(shodan_api) def domEnum(IP): try: host = api.host(IP) - print "\n-------------------------------------------------\n" - print "[+] Gathering Domain Information from [shodan]\n" - print "IP Address ----> "+str(host['ip_str']) - print "Country -------> "+str(host['country_name']) - print "City ----------> "+str(host['city']) - print "Organization --> "+str(host['org']) - print "ISP -----------> "+str(host['isp']) - print "Open ports ----> "+str(host['ports']) - print "\n-------------------------------------------------\n" + print("\n-------------------------------------------------\n") + print("[+] Gathering Domain Information from [shodan]\n") + print("IP Address ----> "+str(host['ip_str'])) + print("Country -------> "+str(host['country_name'])) + print("City ----------> "+str(host['city'])) + print("Organization --> "+str(host['org'])) + print("ISP -----------> "+str(host['isp'])) + print("Open ports ----> "+str(host['ports'])) + print("\n-------------------------------------------------\n") except: - print "Unavailable" - print "\n-------------------------------------------------\n" + print("Unavailable") + print("\n-------------------------------------------------\n") diff --git a/modules/who_is.py b/modules/who_is.py index 60072e4..baa1b3b 100644 --- a/modules/who_is.py +++ b/modules/who_is.py @@ -4,22 +4,27 @@ def domWhois(WH): try: w = whois.whois(WH) - print "\n-------------------------------------------------\n" - print "[+] Gathering WHOIS Information from [" +str(w['whois_server']) + "] Server...\n" - print "Domain Name: ------> "+str(w['domain_name']) - print "Name: -------------> "+str(w['name']) - print "Organisation: -----> "+str(w['org']) - print "Emails: -----------> "+str(w['emails']) - print "Address: ----------> "+str(w['address']) - print "City --------------> "+str(w['city']) - print "Country: ----------> "+str(w['country']) - print "Zipcode: ----------> "+str(w['zipcode']) - print "Registrar: --------> "+str(w['registrar']) - print "Creation Date: ----> "+str(w['creation_date']) - print "Updation Date: ----> "+str(w['creation_date']) - print "Expiration Date: --> "+str(w['expiration_date']) - print "Name Server 1: ----> "+str(w.name_servers[0]) - print "Name Server 2: ----> "+str(w.name_servers[1]) - print "\n-------------------------------------------------\n" + print("\n-------------------------------------------------\n") + print("[+] Gathering WHOIS Information from [" +str(w['whois_server']) + "] Server...\n") + print("Domain Name: ------> "+str(w['domain_name'])) + print("Name: -------------> "+str(w['name'])) + print("Organisation: -----> "+str(w['org'])) + + for item in w['emails']: + print("Email: ------------> " + str(item)) + + print("Address: ----------> "+str(w['address'])) + print("City --------------> "+str(w['city'])) + print("Country: ----------> "+str(w['country'])) + print("Zipcode: ----------> "+str(w['zipcode'])) + print("Registrar: --------> "+str(w['registrar'])) + print("Creation Date: ----> "+str(w['creation_date'])) + print("Updation Date: ----> "+str(w['creation_date'])) + print("Expiration Date: --> "+str(w['expiration_date'])) + + for item in w['name_servers']: + print("Name Server: ------> "+str(item)) + + print("\n-------------------------------------------------\n") except: - print "Try Again" + print("Try Again") diff --git a/reconspider.py b/reconspider.py index 84b4645..7648aac 100644 --- a/reconspider.py +++ b/reconspider.py @@ -2,8 +2,15 @@ from modules import config import sys +if sys.version_info[0] < 3: + print(("\nYour System Python Version "+ str(sys.version_info[0]) + " isn't compatible with ReconSpider. Use Python 3.7")) + sys.exit() +else: + pass + + def banner(): - print """ + print(""" __________ _________ __ ___ \______ \ ____ ____ ____ ____ / _____/_____ |__| __| _/___________ | _// __ \_/ ___\/ _ \ / \ \_____ \\\____ \| |/ __ |/ __ \_ __ \\ @@ -25,10 +32,10 @@ def banner(): --email Gather information from email address. --domain Gather detail of website or organization. --help Show this help message and exit. - """ + """) # Checking if api keys are empty or not if (len(config.shodan_api) < 5 or len(config.clearbit_api) < 5 or len(config.fullcontact_api) < 5): - sys.exit("\n---------------Your Api keys are empty please ReRun the install.py file---------------\n") + sys.exit("\n---------------YOUR API KEYS ARE EMPTY, PLESE RE-INSTALL USING INSTALL.PY ---------------\n") else: banner() diff --git a/termux_install.py b/termux_install.py index 0a4d923..4e5fef0 100644 --- a/termux_install.py +++ b/termux_install.py @@ -1,6 +1,10 @@ +import sys import os -os.system('pkg install python2') -os.system('pip2 install python-whois clearbit shodan fullcontact.py requests') -os.system('python2 main/gen_api.py') -os.system('python2 reconspider.py') +if sys.version_info[0] > 2: + os.system('pkg install python3') + os.system('pip3 install python-whois clearbit shodan fullcontact.py requests') + os.system('python3 main/gen_api.py') + os.system('python3 reconspider.py') +else: + print(("Your System Python Version "+ str(sys.version_info[0]) + " isn't compatible with ReconSpider. Use Python 3.7")) \ No newline at end of file