2011-04-15 166 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與它無關,這只是網絡的一個非常基本的事實。

你可以通過使用線程或基於事件的框架(如扭曲)並行地打開連接。

相關問題