Read "Streaming Systems" 1&2, Streaming 101 Read "F1, a distributed SQL database that scales" Read "Zanzibar, Google’s Consistent, Global Authorization System" Read "Spanner, Google's Globally-Distributed Database" Read "Designing Data-intensive applications" 12, The Future of Data Systems IOS development with Swift Read "Designing Data-intensive applications" 10&11, Batch and Stream Processing Read "Designing Data-intensive applications" 9, Consistency and Consensus Read "Designing Data-intensive applications" 8, Distributed System Troubles Read "Designing Data-intensive applications" 7, Transactions Read "Designing Data-intensive applications" 6, Partitioning Read "Designing Data-intensive applications" 5, Replication Read "Designing Data-intensive applications" 3&4, Storage, Retrieval, Encoding Read "Designing Data-intensive applications" 1&2, Foundation of Data Systems Three cases of binary search TAMU Operating System 2 Memory Management TAMU Operating System 1 Introduction Overview in cloud computing 2 TAMU Operating System 7 Virtualization TAMU Operating System 6 File System TAMU Operating System 5 I/O and Disk Management TAMU Operating System 4 Synchronization TAMU Operating System 3 Concurrency and Threading TAMU Computer Networks 5 Data Link Layer TAMU Computer Networks 4 Network Layer TAMU Computer Networks 3 Transport Layer TAMU Computer Networks 2 Application Layer TAMU Computer Networks 1 Introduction Overview in distributed systems and cloud computing 1 A well-optimized Union-Find implementation, in Java A heap implementation supporting deletion TAMU Advanced Algorithms 3, Maximum Bandwidth Path (Dijkstra, MST, Linear) TAMU Advanced Algorithms 2, B+ tree and Segment Intersection TAMU Advanced Algorithms 1, BST, 2-3 Tree and Heap TAMU AI, Searching problems Factorization Machine and Field-aware Factorization Machine for CTR prediction TAMU Neural Network 10 Information-Theoretic Models TAMU Neural Network 9 Principal Component Analysis TAMU Neural Network 8 Neurodynamics TAMU Neural Network 7 Self-Organizing Maps TAMU Neural Network 6 Deep Learning Overview TAMU Neural Network 5 Radial-Basis Function Networks TAMU Neural Network 4 Multi-Layer Perceptrons TAMU Neural Network 3 Single-Layer Perceptrons Princeton Algorithms P1W6 Hash Tables & Symbol Table Applications Stanford ML 11 Application Example Photo OCR Stanford ML 10 Large Scale Machine Learning Stanford ML 9 Anomaly Detection and Recommender Systems Stanford ML 8 Clustering & Principal Component Analysis Princeton Algorithms P1W5 Balanced Search Trees TAMU Neural Network 2 Learning Processes TAMU Neural Network 1 Introduction Stanford ML 7 Support Vector Machine Stanford ML 6 Evaluate Algorithms Princeton Algorithms P1W4 Priority Queues and Symbol Tables Stanford ML 5 Neural Networks Learning Princeton Algorithms P1W3 Mergesort and Quicksort Stanford ML 4 Neural Networks Basics Princeton Algorithms P1W2 Stack and Queue, Basic Sorts Stanford ML 3 Classification Problems Stanford ML 2 Multivariate Regression and Normal Equation Princeton Algorithms P1W1 Union and Find Stanford ML 1 Introduction and Parameter Learning

A simple DNS resolver, similar to nslookup

2018-04-17

Introduction

The project code can be found at https://github.com/melonskin/simple-dns-lookup.

This is a naive implementation of DNS resolver. The function is basically the same as nslookup. It takes two arguments. The first is the lookup string. It can be either a host or a IP address. The second is the DNS server you would like to query. For example:

dns-resolver.exe www.dhs.gov 128.194.135.84
dns-resolver.exe 206.190.39.42 8.8.8.8

The result is shown as below.

PS ...> .\dns-resolver.exe www.dhs.gov 128.194.135.84
Lookup   : www.dhs.gov
Query    : www.dhs.gov, type 1 TXID 0x567A
Server   : 128.194.135.84
*******************************************
Attempt 0 with 29 bytes... response in 29 ms with 442 bytes
        TXID 0x567A flags 0x8180 questions 1 answers 3 authority 8 additional 9
        succeeded with Rcode = 0
        ------------- [questions] -----------
                www.dhs.gov type 1 class 1
        ------------- [answers] -----------
                www.dhs.gov CNAME www.dhs.gov.edgekey.net TTL = 1625
                www.dhs.gov.edgekey.net CNAME e6485.dsca.akamaiedge.net TTL = 174
                e6485.dsca.akamaiedge.net A 23.35.235.8 TTL = 20
        ------------- [authority] -----------
                dsca.akamaiedge.net NS n2dsca.akamaiedge.net TTL = 2025
                dsca.akamaiedge.net NS n0dsca.akamaiedge.net TTL = 2025
                dsca.akamaiedge.net NS n1dsca.akamaiedge.net TTL = 2025
                dsca.akamaiedge.net NS n6dsca.akamaiedge.net TTL = 2025
                dsca.akamaiedge.net NS n4dsca.akamaiedge.net TTL = 2025
                dsca.akamaiedge.net NS n7dsca.akamaiedge.net TTL = 2025
                dsca.akamaiedge.net NS n5dsca.akamaiedge.net TTL = 2025
                dsca.akamaiedge.net NS n3dsca.akamaiedge.net TTL = 2025
        ------------- [additional] -----------
                n0dsca.akamaiedge.net A 88.221.81.192 TTL = 2025
                n1dsca.akamaiedge.net A 66.171.227.43 TTL = 2025
                n2dsca.akamaiedge.net A 66.171.227.44 TTL = 2025
                n3dsca.akamaiedge.net A 66.171.227.45 TTL = 2025
                n4dsca.akamaiedge.net A 66.171.227.242 TTL = 2025
                n5dsca.akamaiedge.net A 66.171.227.246 TTL = 2025
                n6dsca.akamaiedge.net A 69.31.59.75 TTL = 2025
                n7dsca.akamaiedge.net A 128.177.98.250 TTL = 2025
PS ...> .\dns-resolver.exe 206.190.39.42 8.8.8.8
Lookup   : 206.190.39.42
Query    : 42.39.190.206.in-addr.arpa, type 12 TXID 0x35DB
Server   : 8.8.8.8
*******************************************
Attempt 0 with 44 bytes... response in 16 ms with 103 bytes
        TXID 0x35DB flags 0x8180 questions 1 answers 1 authority 0 additional 0
        succeeded with Rcode = 0
        ------------- [questions] -----------
                42.39.190.206.in-addr.arpa type 12 class 1
        ------------- [answers] -----------
                42.39.190.206.in-addr.arpa PTR media-router-fp1.prod.media.vip.gq1.yahoo.com TTL = 454

Implementation

The program takes the lookup string and identify whether it’s a type A or PTR. A query packet is assembled and sent to the server via UDP. Response are checked for safety purpose and parsed into human-readable format.

Multiple error response cases can be recognized and reported, such as:

  • invalid reply: smaller than fixed header
  • invalid section: not enough records
  • invalid record: jump beyond packet boundary
  • invalid record: truncated name
  • invalid record: truncated fixed RR header
  • invalid record: truncated jump offset
  • invalid record: jump into fixed header
  • invalid record: jump loop
  • invalid record: RR value length beyond packet
  • invalid reply: TXID mismatch

Creative Commons License
Melon blog is created by melonskin. This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.
© 2016-2019. All rights reserved by melonskin. Powered by Jekyll.