套接字超时;解释



我正在构建一个端口扫描程序((与问题无关,只是解释背景((,我知道主机的IP,但不知道打开了哪些端口。因此,扫描。

它处于开发的早期阶段,所以错误处理很糟糕,但还不够糟糕,无法解释为什么 Python 会这样做。

它尝试连接到,比如说,123.456.7.8, 1 .显然,打开端口是一个荒谬的端口,因此它会抛出错误。错误是No Route to Host之类的,对吧?错!而是Operation Timed Out!.

好的,让我们增加超时,以防我的计算不正确。

..........所做的只是冲洗并重复!

大约 20 分钟后,超时为 20 秒,并且仍然超时。真?为什么python会引发timed out错误,而不是No route to host!或类似的错误?

我需要区分超时和连接失败,因为延迟和无处之间是区别的。这阻止了我这样做,创造了一个匆忙等待的无限循环。

我该怎么办?我该去哪里?

Python socket 模块是围绕平台套接字 API 的薄包装器。这个问题与 Python 无关。

没有必要得到No Route to Host错误。此外,防火墙通常只是丢弃收到的数据包(对于过滤的端口(,这些数据包可能会在代码中表现为超时错误。请参阅丢弃与拒绝(忽略结论,但阅读正在发生的事情的解释(。

要解决此问题,请建立多个并发连接并设置固定超时,或者使用原始套接字并自行发送数据包(您可以使用 scapy 来调查行为(。

相关内容

  • 没有找到相关文章

最新更新