Changes: - Added 80+ scripts with organized structure - payloads/ for third-party pentesting tools - pentesting/ for custom security scripts - Daily drivers remain flat for fast access - Converted wes() function to proper script - Removed .sh extensions from pentesting scripts - Cleaned up aliases (removed 31 redundant lines) - Added kanata/, build artifacts to gitignore - Removed old fre.sh scripts and empty a.out - Updated configs: helix, tmux, zsh, ulauncher, redshift Security: All sensitive data excluded via gitignore
109 lines
3.3 KiB
Python
Executable file
109 lines
3.3 KiB
Python
Executable file
#!/usr/bin/python3
|
||
|
||
# Information Security
|
||
# Certification Project #3
|
||
|
||
import socket
|
||
import common_ports
|
||
import re
|
||
|
||
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||
|
||
# Testing
|
||
# target = "www.freecodecamp.org"
|
||
# target = socket.gethostbyname("www.freecodecamp.org")
|
||
# target = "hi"
|
||
# port_range = [75,85]
|
||
|
||
# Testing Function
|
||
# get_open_ports(target, port_range)
|
||
|
||
|
||
def get_open_ports(target, port_range, verbose=None):
|
||
# Test if target is URL or IP address, if invalid give correct error message
|
||
|
||
target_ip = None
|
||
target_url = None
|
||
try:
|
||
ip_addr = socket.gethostbyname(target)
|
||
except:
|
||
if re.search('^[0-9]+', target):
|
||
print('Target:', target, 'is an ip address')
|
||
target_ip = True
|
||
print('Error: Invalid IP address')
|
||
exit()
|
||
elif re.search('^[A-Za-z]+', target):
|
||
print('Target:', target, 'is a url')
|
||
target_url = True
|
||
print('Error: Invalid hostname')
|
||
exit()
|
||
print('Error: Invalid hostname or IP address')
|
||
exit()
|
||
|
||
# Creates list of ports from starting and ending ports given
|
||
ports_list = list()
|
||
for port in port_range:
|
||
while port <= port_range[1]:
|
||
ports_list.append(port)
|
||
port += 1
|
||
|
||
# Connects (if url/ip is valid) and checks for open ports
|
||
open_ports = []
|
||
# for each port in list, connect
|
||
for port in ports_list:
|
||
print('Checking port:', port, 'for target:', target)
|
||
# if port is open, add to open_ports
|
||
try:
|
||
s.connect_ex((target, port)) # == 0
|
||
s.settimeout(5)
|
||
open_ports.append[port]
|
||
print('Port', port, 'is open')
|
||
print('Open ports:', open_ports)
|
||
|
||
# if it can't connect, display correct output
|
||
except socket.error or socket.gaierror or socket.getaddrinfo:
|
||
if target_ip:
|
||
print('Error: Invalid IP address')
|
||
exit()
|
||
elif target_url:
|
||
print('Error: Invalid hostname')
|
||
exit()
|
||
except:
|
||
print('Port', port, 'is closed')
|
||
continue
|
||
print('\n* Finished scanning target *')
|
||
if not open_ports:
|
||
print('No open ports found on target', target)
|
||
else:
|
||
print('Open ports found:', open_ports, 'on', target)
|
||
|
||
# Output
|
||
print(f'\n* Scanning Target: {target} ({ip_addr}) *')
|
||
print('- Scanning ports:', port_range[0], 'to', port_range[-1])
|
||
|
||
# Verbose Output
|
||
# ports = tuple()
|
||
# service = dict()
|
||
serv_d = common_ports.ports_and_services
|
||
# for each port in open_ports
|
||
svcs_dict = {port: serv_d[port] for port in open_ports}
|
||
# svcs_list = [ v for k,v in svcs_dict.items() ]
|
||
|
||
if verbose:
|
||
print(f'\nOpen ports for {target} ({ip_addr})')
|
||
print('PORT SERVICE')
|
||
# for port in open_ports:
|
||
# print(f'{port} {common_ports.ports_and_services[port]}')
|
||
# print(f'{port} {common_ports.ports_and_services(port)}')
|
||
# for opts in service:
|
||
for port, service in svcs_dict.items():
|
||
print(str(port) + ' ' + str(service))
|
||
# return print('{} {}'.format(port, service))
|
||
return
|
||
|
||
elif not verbose:
|
||
print('Open Ports:', open_ports)
|
||
s.close()
|
||
return
|
||
return (open_ports)
|
||
# return(target, port_range)
|