Write the Logic of your Program in main()
In your main() method, read the value of the domain passed in by the user. Then obtain the IP address for the domain. Finally, obtain the data about the domain from the Shodan API.
Once you have the details of the domain, print the information about the CPEs and the hostnames to the screen.
If your program encounters an error either in resolving the domain or obtaining information from the API, write a simple error message to the screen and end the program.
Commit and Branch!
Once you have tested your index.py script, do the following:
- Add and commit your files using Git
- Remember to add the standard Python .gitignore file!
- (Optional) Push all your branches to GitHub.com with the command git push origin –all
test your code with these commands
- python index.py -d purdue.edu
- python index.py -d blah
here is the instuction
The first command should bring back information about the CPEs on the Purdue website and the (long) list of hostnames associated with that domain.
The second command should fail gracefully, as there is no domain named “blah”
here is the code
import argparse
import requests
import socket
import json
def get_ip_address(domain):
try:
ip_address = socket.gethostbyname(domain)
return ip_address
except socket.error as e:
print(f"Error resolving domain: {e}")
return None
def shodan_api_request(api_key, ip_address):
base_url = "https://api.shodan.io/shodan/host/"
try:
# Make the API request with the correct key
response = requests.get(f"{base_url}{ip_address}?key={api_key}")
response.raise_for_status()
# Check for Forbidden status (HTTP 403)
if response.status_code == 403:
print("API key does not have permission to access this resource.")
return None
return response.json()
except requests.exceptions.RequestException as e:
print(f"Error in Shodan API request: {e}")
return None
def main():
parser = argparse.ArgumentParser(description="Retrieve information about a domain from Shodan.")
parser.add_argument("-d", "--domain", required=True, help="Domain to look up")
args = parser.parse_args()
domain = args.domain
# Replace 'your_actual_api_key_here' with your actual Shodan API key
shodan_api_key = 'mIanS6wnOSmZuiUvuyXq4nMWCXQmoVNZ'
ip_address = get_ip_address(domain)
if ip_address:
shodan_data = shodan_api_request(shodan_api_key, ip_address)
if shodan_data:
cpe_info = shodan_data.get("data", [])
hostnames = shodan_data.get("hostnames", [])
print("\nHostnames:")
for hostname in hostnames:
print(hostname)
else:
print("No data received from Shodan API.")
else:
print("Exiting program due to previous error.")
if __name__ == "__main__":
main()
please fix it cpe and take a look a picture what I attached it should display like it.