ich code mir gerade einen kleinen Portscanner in Python3.0 und wollte an dieser Stelle mal die Threads so n bisschen ausprobieren: Jeder Thread ist für einen bestimmten Portbereich zuständig und speichert das Ergebnis in eine globale Liste. Damit immer nur ein Thread auf die Liste zugreifen kann, habe ich die Liste mit _thread.lock gesperrt. Nur bricht er jedesmal an dieser Stelle mit einer Exception ab.
Kann mir bitte jemand sagen, warum?
Code: Alles auswählen
# Imports
import socket
import _thread
def portscan(hostIP, startPort, endPort):
for i in range(startPort, endPort):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
res = s.connect_ex((hostIP, i))
if res == 0:
answer = "Port "+str(i)+" is open"
else:
answer = "Port "+str(i)+" is closed"
global liste
_thread.lock.acquire()
liste.append(answer)
_thread.lock.release()
s.close()
liste = {}
_thread.start_new_thread(portscan, ("127.0.0.1", 1, 10))
_thread.start_new_thread(portscan, ("127.0.0.1", 11, 20))
_thread.start_new_thread(portscan, ("127.0.0.1", 21, 30))
for i in liste:
print(i)
Mit freundlichen Grüßen,
Sebastian