Я работаю над простым скриптом сканирования, который сканирует все открытые порты из списка IP-адресов и проверяет их баннеры.
У меня проблема, когда socket.error
происходит на одном из портов, скрипт завершается и не продолжает захват баннера на следующем порту, а также на следующем IP из списка.
Как я могу изменить свой сценарий, чтобы в случае возникновения socket.error
он продолжал сканировать, а не завершать работу?
print "+" * 40
starting_time = time.time()
print " Scanning started at %s" % (time.strftime("%I:%M:%S %p"))
print "+" * 40
print "+" * 40
ip_parts1 = host.split('.')
h = ip_parts1[0] + '.' + ip_parts1[1] + '.' + ip_parts1[2] + '.' + ip_parts1[3]
print "\033[1;31m"
lst1 = map_network0()
try:
for h in lst1[:]:
for port in range(1, 1024):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
result = sock.connect_ex((h, port))
if result == 0:
byte = str.encode("Server:\r\n")
sock.send(byte)
ans = sock.recv(512)
socket.setdefaulttimeout(2)
print h, ("......port " + '{0}'.format(port) + "/Open/" + '{0}'.format(ans))
sock.close()
except KeyboardInterrupt:
print ("Scanner aborted")
sys.exit()
except socket.gaierror:
print ('Hostname could not be resolved. Exiting')
sys.exit()
except socket.error:
print ("Couldn't connect to server")
sys.exit()