python 中编写的端口扫描器无法正常显示输出

Port Scanner written in python does not display output normally

所以我尝试在python3中写一个端口扫描器 这是我的代码:

import sys #allows us to enter command line arguments, among other things
import socket
from datetime import datetime

if len(sys.argv) == 2:
    target = socket.gethostbyname(sys.argv[1]) #Translate a hostname to IPv4
else:
    print("Invalid amount of arguments.")
    print("Syntax: python3 scanner.py <ip>")
    sys.exit()

#Add a banner
print("-" * 50)
print("Scanning target "+target)
print("Time started: "+str(datetime.now()))
print("-" * 50)
try:
    for port in range(50,85):
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        socket.setdefaulttimeout(1)
        result = s.connect_ex((target,port)) #returns error indicator
        print("Checking port {}".format(port))
        if result == 0:
            print("Port {} is open".format(port))
        s.close()

except KeyboardInterrupt:
    print("\nExiting program.")
    sys.exit()

except socket.gaierror:
    print("Hostname could not be resolved.")
    sys.exit()

except socket.error:
    print("Couldn't connect to server.")
    sys.exit()

使用 Kali Linux 2020.2,最新版本 python,

我执行python3 scanner.py google.com

预计扫描仪在扫描过程中会一一显示"Checking port 50"、"Checking port 51"。

如果它发现任何一个端口是打开的,它会在 "Checking port xx"

之后显示 "Port xx is open"

但是,我的扫描仪卡在初始横幅上。

最终当它完成扫描时,它会一次性显示所有输出。

谁能告诉我如何解决这个问题?

只需在代码中切换以下行:

result = s.connect_ex((target,port)) #returns error indicator
print("Checking port {}".format(port))

变成:

print("Checking port {}".format(port))
result = s.connect_ex((target,port)) #returns error indicator