2016-05-20 118 views
1

我想在python中創建一個簡單的portscanner--它試圖查看是否打開0-10000端口,然後將它們附加到數組中。但是,即使我打開一個端口,它仍然不能識別該端口是否打開。找不到開放端口python

感謝

代碼:

import socket 
import threading 

ip = "127.0.0.1" 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #socket.AF_INET, socket.SOCK_STREAM 
open_ports = [] 
def porttry(ip, port): 
    try: 
     s.connect((ip, port)) 
     print("Port opened on %d" % port) 
     open_ports.append(port) 
     return True 
    except: 

     return None 

for port in range(0, 10000): 
    threading.Thread(target=porttry,args=(ip,port)).start() 
    if port%100==0: 
     print(port) 
+0

你還看過 - > https://libnmap.readthedocs.io/en/latest/這是順便做這個順便的方法。 –

+0

@NishantSingh我有,但我想知道爲什麼這是錯的反正。 –

回答

1

爲使該代碼工作,你需要單獨創建套接字爲每個連接(每個線程)。

以下工作:

import socket 
import threading 

ip = "127.0.0.1" 
open_ports = [] 
def porttry(ip, port): 
    try: 
     s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
     s.connect((ip, port)) 
     print("Port opened on %d" % port) 
     open_ports.append(port) 
     s.close() 
     return True 
    except: 
     return False 

for port in range(0, 10000): 
    threading.Thread(target=porttry, args=(ip,port)).start() 
    if port % 100 == 0: 
     print(port) 

它可以檢測端口,例如,nc -l 1777打開。