CS 779/879
Design
of Network Protocols
Spring
2003
Final
Exam
Time
2 & 1/2 hours
Open
Book & Notes
Name:
Login:
In this
test we will develop a secure tcp tunnel
to allow two different groups (e.g., one at ODU the other at
UNC) to
chat in the public Internet as shown in the next Figure:

The
tunnel is connected with two tcp S
programs. S has two sockets, one is a multicast socket and the other is
a tcp
socket. Each client C has a multicast socket. For the pupose of that
test
assume:
Ø
all
sockets (udp and tcp) are binded to port 4444.
Ø
The
multicast address to join is 224.1.a.b, where a.b.c.d is the IP address
of the
host where the program is running. For example if the program runs at
host
128.82.4.4, then the multicast address is 224.1.128.82
S
behaves as either client (if it runs first) or server
(if it runs second).
To
run S, type:
S <the-other-host>
For
example to establish the tunnel we may do it as follows:
AT
ODU:
% S buzzard.cs.unc.edu
This
instance of S at ODU will behave as server.
AT
UNC:
% S cash.cs.odu.edu
This
instance of S at UNC will behave as client and connects to the other S
running
at ODU.
Any message typed by a client is send as plain text to its local peers and the server at that site encrypts the message and sends it to the other server across the tunnel. The other server decrypts the message and multicasts it to its local clients.
Q1: [25 points]
Write a function with the following description:
int
tsock( char
*host)
This function creates a tcp socket t, connects it to “host” at port 4444. If the connection is not established within 4 seconds, the function waits for a connection from “host” and port 4444. Any connection comes from different host or port should be rejected. The function returns t.
Q2: [20 points]
Write a function with following description:
int
msock()
The fuction creates a multicast socket m and joins it to the multicast group given by “224.1.a.b/4444” where the “a.b.c.d” the IP address where the program is running. The function returns m.
Q3: [15 points]
Write a function with the following description:
char
*encdec (char
*buf, char *key)
This function use “xor” to encrypt/decrypt buf using key and returns the result of encryption/decryption.
Q4: [15 points]
Write the following function:
void
switch (int
m, int t, struct
sockaddr_in mgroup)
In the function m represents multicast socket and t is a tcp socket and mgroup is the multicast group. Any packet received from m is encrypted and sent to t and any message received from t is decrypted and sent via m to the multicast group mgroup. Use the encdec function of Q3.
Q5: [15 points]
Write the code for the server S using the functions developed in the above questions. S accepts one argument, the “host” to connect to or to accept connections from as in:
% S
<host>
Q6: [10 points]
Write the code for the chat C client using the functions developed above in the above questions. C accepts no arguments as in:
% C