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. 
``` 
(cit399@env) dmv/domain_explorer % python index.py -l purdue.edu
There are 2 CPEs for domain purdue.edu
cpe:/a:apache:http_server
cpe:/a:jquery:jquery
There are 17 hostnames for domain purdue.edu
www.purdue.edu
hort.purdue.edu
pwis.purdue.edu
shop.purdue.edu
snr.purdue.edu
spider.entm.purdue.edu
gcs.esri.purdue.edu
decision-support.ceris.purdue.edu
www.batteryportal.org
cadcam.purdue.edu
purduesp.presswise.com
ag.purdue.edu
www.student-orgs.purdue.edu
www.extension.entm.purdue.edu
```

This output from a terminal window shows the results of running a Python script named `index.py` from the `dmv/domain_explorer` directory. The script checks for Common Platform Enumerations (CPEs) and hostnames associated with the domain `purdue.edu`.

- **CPEs for Domain purdue.edu:**
  - Apache HTTP Server (`cpe:/a:apache:http_server`)
  - jQuery (`cpe:/a:jquery:jquery`)

- **Hostnames for Domain purdue.edu:**
  - www.purdue.edu
  - hort.purdue.edu
  - pwis.purdue.edu
  - shop.purdue.edu
  - snr.purdue.edu
  - spider.entm.purdue.edu
  - gcs.esri.purdue.edu
  - decision-support.ceris.purdue.edu
  - www.batteryportal.org
  - cadcam.purdue.edu
  - purduesp.presswise.com
  - ag.purdue.edu
  - www.student-orgs.purdue.edu
  - www.extension.entm.purdue.edu
```
Transcribed Image Text:``` (cit399@env) dmv/domain_explorer % python index.py -l purdue.edu There are 2 CPEs for domain purdue.edu cpe:/a:apache:http_server cpe:/a:jquery:jquery There are 17 hostnames for domain purdue.edu www.purdue.edu hort.purdue.edu pwis.purdue.edu shop.purdue.edu snr.purdue.edu spider.entm.purdue.edu gcs.esri.purdue.edu decision-support.ceris.purdue.edu www.batteryportal.org cadcam.purdue.edu purduesp.presswise.com ag.purdue.edu www.student-orgs.purdue.edu www.extension.entm.purdue.edu ``` This output from a terminal window shows the results of running a Python script named `index.py` from the `dmv/domain_explorer` directory. The script checks for Common Platform Enumerations (CPEs) and hostnames associated with the domain `purdue.edu`. - **CPEs for Domain purdue.edu:** - Apache HTTP Server (`cpe:/a:apache:http_server`) - jQuery (`cpe:/a:jquery:jquery`) - **Hostnames for Domain purdue.edu:** - www.purdue.edu - hort.purdue.edu - pwis.purdue.edu - shop.purdue.edu - snr.purdue.edu - spider.entm.purdue.edu - gcs.esri.purdue.edu - decision-support.ceris.purdue.edu - www.batteryportal.org - cadcam.purdue.edu - purduesp.presswise.com - ag.purdue.edu - www.student-orgs.purdue.edu - www.extension.entm.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.
Similar questions
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