首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python Twisted:如何在UDP协议中使用HTB速率限制

Python Twisted:如何在UDP协议中使用HTB速率限制
EN

Stack Overflow用户
提问于 2019-09-10 06:20:08
回答 1查看 58关注 0票数 0

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

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

代码语言:javascript
复制
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)

但我得到了以下异常:

代码语言:javascript
复制
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协议一起使用?

EN

回答 1

Stack Overflow用户

发布于 2019-09-10 07:15:48

可能不会。Twisted中的HTB是面向流的套接字,而不是像UDP这样的面向数据报的套接字。

此外,Twisted中的HTB可能是相当粗略的,即使是为了它的预期目的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57861847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档