python 指定dns服务器,如何在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中的socket服务器编程。很好地阅读了python文档:

在这里:

我还建议查找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

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

用法:$ START "" .\dns-server.py

$ .\dns-client.py

172.16.45.84

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值