套接字超时;解释?

2024-05-17 04:03:22 发布

您现在位置:Python中文网/ 问答频道 /正文

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

它还处于开发的早期阶段,所以错误处理是不好的,但还不足以解释Python为什么要这样做。你知道吗

它试图连接到123.456.7.8, 1。显然这是一个可笑的端口被打开,所以它抛出了一个错误。错误是No Route to Host或者类似的,对吧?错了!而是Operation Timed Out!。你知道吗

好吧,让我们增加超时时间,以防我的计算不正确。你知道吗

是的。 .. ... ……我所做的只是冲洗和重复!你知道吗

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

我需要区分超时和连接失败,因为延迟和无处是有区别的。这阻止了我这样做,造成了一个无限的循环,即匆忙和等待。你知道吗

我该怎么办?我该去哪里?你知道吗


Tags: to端口no程序iphost错误时间
1条回答
网友
1楼 · 发布于 2024-05-17 04:03:22

Pythonsocket模块是围绕平台的socketapi的薄包装。这个问题与Python无关。你知道吗

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

要解决这个问题,可以建立多个并发连接并设置一个固定的超时,或者使用原始套接字并自己发送数据包(您可以use ^{},来研究行为)。你知道吗

相关问题 更多 >