我試過在網上搜索不同的python文檔,論壇和其他人的問題,但我還沒有找到任何人有這個相同的問題。爲什麼Windows上的python套接字掃描比在linux上慢很多?
我的腳本的典型樣子是我將創建一個套接字連接,嘗試連接到1-9999端口,並且只會在端口打開時告訴我。當我在Windows上運行它時,在移動到下一個端口之前需要1秒鐘的時間才能掃描一個端口(每個端口60個端口/米〜16.5米)。當我在linux上運行相同的腳本時,它將非常快速地遍歷所有9999端口,同時仍然返回相同的期望結果。
我一直希望能夠構建交叉兼容的工具,但是看起來linux 只是在我的網絡需求方面更好的操作系統?我有兩個在我的處置,所以我不介意使用一個在另一個。我只想知道是否有任何可以使端口掃描在兩個操作系統上都同樣快的操作,否則我不會花費太多的時間在Windows上進行構建。
無論我在哪個網絡,速度的差異都是一樣的。
我的問題是:
•爲什麼在給定相同函數的情況下,與Windows相比,windows的性能如此不同?
•有沒有什麼辦法可以像使用linux一樣快速地使用套接字掃描端口?
- 編輯 -
這裏的一塊,我用它來檢查端口
def whole_scan(Host_):
service = ''
host = Host_
max_port = 9999
min_port = 1
def scan_host(host, port, r_code = 1):
try:
s = socket(AF_INET, SOCK_STREAM)
code = s.connect_ex((host, port))
if code == 0:
r_code = code
s.close()
except Exception, e:
pass
return r_code
hostip = gethostbyname(host)
for port in range(min_port, max_port):
try:
response = scan_host(host,port)
if response == 0:
try:
service = getservbyport(port)
except Exception, e:
service = 'n/a'
print(" |--port: %d\t%s" % (port,service.upper()))
except Exception, e:
pass
我也驗證了我的防火牆被禁用,並且增加價值到我的註冊表來禁用連接上的限制表現沒有變化。我在Windows 10上。
由於UNIX是專爲網絡和網絡是專爲UNIX,任何品牌的UNIX,包括基於Linux的系統,可以說是在選擇時更有優勢網絡平臺。這就是說,這裏可能還有別的東西在工作。你的窗口盒子是否啓用了防火牆?它可以阻止通知(未過濾)封閉端口的RST,ACK分組。 – spectras
@spectras我的筆記本電腦上的AV是禁用的,netsh advfirewall顯示allprofiles顯示所有防火牆都關閉。我想認爲必須有一些東西,但是我很難找到它 – saniboy
你能提供一個簡化的,自包含的基準測試和兩個操作系統的數字嗎?有很多方法可以進行端口掃描(阻塞vs非阻塞,並行vs順序,連接vs syn),所以最好有一個具體的例子加上實際的數字。 –