我试过在网上搜索不同的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上。
2017-09-19
saniboy
+0
由于UNIX是专为网络和网络是专为UNIX,任何品牌的UNIX,包括基于Linux的系统,可以说是在选择时更有优势网络平台。这就是说,这里可能还有别的东西在工作。你的窗口盒子是否启用了防火墙?它可以阻止通知(未过滤)封闭端口的RST,ACK分组。 –
+0
@spectras我的笔记本电脑上的AV是禁用的,netsh advfirewall显示allprofiles显示所有防火墙都关闭。我想认为必须有一些东西,但是我很难找到它 –
+0
你能提供一个简化的,自包含的基准测试和两个操作系统的数字吗?有很多方法可以进行端口扫描(阻塞vs非阻塞,并行vs顺序,连接vs syn),所以最好有一个具体的例子加上实际的数字。 –