我正在构建端口扫描程序((与问题无关,只是解释背景)),我知道主机的IP,但不知道哪些端口是打开的。因此,扫描。
它处于开发的早期阶段,因此错误处理很糟糕,但还不足以让Python解释为什么这样做。
它试图连接到123.456.7.8, 1
。显然这是一个荒谬的端口,所以它会抛出一个错误。错误是No Route to Host
或者这样,对吗?错误!它取而代之的是Operation Timed Out!
。
好的,如果我的计算不正确,让我们增加超时。
。 .. ... ....所有这一切都是冲洗并重复!
大约20分钟后,超时时间为20秒,仍然超时。真?为什么python会引发timed out
错误,而不是No route to host!
或类似错误?
需要 来区分超时和连接失败,因为 是迟到与无处之间的差异。这使我无法这样做,创造了一个无限循环的快点等待。
我该怎么办?我要去哪里?
答案 0 :(得分:0)
Python socket
模块是围绕平台套接字API的瘦包装器。这个问题与Python无关。
您没有必要收到No Route to Host
错误。此外,防火墙通常会丢弃可能在代码中显示为超时错误的已接收数据包(对于已过滤的端口)。请参阅Drop vs. Reject(忽略结论,但请阅读正在发生的事情的解释)。
要解决此问题,请创建多个并发连接并设置固定超时或使用原始套接字并自行发送数据包(您可以use scapy
调查行为)。