Python 2.7 (сокет) - как продолжить работу на следующем порту, если на предыдущем порту произошла ошибка socket.error - PullRequest
0 голосов
/ 02 мая 2018

Я работаю над простым скриптом сканирования, который сканирует все открытые порты из списка 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()

1 Ответ

0 голосов
/ 02 мая 2018

Наконец-то я это сделал. Я добавляю исключение в цикл. Итак, теперь, если произойдет ошибка, он пройдет через порт и продолжит сканирование на следующем порту.

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))                                                 

            try:                                                                                
                if result == 0:                                                                 
                    byte = str.encode("Server:\r\n")                                            
                    sock.send(byte)                                                             
                    socket.setdefaulttimeout(2)                                                 
                    ans = sock.recv(512)                                                        
                    print h, ("......port " + '{0}'.format(port) + "/Open/" + '{0}'.format(ans))
                    sock.close()                                                                
            except socket.error:                                                                
                print                                                                           
                print ("Couldn't connect to server " + h + " port: "'{0}'.format(port))         
                pass                                                                            

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")                                                        
    pass  
...