Python帮助-这不是';t循环?(插座)
我在这里的代码有问题,当我输入一个端口范围时,当它涉及到一个关闭的端口时,程序只会暂停。当它有开放的端口时就可以了。有人能帮忙吗Python帮助-这不是';t循环?(插座),python,sockets,Python,Sockets,我在这里的代码有问题,当我输入一个端口范围时,当它涉及到一个关闭的端口时,程序只会暂停。当它有开放的端口时就可以了。有人能帮忙吗 #!/usr/bin/env python import sys import socket import subprocess address = raw_input("Which IP would you like to scan? ") r1 = input("What starting IP would you like to scan? i.e 10:
#!/usr/bin/env python
import sys
import socket
import subprocess
address = raw_input("Which IP would you like to scan? ")
r1 = input("What starting IP would you like to scan? i.e 10: ")
r2 = input("Which ending IP would you like to scan? i.e 300: ")
print "This can take a while for big port ranges. Scan commencing on", address
for port in range(r1,r2):
sock=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
if(sock.connect_ex((address,port))==0):
print "Port " , port, "is open"
sock.close()
print " "
print "Scan completed sucessfully"
else:
print " "
print "Scan completed, No ports found!"
问题是(在大多数防火墙下),远程计算机故意不响应进入封闭端口的TCP连接数据包——如果响应了,您的connect_ex()调用将很快失败(errno=ECONNREFUSED)。这将允许您快速继续尝试下一个端口,这不是防火墙设计者想要鼓励的
因此,它们只是忽略传入的TCP数据包,而您的计算机无法确定远程计算机是否故意忽略您,或者是否只是响应缓慢
因此,您真正能做的就是为自己选择一个“合理”的超时,并假设在该超时期间未成功连接的任何TCP连接都必须指示一个防火墙端口
至于如何在Python中实现这一点,它非常简单;有关详细信息,请参阅。您的缩进似乎已关闭。由于它可以完成扫描,因此现在效果更好,谢谢!尽管出于某种原因,它只会接收一个开放端口。例如,端口80和153打开。如果我扫描79-160,它将拾取80,仅此而已。有什么想法吗?当您使用完套接字后,是否正在调用sock.close()?也许打开的套接字会堆积起来,直到你的程序不能再创建更多。。。