我有一个程序可以扫描远程主机上的开放端口。 完成扫描需要很长时间。我想让它快速工作。
这是我的代码:
1.0
你们其中一个Python向导可以帮助我吗? 提前谢谢。
答案 0 :(得分:0)
您可以在套接字上设置超时,以便在关闭的端口上花费很多时间。我还会使用线程并允许用户指定他们想要运行的线程数。这里是一些代码的链接,您可以使用线程模块String#split(String)
#!/usr/bin/env python
'''
A simple port scanner.
'''
import socket
def scan_host(host, **options):
'''
Scan a host for open ports.
'''
options.setdefault('timeout', 0.30)
options.setdefault('port_range', (1, 1024))
timeout = options.get('timeout')
port_range = options.get('port_range')
host_ip = socket.gethostbyname(host)
print("Please wait, scanning remote host {} : {}".format(host, host_ip))
for port in xrange(*port_range):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(timeout)
result = sock.connect_ex((host_ip, port))
if result == 0:
print "Port: {} Open".format(port)
sock.close()
if __name__ == '__main__':
scan_host('www.google.com', timeout=0.30, port_range=(1, 8000))
答案 1 :(得分:-1)
这个程序变得太简单了。它一次只监控一个端口,并且在一个端口上查看它是否正在监听需要很长时间。因此,如果无法连接,请尝试缩短收听的时间,通过在"期望:"下设置该数字的递归限制来认为它是关闭的。在run()。
就像这样,
try:
# connect to the given host:port
result = sock.connect_ex((hostIP, port))
if result == 0:
print "%s:%d Open" % (hostIP, port)
sock.close()
except: #pass
sock.recurse += 1
if sock.recurse < sock.limit:
sock.run()
else:
print "%s:%d Closed" % (hostIP, port)
还有其他方法可以通过导入threading()模块来提高效率,这可以用来同时关注大量套接字。
这是关于线程的文档。
参考这个, https://docs.python.org/2/library/threading.html#
希望能帮到你。 一切顺利。