• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    Python寫的一個簡單DNS服務器實例

    來源:懂視網 責編:小采 時間:2020-11-27 14:30:23
    文檔

    Python寫的一個簡單DNS服務器實例

    Python寫的一個簡單DNS服務器實例:因為突然有個邪惡的想法,想在自己的Android平板上面搭建一個DNS服務器,因為平板上之前安裝過SL4A和Python的解釋器,也想繼續學學Python因此,就打算用Python實現了。 在Google上面找了一下,Python實現的DNS,沒找到我所希望的答案,因此就決定自己來實現了
    推薦度:
    導讀Python寫的一個簡單DNS服務器實例:因為突然有個邪惡的想法,想在自己的Android平板上面搭建一個DNS服務器,因為平板上之前安裝過SL4A和Python的解釋器,也想繼續學學Python因此,就打算用Python實現了。 在Google上面找了一下,Python實現的DNS,沒找到我所希望的答案,因此就決定自己來實現了

    因為突然有個邪惡的想法,想在自己的Android平板上面搭建一個DNS服務器,因為平板上之前安裝過SL4A和Python的解釋器,也想繼續學學Python因此,就打算用Python實現了。

    在Google上面找了一下,Python實現的DNS,沒找到我所希望的答案,因此就決定自己來實現了。

    現在所實現的沒什么高深的,只是能夠對A記錄查詢進行簡單的匹配和回復。

    實現的代碼如下:
    代碼如下:


    '''
    Created on 2012-10-15

    @author: RobinTang
    '''

    import socketserver
    import struct

    # DNS Query
    class SinDNSQuery:
    def __init__(self, data):
    i = 1
    self.name = ''
    while True:
    d = data[i]
    if d == 0:
    break;
    if d < 32:
    self.name = self.name + '.'
    else:
    self.name = self.name + chr(d)
    i = i + 1
    self.querybytes = data[0:i + 1]
    (self.type, self.classify) = struct.unpack('>HH', data[i + 1:i + 5])
    self.len = i + 5
    def getbytes(self):
    return self.querybytes + struct.pack('>HH', self.type, self.classify)

    # DNS Answer RRS
    # this class is also can be use as Authority RRS or Additional RRS
    class SinDNSAnswer:
    def __init__(self, ip):
    self.name = 49164
    self.type = 1
    self.classify = 1
    self.timetolive = 190
    self.datalength = 4
    self.ip = ip
    def getbytes(self):
    res = struct.pack('>HHHLH', self.name, self.type, self.classify, self.timetolive, self.datalength)
    s = self.ip.split('.')
    res = res + struct.pack('BBBB', int(s[0]), int(s[1]), int(s[2]), int(s[3]))
    return res

    # DNS frame
    # must initialized by a DNS query frame
    class SinDNSFrame:
    def __init__(self, data):
    (self.id, self.flags, self.quests, self.answers, self.author, self.addition) = struct.unpack('>HHHHHH', data[0:12])
    self.query = SinDNSQuery(data[12:])
    def getname(self):
    return self.query.name
    def setip(self, ip):
    self.answer = SinDNSAnswer(ip)
    self.answers = 1
    self.flags = 33152
    def getbytes(self):
    res = struct.pack('>HHHHHH', self.id, self.flags, self.quests, self.answers, self.author, self.addition)
    res = res + self.query.getbytes()
    if self.answers != 0:
    res = res + self.answer.getbytes()
    return res
    # A UDPHandler to handle DNS query
    class SinDNSUDPHandler(socketserver.BaseRequestHandler):
    def handle(self):
    data = self.request[0].strip()
    dns = SinDNSFrame(data)
    socket = self.request[1]
    namemap = SinDNSServer.namemap
    if(dns.query.type==1):
    # If this is query a A record, then response it

    name = dns.getname();
    if namemap.__contains__(name):
    # If have record, response it
    dns.setip(namemap[name])
    socket.sendto(dns.getbytes(), self.client_address)
    elif namemap.__contains__('*'):
    # Response default address
    dns.setip(namemap['*'])
    socket.sendto(dns.getbytes(), self.client_address)
    else:
    # ignore it
    socket.sendto(data, self.client_address)
    else:
    # If this is not query a A record, ignore it
    socket.sendto(data, self.client_address)

    # DNS Server
    # It only support A record query
    # user it, U can create a simple DNS server
    class SinDNSServer:
    def __init__(self, port=53):
    SinDNSServer.namemap = {}
    self.port = port
    def addname(self, name, ip):
    SinDNSServer.namemap[name] = ip
    def start(self):
    HOST, PORT = "0.0.0.0", self.port
    server = socketserver.UDPServer((HOST, PORT), SinDNSUDPHandler)
    server.serve_forever()

    # Now, test it
    if __name__ == "__main__":
    sev = SinDNSServer()
    sev.addname('www.aa.com', '192.168.0.1') # add a A record
    sev.addname('www.bb.com', '192.168.0.2') # add a A record
    sev.addname('*', '0.0.0.0') # default address
    sev.start() # start DNS server

    # Now, U can use "nslookup" command to test it
    # Such as "nslookup www.aa.com"

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    Python寫的一個簡單DNS服務器實例

    Python寫的一個簡單DNS服務器實例:因為突然有個邪惡的想法,想在自己的Android平板上面搭建一個DNS服務器,因為平板上之前安裝過SL4A和Python的解釋器,也想繼續學學Python因此,就打算用Python實現了。 在Google上面找了一下,Python實現的DNS,沒找到我所希望的答案,因此就決定自己來實現了
    推薦度:
    標簽: dns 開發 python
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 亚洲精品tv久久久久久久久| 精品视频一区二区三区免费| 国产精品99精品久久免费| 国产精品乱码一区二区三区| 精品国产午夜理论片不卡| 久久露脸国产精品| 亚洲愉拍自拍欧美精品| 乱色精品无码一区二区国产盗| 国产精品综合久久第一页| 国内精品久久久久影院免费| 精品国产三级a在线观看| 亚洲国产精品一区第二页 | 欧美视频精品一区二区三区| 久久精品无码专区免费青青| 亚洲国产午夜中文字幕精品黄网站| 国产成人精品免费视频大全| 国产精品你懂的| 国产a∨精品一区二区三区不卡| 蜜芽亚洲av无码精品色午夜| 伊人久久精品影院| 色婷婷久久久SWAG精品| 久久精品国产第一区二区| 99精品伊人久久久大香线蕉| 欧美精品福利视频| 国产精品怡红院永久免费| 国产精品免费无遮挡无码永久视频| 亚洲处破女AV日韩精品| 亚洲色精品88色婷婷七月丁香| 亚洲精品视频免费观看| 亚洲国产午夜中文字幕精品黄网站| 欧美日韩国产精品系列| 日韩蜜芽精品视频在线观看| 国产一区精品| 久久久WWW成人免费精品| 久久激情亚洲精品无码?V| 久久精品夜色噜噜亚洲A∨| 久久精品18| 无码国产亚洲日韩国精品视频一区二区三区 | 18国产精品白浆在线观看免费| 国产精品涩涩涩视频网站| 91视频国产精品|