CS352 – Project 1: Recursive DNS client and DNS servers (Solution)

$ 20.99
Category:

Description

===============================================

Overview
——–

The goal of this project is to implement a simplified DNS system consisting of a client program and two server programs: RS (a simplified root DNS server) and TS
(a simplified top-level DNS server).

In project 0, you have already seen a client-server program with one socket each in the client and the server. In this project, you will extend that implementation to have two sockets in the client program. One socket will be used to communicate with RS and the other with TS.

The RS and TS programs each maintain a DNS_table consisting of three fields:

– Hostname
– IP address
– Flag (A or NS)

You need to choose the appropriate data structure to store the values for each entry. The client always connects first to RS, sending the queried hostname as a string. The RS program does a look up in its DNS_table, and if there is a match, sends the entry as a string

Hostname IPaddress A

If there is no match, RS sends the string

TSHostname – NS

where TShostname is the name of the machine on which the TS program is running.

If the client receives a string with “A” field, it outputs the received string as is. On the other hand, if the client receives a string with “NS” field, it uses the TSHostname part of the received string to determine the IP address of the machine running the TS program and connects to the TS program using a second socket.

The client then sends the queried hostname as a string to TS. The TS program looks up the hostname in its DNS_table, and if there is a match, sends the entry as a string

Hostname IP address A

to the client. Otherwise, it sends an error string

Hostname – Error:HOST NOT FOUND

In the TS outputs above, Hostname is the queried hostname. The client outputs the string received from TS as is.

Note that all DNS lookups are case-insensitive. If there is a hit in the local DNS table, the server programs must respond with the version of the string that is in their local DNS table.

How we will test your programs
——————————

As part of your submission, you will turn in three programs: rs.py, ts.py, and client.py, and one README file (more on this below). We will be running the three programs on the ilab machines with Python 2.7.

Please do not assume that all programs will run on the same machine or that all connections are made to the local host. We reserve the right to test your programs with local and remote socket connections, for example with client.py, ts.py, and rs.py each running on a different machine. You are welcome to simplify the initial development and debugging of your project, and get off the ground by running all programs on one machine first. However, you must eventually ensure that the programs can work across multiple machines.

The programs must work with the following command lines:

python ts.py tsListenPort python rs.py rsListenPort python client.py rsHostname rsListenPort tsListenPort

Here tsListenPort (rsListenPort) is the port on which TS (RS) listens for requests and rsHostname is the hostname of the machine running the RS program.

The hostname strings to be queried will be given one per line in a file
PROJI-HNS.txt.

The entries of the local DNS tables, one each for RS and TS, will be strings with fields separated by spaces. There will be one entry per line. You can see the format in PROJI-DNSRS.txt and PROJI-DNSTS.txt. Your server programs should populate the DNS table by reading the entries from the corresponding files.

Your client program should output the results to a file RESOLVED.txt, with one line per result.

See the samples attached in this folder.

We will test your programs by running them with the hostnames and tables in the attached input files (*.txt) as well as with new hostnames and table configurations. You will be graded based on the outputs in RESOLVED.txt. Your programs should not crash on correct inputs.

README file
———–

In addition to your programs, you must also submit a README file with clearly dilenated sections for the following.

0. Please write down the full names and netids of both your team members.
1. Briefly discuss how you implemented your recursive client functionality.
2. Are there known issues or functions that aren’t working currently in your attached code? If so, explain.
3. What problems did you face developing code for this project?
4. What did you learn by working on this project?

Submission
———-

Turn in your project on Sakai assignments. Only one team member needs to submit. Please upload a single zip file consisting of client.py, rs.py, ts.py,
and README.

Some tips
———

Run your programs by first starting the TS program, the RS program, and then the client program. A brief sketch of the interaction among the programs is attached
in this folder.

DNS lookups are case-insensitive.

It is okay to assume that each DNS entry or host name is smaller than 200 characters.

START EARLY to allow plenty of time for questions on Piazza should you run into difficulties.

Reviews

There are no reviews yet.

Be the first to review “CS352 – Project 1: Recursive DNS client and DNS servers (Solution)”

Your email address will not be published. Required fields are marked *