【问题标题】:socket.timeout; Explanation?套接字。超时;解释?
【发布时间】:2016-05-17 04:25:35
【问题描述】:

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

它处于开发的早期阶段,因此错误处理很糟糕,但还不足以让 Python 这样做的原因可以解释。

它尝试连接到,例如,123.456.7.8, 1。显然这是一个可笑的端口打开,所以它会抛出一个错误。错误是No Route to Host 之类的,对吧?错误的!而是Operation Timed Out!

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

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

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

需要区分超时和连接失败,因为迟到和无处的区别。这阻止了我这样做,造成了快点等待的无限循环。

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

【问题讨论】:

  • 我要去哪里?所以!我该怎么办?发布演示问题的代码的精简版本! ;)
  • 这不是 MyCode 问题,这是 PyCode 问题! ;)
  • 如果是 python 问题,那么您将不得不发布错误修复请求。但是,如果您的代码有问题,那么您应该创建一个最小、完整和可验证的示例。请参阅:stackoverflow.com/help/mcve 您可能会发现,在此过程中,您会找到自己的解决方案。
  • 好的。让我们再试一次。这不是任何地方的错误。这是个问题。我在问为什么会这样,是否有解决方案。这就是 SO 的工作原理,不是吗?
  • 无法看到您正在尝试做什么以及您是如何做的,您是在让我们猜测问题所在。 SO 的一个重要原则是,如果您有一个问题,您需要向阅读您的问题的人提供最低限度的导致问题的代码,最好是“最小、完整和可验证的示例”。这就是 SO 的工作原理。

标签: python python-2.7 sockets timeout


【解决方案1】:

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

您不必收到No Route to Host 错误。此外,防火墙通常会丢弃接收到的数据包(针对过滤端口),这些数据包可能会在您的代码中表现为超时错误。见Drop vs. Reject(忽略结论,但阅读正在发生的事情的解释)。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-08
    • 2011-05-11
    • 2013-05-23
    • 1970-01-01
    • 2019-07-11
    • 2015-12-07
    • 1970-01-01
    相关资源
    最近更新 更多