我有一个学校项目,其中我需要创建一个DNS服务器。
(我只能用scapy,不能用其他libs。我有32位的Python2.7,我使用有线以太网电缆)。
如果我的数据库中有请求的域名,我只需将其发送回我的客户。
如果没有,我需要询问8.8.8.8(或其他服务器),然后将响应发送到客户端,然后将答案存储在缓存中。发送答案是完美的,但是存储信息是个问题。
8.8.8.8的应答包是这样发送给我的:Ether()/IP()/UDP()/Raw()
。为了将答案发送到客户机,我只需更改IP和UDP的地址和端口,只需发送它们上面的原始层,就可以了。但是,应答包的[Raw].load是以我不理解的方式编码的(而且.decode('utf-8'/16/32)
不起作用)。
例如:
###[ Raw ]###
load = '\x007\x81\x80\x00\x01\x00\x02\x00\x00\x00\x00\x03www\x03aeo
\x03com\x00\x00\x01\x00\x01\xc0\x0c\x00\x01\x00\x01\x00\x00/\xab\x00\x04\xa5\xa0
\x0f\x14\xc0\x0c\x00\x01\x00\x01\x00\x00/\xab\x00\x04\xa5\xa0\r\x14'
{[str}使用DNS{3]时,可能会给出错误的DNS{str}(但可能会使用以下DNS}进行转换):
^{pr2}$所以我的问题是-如何将“\x0x0x0x0”字符串转换为可以从中获取信息的DNS层?在
这看起来像是scapy中在Windows机器上触发的bug(http://permalink.gmane.org/gmane.comp.security.scapy.general/4733)。不幸的是,在scapy的最新版本中似乎没有修复错误。在
这篇文章的建议是直接编辑scapy的来源。在您的例子中,编辑
C:\Python27\lib\site-packages\scapy\pton_ntop.py
,并将第66行改为:收件人:
^{pr2}$相关问题 更多 >
编程相关推荐