2016-05-20 2 views
1

Я пытаюсь создать простой сканер портов в python, который пытается увидеть, открыты ли порты 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.

Смежные вопросы