簡體   English   中英

如何在python中設置本地DNS服務器

[英]How to set up a local DNS server in python

我正在使用Windows 7和python 2.7我想將172.16.45.84 IP地址映射到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查找,除非您查找將返回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數據包

編輯

嘗試這段代碼讓你前進:(在命令提示符下啟動並最小化)

#!/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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM