首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在python中设置本地DNS服务器

如何在python中设置本地DNS服务器
EN

Stack Overflow用户
提问于 2014-05-09 10:37:57
回答 1查看 13.2K关注 0票数 4

我使用的是windows 7和python2.7,我想将172.16.45.84 IP地址映射到myapp.nobies.in,而不需要在主机文件中进行映射。

我有这个主机名所需的证书。我不想映射到主机文件中,因为它需要管理权限.

那么,如何为它创建一个DNS python服务器,它可以随我的应用程序一起提供。

EN

回答 1

Stack Overflow用户

发布于 2014-05-09 10:48:57

有关如何在python中进行How can I do DNS lookups in Python, including referring to /etc/hosts?查找,请参阅本文中的dns。

你可以这样做:

代码语言:javascript
复制
import socket
name = raw_input("hostname:")
if name == "mpapp.nobies.in":
    print "172.16.45.84"
else:
    print socket.gethostbyname(name)

这将执行正常的DNS查找,除非查找返回172.16.45.84的"myapp.nobies.in“。

备注:这不是一个功能正常的DNS服务器应用程序。然而,它是一个(非常基本的)类似于nslookup的命令选择。要使它成为一个实际的服务器,您需要侦听端口53上的DNS数据包(这需要管理权限,因为它是一个特权端口)。我想您可以使用一个更高的,但您也必须配置在您的DNS客户端)。研究python中的套接字服务器编程。这里很好地阅读了python文档:

https://docs.python.org/2/howto/sockets.html

在这里:

https://docs.python.org/2/library/socket.html

我还建议查找dnslib和/或dnspython来解析DNS数据包。

编辑

试着使用以下代码:(从命令提示符开始,最小化)

代码语言:javascript
复制
#!/usr/bin/python

import socket

def resolve(name):
    if name == "mpapp.nobies.in":
        return "172.16.45.84"
    else :
        # you ought to add some basic checking of name here
        return socket.gethostbyname(name)

host = ''
port = 50000
backlog = 5
size = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host,port))
s.listen(backlog)
while 1:
    client, address = s.accept()
    data = client.recv(size)
    if data:
        bits = data.split(":")
        if bits[0] == 'h':
            client.send(resolve(bits[1]))
    client.close()

并将其用作客户端:(自定义变量并在启动服务器后运行)

代码语言:javascript
复制
#!/usr/bin/python

import socket

### configure me ###

dns_server_ip = '127.0.0.1'
dns_server_port = 50000
query = 'mpapp.nobies.in' # change this to the hostname you want to lookup

### configure me ###

size = 1024

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((dns_server_ip,dns_server_port))
s.send('h:' + query)
data = s.recv(size)
s.close()
print data

注意:这不是一个真正的dns服务器,它不理解dns数据包--它只是在端口50000上接受一个以'h:‘为前缀的主机名字符串并返回一个ip地址。我希望这能满足你的需要。

用法:

代码语言:javascript
复制
$ START "" .\dns-server.py
$ .\dns-client.py
172.16.45.84
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23562501

复制
相关文章

相似问题

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