查找高频访问远程服务器时有效避免DDOS挂起的代码示例

2024-10-06 09:49:27 发布

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

我想访问一些网站来获取一些信息。 为此,我编写了一个python函数,以给定的频率访问网站。 此外,我还了解到,为了防止频繁访问可能导致的DDOS暂停,我可能会在出现异常后延迟访问网站。 如果有什么异常我决定等几轮。 因此,我编写了以下代码:

ddos_prevention = {'continuous_suspected_times': 0, 'to_wait_rounds': 0}
request_url = 'http://store.apple.com/'    #just an example url
while True:
    print get_response_without_ddos_suspect(request_url, ddos_prevention)
    sleep(1)

def get_response_without_ddos_suspect(request_url, ddos_prevention):
    if ddos_prevention['to_wait_rounds'] == 0:
        try:
            response = requests.get(request_url)
            if response.status_code == 200:
                if ddos_prevention['continuous_suspected_times'] != 0:
                    print '%s: Finally it works after %s rounds of waiting, request_url: %s' % (
                        datetime.now(), math.pow(2, ddos_prevention['continuous_suspected_times']), request_url)
                    ddos_prevention['continuous_suspected_times'] = 0
                return response.json()
        except Exception as e:
            ddos_prevention['continuous_suspected_times'] += 1
            ddos_prevention['to_wait_rounds'] = math.pow(2, ddos_prevention['continuous_suspected_times'])
            print '%s: DDOS suspected for the %sst times and wait %s rounds, exception: %s, request_url: %s' % (
                datetime.now(), ddos_prevention['continuous_suspected_times'], ddos_prevention['to_wait_rounds'], e, request_url)
            return None
    else:
        ddos_prevention['to_wait_rounds'] -= 1
        print 'to_wait_rounds: %s, request_url: %s' % (ddos_prevention['to_wait_rounds'], request_url)
        return None

幸运的是,它似乎奏效了。 然而,这还远远不够理想,因为: 1) 密码太单调了, 2) 这些代码不会处理不同的异常,因此我可能会忽略许多信号。你知道吗

请给出一些代码示例或模块为我的情况,它可以访问网站的频率高,但不会造成DOS的给定网站怀疑拒绝我的访问。你知道吗


Tags: to代码urlget网站responserequestcontinuous
1条回答
网友
1楼 · 发布于 2024-10-06 09:49:27

你在征求一些建议,比如改进代码,一些新代码,一些更好的模块,或者任何其他更好的方法。你知道吗

在我看来,从这两个方面你必须选择你所处的位置:

  1. 要么你有一个小网站,并不真正面临DDoS攻击的风险,仅仅因为它不够大,恶意黑客(或竞争对手)不感兴趣。在这种情况下,你可以用像这样的小黑客,肯定不会缩放,但嘿,首先你不需要在这个时候缩放,其次你现在不需要这个。

  2. 或者您的站点大到足以被认为是DDoS的潜在目标。在这种情况下,你不能与这样的黑客相处,你真的应该考虑一个更专业的解决方案。这也许是一个Content Delivery Network (CDN),它将你的网站本身与其实际交付给你的用户隔离开来。

所以对我来说,任何其他更好的方法都是这样的:要么你在1中,你应该能够摆脱你的黑客,要么你在2中,你应该使用更稳定和强大的东西。你知道吗

这个主题可能看起来是良性的,但正是这些黑客的积累,而专业的解决方案是存在的,一点一点地可以将任何酷的和有前途的软件项目转化为this kind of situation that you can't extirp yourself from。你知道吗

相关问题 更多 >