<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                這兩天在測試IPV6與DNS,晚上查了下資料,寫了個DNS客戶端,其中請求消息編碼部分參考網上實例。 剛完成了編碼,功能還沒有測試。 1、代碼: ~~~ #!/usr/bin/env python # -*- coding: utf-8 -*- import ConfigParser import socket import time import string import os import re import struct def dns_codec(hostname): ''' Function:請求消息編碼 Input:hostname:主機名,如www.baidu.com Output: 編碼后的字節流 author: socrates date:2012-12-14 ''' index = os.urandom(2) hoststr = ''.join(chr(len(x))+x for x in hostname.split('.')) data = '%s\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00%s\x00\x00\x01\x00\x01' % (index, hoststr) data = struct.pack('!H', len(data)) + data return data def dns_decode(in_sock): ''' Function:響應消息解碼 Input:in_sock:接收消息的socket Output:解碼后的內容 author: socrates date:2012-12-14 ''' rfile = in_sock.makefile('rb') size = struct.unpack('!H', rfile.read(2))[0] data = rfile.read(size) iplist = re.findall('\xC0.\x00\x01\x00\x01.{6}(.{4})', data) return ['.'.join(str(ord(x)) for x in s) for s in iplist] def dns_sendmsg(): ''' Function:通過socket發送DNS查詢消息 Input:None Output:None author: socrates date:2012-12-14 ''' ens_client_config = ConfigParser.ConfigParser() #讀取配置文件 try: ens_client_config.readfp(open('ens_client_config.ini')) except ConfigParser.Error: print 'read ens_client_config.ini failed.' #獲取需要的信息 server_ip_1 = ens_client_config.get("server_info","ip_1") server_port_1 = ens_client_config.get("server_info","port_1") sockettype_1 = ens_client_config.get("server_info","sockettype_1") heartbeat_1 = ens_client_config.get("server_info","heartbeat_1") msg_1 = ens_client_config.get("server_info","msg_1") #IP類型 address_family = {True:socket.AF_INET6, False:socket.AF_INET}[':' in server_ip_1] #傳輸類型 socket_type = {True:socket.SOCK_STREAM , False:socket.SOCK_DGRAM}['TCP' == sockettype_1.upper()] try: sock = socket.socket(address_family, socket_type) except socket.error, e: print 'create socket return error. errno = %d, errmsg = %s' % (e.args[0], e.args[1]) #連接服務器并發送消息 try: #連接服務端 sock.connect((server_ip_1, string.atoi(server_port_1))) while True: #發送頻率 time.sleep(string.atoi(heartbeat_1)) #發送消息 sock.sendall(dns_codec(msg_1)) #接收并打印消息 print dns_decode(sock) except socket.error, e: print 'connect server failed. errno = %d, errmsg = %s' % (e.args[0], e.args[1]) sock.close() if __name__ == '__main__': dns_sendmsg() ~~~ 2、配置文件: 文件名:ens_client_config.ini 內容: ~~~ [server_info] ip_1=192.168.1.1 port_1=53 sockettype_1=UDP heartbeat_1=2 msg_1=www.google.com ~~~ 3、早上測試了下UDP協議下的DNS客戶端,功能正常可用。 a、wireshark抓包: 請求: ![QQ截圖20121216114223](https://box.kancloud.cn/2016-06-08_575793629beb2.jpg) 響應: ![QQ截圖20121216114223](https://box.kancloud.cn/2016-06-08_57579362bea0b.jpg) b、代碼運行結果: ![QQ截圖20121216114223](https://box.kancloud.cn/2016-06-08_57579362e34af.jpg)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看