Tell us what’s happening:
I close my socket with the following line in a for loop:
s.close()
But after closing it the socket is no longer useful for the rest of the for loop (for the rest of the for loop, connect_ex() returns the number 10038, which is code for:
Socket operation on nonsocket.
An operation was attempted on something that is not a socket. Either the socket handle parameter did not reference a valid socket, or for select , a member of an fd_set was not valid.
How do I close the socket and reopen it cleanly to scan the next port?
Thanks for your time
Jaime
Your code so far
import socket
def get_open_ports(target_URL, port_range):
target_ip = socket.gethostbyname(target_URL)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(10)
for i in range(port_range[0], port_range[1]+1, 1):
connection_num = s.connect_ex((target_ip, i))
if connection_num != 0:
print(connection_num)
print("The port is closed", i)
else:
print(connection_num)
print("The port is open", i)
s.close()
print('closed')
# Verbose called with host name -- multiple ports returned
ports = get_open_ports("scanme.nmap.org", [20, 80])
print(ports + '\n')
Your browser information:
User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36
Challenge: Port Scanner
Link to the challenge: