代码之家  ›  专栏  ›  技术社区  ›  Daniel F

pythontwisted:如何在UDP协议中使用HTB速率限制

  •  0
  • Daniel F  · 技术社区  · 5 年前

    我有一个DNS服务器,我想添加一些速率限制,因为我收到一些突发的查询洪水。

    https://github.com/racker/python-twisted-core/blob/master/doc/examples/shaper.py 并根据我的需要进行调整:

    from twisted.internet import reactor, protocol
    from twisted.protocols import htb
    
    udpBucket = htb.Bucket()
    udpBucket.maxburst = 100000 # 1000 kb/s
    udpBucket.rate     = 100000 # 1000 kb/s thereafter 
    
    udpFilter = htb.HierarchicalBucketFilter()
    udpFilter.buckets[None] = udpBucket
    
    class DNSClientBucket(htb.Bucket):
      maxburst = 10000 # 10 kb/s
      rate     =  1000 #  1 kb/s thereafter
    
    udpFilter2 = htb.FilterByHost(udpFilter)
    udpFilter2.bucketFactory = DNSClientBucket
    
    class DnsUdpProtocol(protocol.Protocol):
      def datagramReceived(self, data, client):
        print(data)
    
    dns_udp_protocol = DnsUdpProtocol()
    dns_udp_protocol = htb.ShapedProtocolFactory(dns_udp_protocol, udpFilter2)
    
    dns_udp_interface   = socket.gethostbyname(socket.gethostname())
    dns_udp_server_port = 53
    reactor.listenUDP(port=dns_udp_server_port, protocol=dns_udp_protocol, interface=dns_udp_interface)
    

    但我有以下例外:

    Traceback (most recent call last):
      File "server.py", line 263, in <module>
        reactor.listenUDP(port=dns_udp_server_port, protocol=dns_udp_protocol, interface=dns_udp_interface)
      File "/usr/lib/python3.7/site-packages/twisted/internet/posixbase.py", line 369, in listenUDP
        p.startListening()
      File "/usr/lib/python3.7/site-packages/twisted/internet/udp.py", line 179, in startListening
        self._connectToProtocol()
      File "/usr/lib/python3.7/site-packages/twisted/internet/udp.py", line 217, in _connectToProtocol
        self.protocol.makeConnection(self)
    AttributeError: 'ShapedProtocolFactory' object has no attribute 'makeConnection'
    

    twisted.protocols.htb 使用UDP协议?

    0 回复  |  直到 5 年前
        1
  •  0
  •   Jean-Paul Calderone    5 年前

    可能没有。Twisted中的HTB用于面向流的套接字,而不是面向数据报的套接字(如UDP)。

    此外,HTB在Twisted可能是相当粗略的,即使是它的预期用途。

    推荐文章