Python令我失望。我搜索了一个代码进行端口扫描,发现了这个。跑了。我用来扫描的程序。根据python代码它非常快。代码如下。
你能帮我加速我的代码吗?我有什么用呢?。
#!/usr/bin/env python
from socket import *
if __name__ == '__main__':
target = raw_input('Enter host to scan: ')
targetIP = gethostbyname(target)
print 'Starting scan on host ', targetIP
#scan reserved ports
for i in range(20, 1025):
s = socket(AF_INET, SOCK_STREAM)
result = s.connect_ex((targetIP, i))
if(result == 0) :
print 'Port %d: OPEN' % (i,)
s.close()
答案 0 :(得分:6)
你们一个接一个地打开千个连接。这必须至少花费1000次到服务器的往返时间。 Python与它无关,这只是网络的一个非常基本的事实。
你可以做些什么来加快速度,使用线程或基于事件的框架(如twisted)来并行打开连接。
答案 1 :(得分:5)
呃,这不是Python慢。只是你想要同时连接到1000个端口。
也许你可以让它们并行连接(即连接是非阻塞的),但我认为在你这样做之前你应该学习更多关于网络编程的知识。
答案 2 :(得分:4)
Python 都很慢。但是对于大多数代码而言,你注意的并不是那么慢。这个脚本花费的时间不会花在Python解释器上,而是等待I / O完成。尽管如此,网络I / O.你创建了一千个连接并对每个连接进行了一些嗅探,你一次只做一个连接 - 无论你用什么语言编写它都需要很长时间。