Python 2.7 (socket) - 如果上一个端口上发生socket.error,如何在下一个端口上继续



我正在研究简单的扫描脚本,该脚本扫描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 "33[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:rn")
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()

终于,我做到了。我将异常添加到循环中。因此,现在如果发生错误,它将通过端口并继续扫描下一个端口。

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:rn")                                            
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  

最新更新