国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

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

2020-02-23 05:25:55
字體:
來源:轉載
供稿:網友

因為突然有個邪惡的想法,想在自己的Android平板上面搭建一個DNS服務器,因為平板上之前安裝過SL4A和Python的解釋器,也想繼續(xù)學學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:

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 深州市| 波密县| 金坛市| 南部县| 昌宁县| 涪陵区| 华容县| 江口县| 刚察县| 宁蒗| 左贡县| 石棉县| 松原市| 柘荣县| 汶上县| 沙田区| 荃湾区| 阿勒泰市| 广丰县| 温泉县| 兴城市| 道孚县| 嘉荫县| 固镇县| 巍山| 和田县| 富顺县| 卢湾区| 阳信县| 礼泉县| 承德市| 会东县| 衡山县| 双江| 正宁县| 通道| 宁乡县| 苏尼特右旗| 南丰县| 隆尧县| 砚山县|