国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 伊川县| 简阳市| 肇州县| 陵水| 奎屯市| 绍兴县| 巴彦淖尔市| 白银市| 明水县| 洛扎县| 克东县| 临湘市| 凤冈县| 玉环县| 沅陵县| 荆州市| 文昌市| 富源县| 娄烦县| 漳州市| 闻喜县| 泗阳县| 精河县| 长丰县| 永靖县| 丰城市| 吴忠市| 宁安市| 余姚市| 义乌市| 沐川县| 册亨县| 疏附县| 乌什县| 策勒县| 浦城县| 县级市| 化德县| 韶山市| 千阳县| 赞皇县|