Write the Logic of your Program in main()

Database System Concepts
7th Edition
ISBN:9780078022159
Author:Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Publisher:Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Chapter1: Introduction
Section: Chapter Questions
Problem 1PE
icon
Related questions
Question
100%

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:

 

  1. Add and commit your files using Git
  2. Remember to add the standard Python .gitignore file!
  3. (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. 
(cit3090Benv) dev/domain_explorer & python index.py -d purdue.edu
There are 2 CPES for domain purdue.edu
cpe:/a: apache:http_server
cpe:/a: jquery: jquery
There are 112 hostnames for domain purdue.edu
www.hart.purdue.edu
hort.purdue.edu
www.vet.purdue.edu
snas.purdue.edu
spider.entn.purdue.edu
www.irb.purdue.edu
esports.purdue.edu
iseb.ceris.purdue.edu
decision support.ccris.purdue.edu
www.evbatteryportal.org
indianagearup.org
pcrd.purdue.edu
www.student-args.purdue.edu
www.extension.entn.purdue.edu
Transcribed Image Text:(cit3090Benv) dev/domain_explorer & python index.py -d purdue.edu There are 2 CPES for domain purdue.edu cpe:/a: apache:http_server cpe:/a: jquery: jquery There are 112 hostnames for domain purdue.edu www.hart.purdue.edu hort.purdue.edu www.vet.purdue.edu snas.purdue.edu spider.entn.purdue.edu www.irb.purdue.edu esports.purdue.edu iseb.ceris.purdue.edu decision support.ccris.purdue.edu www.evbatteryportal.org indianagearup.org pcrd.purdue.edu www.student-args.purdue.edu www.extension.entn.purdue.edu
Expert Solution
steps

Step by step

Solved in 4 steps with 5 images

Blurred answer
Knowledge Booster
Fundamentals of Boolean Algebra and Digital Logics
Learn more about
Need a deep-dive on the concept behind this application? Look no further. Learn more about this topic, computer-science and related others by exploring similar questions and additional content below.
Recommended textbooks for you
Database System Concepts
Database System Concepts
Computer Science
ISBN:
9780078022159
Author:
Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Publisher:
McGraw-Hill Education
Starting Out with Python (4th Edition)
Starting Out with Python (4th Edition)
Computer Science
ISBN:
9780134444321
Author:
Tony Gaddis
Publisher:
PEARSON
Digital Fundamentals (11th Edition)
Digital Fundamentals (11th Edition)
Computer Science
ISBN:
9780132737968
Author:
Thomas L. Floyd
Publisher:
PEARSON
C How to Program (8th Edition)
C How to Program (8th Edition)
Computer Science
ISBN:
9780133976892
Author:
Paul J. Deitel, Harvey Deitel
Publisher:
PEARSON
Database Systems: Design, Implementation, & Manag…
Database Systems: Design, Implementation, & Manag…
Computer Science
ISBN:
9781337627900
Author:
Carlos Coronel, Steven Morris
Publisher:
Cengage Learning
Programmable Logic Controllers
Programmable Logic Controllers
Computer Science
ISBN:
9780073373843
Author:
Frank D. Petruzella
Publisher:
McGraw-Hill Education