我正在使用Windows 7和Python 2.7。我想将IP地址172.16.45.84映射到myapp.nobies.in,而无需在hosts文件中进行映射。
我拥有此主机名所需的证书。我不想在hosts文件中进行映射,因为它需要管理员权限。
那么,如何为此创建DNS Python服务器,以便可以与我的应用程序一起使用。
我正在使用Windows 7和Python 2.7。我想将IP地址172.16.45.84映射到myapp.nobies.in,而无需在hosts文件中进行映射。
我拥有此主机名所需的证书。我不想在hosts文件中进行映射,因为它需要管理员权限。
那么,如何为此创建DNS Python服务器,以便可以与我的应用程序一起使用。
请参考此帖子如何在Python中进行DNS查找,包括引用/ etc / hosts? 了解如何在Python中进行DNS查找。
您可以尝试以下操作:
import socket
name = raw_input("hostname:")
if name == "mpapp.nobies.in":
print "172.16.45.84"
else:
print socket.gethostbyname(name)
这将执行普通的DNS查找,除非您查找"myapp.nobies.in",这将返回172.16.45.84。
注意:这不是一个功能完备的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数据包。 编辑:#!/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()
并将其用作客户端:(自定义变量并在启动服务器后运行)
#!/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
$ START "" .\dns-server.py
$ .\dns-client.py
172.16.45.84