gpt4 book ai didi

python - 如何判断我的端口扫描仪是否正常工作?

转载 作者:行者123 更新时间:2023-12-01 02:55:51 29 4
gpt4 key购买 nike

我正在制作一个端口扫描器来检查端口是打开还是关闭,但我确信它不起作用,因为它列出了每个端口都已关闭,即使是我专门打开的端口只是为了检查它是否正在工作。谁能看出我的代码有什么问题吗?

    if  userChoice == "1":
# code for option 1
print("You selected Port Scan Tool")
loop = 0
subprocess.call('cls', shell=True)
remoteServer = input("Enter a remote host to scan: ")
start=input("Enter starting port number: ")
start = int(start)
end=input("Enter ending port number: ")
end = int(end)
remoteServerIP = socket.gethostbyname(remoteServer)

# Print a nice banner with information on which host we are about to scan
print ("-" * 60)
print("Please wait, scanning remote host", remoteServerIP)
print("-" * 60)

# Check what time the scan started
t1 = datetime.now()
timestr = time.strftime("%d.%m.%Y-%H.%M.%S")# creates time stamp on text file

try:
textFileLocation = timestr + " - Port Scan Results.txt"# creates and names text file
for port in range(start, end): # lets user select range
sock = (socket.socket(socket.AF_INET, socket.SOCK_STREAM))
result = sock.connect_ex((remoteServerIP, port))
if result == 0:
print("Port {}: \t Open".format(port))
#print("Port {}: \t Closed".format(port))
#print("Port {} \t Closed".format(port))
textFileLocation = timestr + " - Port Scan Results.txt"
textFile = open(textFileLocation, "a")
textToWrite = "Open: Port %d\n" % port
textFile.write(textToWrite)
textFile.close()
else:
print("Port {}: \t Closed".format(port))
textFileLocation = timestr + " - Port Scan Results.txt"
textFile = open(textFileLocation, "a")
textToWrite = "Closed: Port %d\n" % port
textFile.write(textToWrite)
textFile.close()
sock.close()

最佳答案

这仅测试是否有任何程序正在监听该端口。

要查看这是否有效,请首先删除 try block 以查看返回哪个错误。然后在异常处理中使用正确的错误,即如果您的计算机不在网络上,则尝试将失败以及无法连接时。此外,您还必须引入超时,以便套接字不会在尝试连接时挂起。

要查看您的代码是否对目标计算机执行任何操作,请激活那里的防火墙并将其设置为通知您是否有人正在执行您所做的操作。如果您的路由器/交换机阻止网络上的端口扫描,您的代码也可能会失败。您还应该检查其防火墙设置。

您的代码中还缺少 except block ,并且 try 无论如何都在错误的位置。您必须测试每个连接:

for x in range(...):
try:
s = socket.socket(...)
s.connect(...)
s.close()
except: pass

尽管您应该使用例如:

except socket.SocketError as error:

然后在存储异常的变量 error 中检查错误号等。

哦,顺便说一句,socket.socket.connect() 返回 None,所以你的检查将始终为 False。这不是 C,这是 Python。

>>> ...
>>> result = sock.connect(...)
>>> print result
None

Try- except 会告诉您连接是通过还是失败,并提供更多信息。

关于python - 如何判断我的端口扫描仪是否正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44228083/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com