2011-04-15 97 views
-3

Python令我失望。我搜索了一个端口扫描的代码,发现了这个。运行它。我用于扫描的程序。根据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() 

回答

5

呃,这不是Python很慢。这只是你试图同时连接到1000个端口。也许你可以让它们并行连接(即使连接是非阻塞的),但是我认为在你这样做之前你应该多学习一些关于网络编程的知识。

4

Python 大多数标准都很慢。但是对于大多数代码来说,它并不是很慢。这个脚本所花费的时间并不花费在Python解释器中,它等待I/O完成。网络I/O尽管如此。您正在创建千个连接,并对每个连接进行一些嗅探,并且一次只进行一次连接 - 无论您使用何种语言编写,都需要很长时间。

6

您正在打开一千个连接相继。这必须至少服务器往返时间的1000倍。 Python与它无关,这只是网络的一个非常基本的事实。

你可以通过使用线程或基于事件的框架(如扭曲)并行地打开连接。