Computer Networks Laboratory Manual - V4
Computer Networks Laboratory Manual - V4
Laboratory Manual
Computer Networks Laboratory
Version 4.0
First Edition: Summer 2018
Last Edition: June, 2022
Objectives
1. End Devices
Server
A server is a computer that serves the data to other computers and users. The network
components can be in the form of a computer, a hardware device, or a computer program that
is loaded so that it can send data and any information to other computers. The term “server”
usually refers to a computer system that receives a request for a web document and sends the
request information to the client.
Client
The device that receives requests, and responses from the server, is called a client. When the
server and its clients work together on the computer, we call it the client/server network.
2. Intermediate Devices
HUB
A hub is a device that splits a network connection among multiple computers. It works similarly
to a distribution center. When a computer requests information from one network or from a
specific computer, then it sends the request to the hub through a cable. The hub then receives
that request and transmits it to the entire network.
After that, every computer checks whether that network then belongs to them or not. If belongs
then it broadcasts if the request doesn’t belong it will be dropped.
However, such network components nowadays are very less in circulation and being replaced
by more advanced communication devices such as Routers and Switches. This hub is basically
a multiport repeater.
This hub is used to connect multiple connections that come from different branches, For
example, the connector in star topology is used to connect different stations for data access.
Switch
The switch is a component that helps devices to connect the networks so that they can transfer
data to other connected devices. These network switches are identical to network hubs, but a
switch has more advanced features than a hub. It doesn’t broadcast entire data on the network
like a hub.
The advanced features of the switch imply that the network switch first inspects the incoming
packet and determines its source, destination address, and routes after that sends the data at the
Router
The router is a hardware network component. Routers operate at the network layer of the OSI
(Open system interconnection) reference model, using them to send packets over the network
using a logical address.
Any data which travels from one network to another network as a Packet. The Router receives
such Packet data and forwards it to the Destination Device after analyzing hidden information
in the Data Packet. This Networking Device is used to connect different networks either it is
wired or wireless.
3. Media
Transmission media
Transmission media are the medium through which data is transferred from one device to
another in a network. Transmission media can be used either in a physical transmission
medium or wireless transmission medium.
Physical transmission medium includes the use of wires and cables like fiber optic cables,
coaxial cable, etc.; and wireless transmission medium includes the use of unguided media
like infra-red waves, electromagnetic, microwaves, etc.
a. Subnet Masks: Subnet mask identifies the network portion of an IP address. Make sure
every machine in the same network has the same subnet mask. The value of subnet mask
is 255.255.255.0 in the example we will use.
b. Network or Subnet Address: Find the network portion of the IP address of the
Gateway Machine. Fill in the host portion with 0s. Write that label above the network (in
the upper left, in these diagrams). In the above example, the Gateway Machine has an IP
address of 192.168.1.101 and since the subnet mask is 255.255.255.0, the network
portion includes only the first 3 bytes. To find the subnet label, replace the last byte with
zero: 192.168.1.0.
c. Check the IP Addresses:
• Network Portion: Make sure that each NIC on a subnet has the same network
address as the label you wrote at the top of the subnet. In the example, on the left
subnet, that means every IP address must start with 192.168.1
• Host Portion: Make sure that each NIC on a subnet has a different host address,
including the default gateway. In the example, the Gateway Machine has a host
address of 1, and the others are 101, 102, and 103, so there are no duplicates.
d. Default Gateway: On each subnet, the default gateway is the Gateway Machine’s IP
address. It is the same for each NIC on the subnet, except the Gateway Machine itself,
which has a default gateway of the network above it, usually an ISP. In the example, the
Gateway Machine has an IP address of 192.168.1.1, so the default gateway must be
192.168.1.1 for all three PCs at the bottom of the chart.
Use the Start menu to open the Command Prompt, an MS-DOS-like window. Type
ipconfig and press the Enter key. The ipconfig is used for gathering the IP Configuration
information. The following figure shows the Command screen.
To see detailed information, type ipconfig /all and press Enter. The figure shows the
detailed IP config-screen. The host name, including the computer name should be
displayed. Notice the Physical Address (MAC) and the NIC (Network Interface Card)
model (Description). All machines share the first three Hex pairs in the adapter address.
These three pairs identify the manufacturer of the adapter.
Host Name:
IP addresses of DNS server:
Now. Do your PC and DNS Server above share the same network portion? (Explain)
Answer:
Part-6: ping the IP address of another computer
In the window, type ping, a space, and the IP address of another computer. The
following figure shows the successful results of ping to this IP address.
Ping uses the ICMP echo request and echo reply feature to test physical connectivity. Since
ping reports on four attempts, it gives an indication of the reliability of the connection. Now,
ping the IP address of Computer B. Look over the results and verify that the ping was
successful. Is the ping successful? (yes/no) .
Note the results: Packets: sent = , Received = , Lost =
Objectives
• To introduce Packet Tracer (PT) and become familiar with its operations.
• Create a simple network using Hub, Switch.
• Learn about basic components of a router.
• Configure router interfaces and learn other basic router configuration settings.
• To connect hosts in different networks using a Router in Packet Tracer.
End Devices:
Intermediate Devices:
Media:
Common Ethernet network cables are straight and crossover cable. This Ethernet network
cable is made of 4 pair high performance cable that consists of twisted pair conductors
that used for data transmission. Both end of cable is called RJ45 connector. Straight and
crossover cable can be Cat3, Cat 5, Cat 5e or Cat 6 UTP cable, the only difference is each
type will have different wire arrangement in the cable for serving different purposes.
You usually use straight cable to connect different type of devices (different category).
This type of cable will be used most of the time and can be used to:
• Connect a computer to a switch/hub's normal port.
• Connect a router's LAN port to a switch/hub's uplink port. (normally used for
expanding network)
Test the network, e.g., ping PC2 from PC1 and ping PC2 from PC3.
Run the test in Simulation mode of Packet Tracer and Ping again
Part-4: Create a single-segment network using a Switch and Compare with the Part-3
Test the network, e.g., ping PC5 from PC4 and ping PC6 from PC5.
Run the test in Simulation mode of Packet Tracer and Ping again
G0/0 ip address is assign by LAN-1 Network and G0/0 is the default gateway of the LAN-1.
For design purpose, we use 1st or Last IP address as a Default Gateway.
So, we use 1st IP Address of LAN-1. IP Address: 192.168.1.1 Subnet Mask: 255.255.255.0
IP Address: 192.168.1.10
Subnet Mask: 255.255.255.0
Default Gateway: 192.168.1.1
Close the PC-1 window
Note: Configure the other PC’s
Part-3(G): Verify the running configuration and save this configuration to NVRAM
12 |© 2022 Cisco Networking Academy, UIU Version 4.0
Azim Uddin Chowdhury, UIU
R1#show startup configuration
R1#show running-config
Building configuration...
[OK]
• What is the basic difference between “startup configuration” file and “running
configuration” file?
2. Address: 60.41.211.5
Address Class: Class Host Bit: Class Network Bit:
Default Subnet Mask: Total Number of usable Host:
Default Network Address: Default Broadcast Address:
3. Address: 190.101.2.199
Address Class: Class Host Bit: Class Network Bit:
Default Subnet Mask: Total Number of usable Host:
Default Network Address: Default Broadcast Address:
Part-2(B)
1. Address: 207.21.54.140 Subnet Mask: 255.255.255.224
Address Class: Class Host Bit: Class Network Bit:
Default Subnet Mask: Total Subnet Bit:
Network Address: Broadcast Address:
Total Number of Subnet: Total Usable IP Address per Subnet:
Subnet Mask:
Part-3(B)
Subnet Subnet Address First Usable Host Last Usable Host Broadcast Address
Number Address Address
Home Work
Part-3(C)
Part-3(D)
Given a host with IP address 160.50.145.189/21:
1. Is a host with IP address 160.50.146.210/21 part of the same network? Show calculations.
2. Is the IP address 160.50.145.255 valid according to the given IP? Why or why not?
3. What is the first valid host on the sub-network that the node 172.18.142.179 255.255.254.0
belongs to?
4. Which subnet does host 192.168.11.198 255.255.255.240 belong to?
5. What is the last valid host on the sub-network 192.168.98.176 255.255.255.240?
6. What is the last valid host on the sub-network 172.25.13.112 255.255.255.240?
7. How many subnets and hosts per subnet can you get from the network 10.0.0.0
255.255.240.0?
8. What is the first valid host on the sub-network that the node 192.168.207.190/28 belongs
to?
Objectives
• To learn how to connect and configure more than one Router
• Using static and default routes
• Using a dynamic routing protocol (RIP)
• To build and configure an internetwork using Packet Tracer
Part-1: Background: Static and Default Routes
In this activity, you will configure static and default routes. A static route is a route that is
entered manually by the network administrator to create a reliable and safe route. A directly
attached static route relies on its exit interface in order for packets to be sent to its destination,
while a recursive static route uses the IP address of the next hop router.
A default route, also known as the gateway of last resort, is the network route used by a
router when no other known route exists for a destination network. A static route is used to
route traffic to a specific network, while a default route is used when destination network is
unknown.
Part-2: Instructions: Static and Default Routes
R1 # show ip route
When you are finished with the routing configuration, return to privileged EXEC mode and
save the current configuration to NVRAM.
R1#copy run start
Objectives
• Types of Dynamic Routing Protocols
• Difference between RIP and OSPF
• Configure and verify Dynamic Routing (i.e. RIP and OSPF)
• Verify the Routing Table and analysis.
Routing Topology
Command Syntax,
Router (config) # router rip
Router (config-router) # network <Connected Network>
Router (config-router) # exit
Command:
R1 (config) # router rip
R1 (config-router) # network 192.168.100.0
R1 (config-router) # network 192.168.200.0
R1 (config-router) # network 172.16.100.128
R1 (config-router) # exit
R1 (config) #
Part-6: Enable RIP version 2 for Classless Network Address
Part-7: Verify Routing table and Test the network and Save to the NVRAM
R1 # show ip route
R2 # show ip route
R3 # show ip route
Check your routing table for entries that are preceded by a capital letter "R" to ensure that you
are receiving routing updates using RIP. Use show ip route to see the routing table. Ensure that
both routers configured so that you can receive his updates. No updates, no ping
When you are finished with the routing configuration, return to privileged EXEC mode and
save the current configuration to NVRAM.
R1#copy run start
The router ID is a 32-bit number that identifies the OSPF router. Just like IPv4 addresses, it’s
an 8-bit decimal number separated by “. (dot)” and then write four of them in a row. The
router ID is the name of the OSPF router, so to speak, and a unique router ID is always
required for OSPF processing. The router ID recognizes the neighbor. The LSA is also
marked with the router ID of the generated router.
OSPF has two types, one is single area OSPF and Multi area OSPF. In this course we cover
the single area OSPF. In single area OSPF we use area 0.
Command Syntax,
Command:
R1 (config) # router ospf 100
R1 (config-router) # router-id 100.100.100.1
R1 (config-router) # network 192.168.100.0 0.0.0.255 area 0
R1 (config-router) # network 192.168.200.0 0.0.0.255 area 0
R1 (config-router) # network 172.16.100.128 0.0.0.3 area 0
R1 (config-router) # exit
R1 (config) #
Objectives
• To learn about Dynamic Host Configuration Protocol (DHCP): why and how used?
• To build an internetwork and configure DHCP using Packet Tracer
Part-1: Background
Dynamic Host Control Protocol (DHCP) enables you to automatically assign reusable IP
addresses to DHCP clients. The DHCP Server feature is a full DHCP server
implementation that assigns and manages IP addresses from specified address pools within
the router to DHCP clients. Figure 1 shows the basic steps that occur when a DHCP client
requests an IP address from a DHCP server. The client, Host A, sends a DHCPDISCOVER
broadcast message to locate a DHCP Server. A DHCP server offers configuration parameters
(such as an IP address, a MAC address, a domain name, and a lease for the IP address) to the
client in a DHCPOFFER unicast message.
It is assumed that the server requires a fixed IP address in order to allow access
from any PC in the LAN. Configure the server address manually. Ping from the PC2
and PC3 to router ports and server host.
Wireshark is a free and open-source packet analyzer. It is used for network troubleshooting,
analysis, software and communications protocol development, and education. Develop by The
Wireshark team. Website, www.wireshark.org
Wireshark is cross-platform, using the Qt widget toolkit in current releases to implement its
user interface, and using pcap to capture packets; it runs on Linux, macOS, BSD, Solaris, some
other Unix-like operating systems, and Microsoft Windows. There is also a terminal-based
(non-GUI) version called TShark. Wireshark, and the other programs distributed with it such
as TShark, are free software, released under the terms of the GNU General Public License.
A packet sniffer is an application which can capture and analyses network traffic which is
passing through a system’s Network Interface Card (NIC). The sniffer sets the card to
promiscuous mode which means all traffic is read, whether it is addressed to that machine or
not. The figure below shows an attacker sniffing packets from the network, and the Wireshark
packet sniffer/analyzer (formerly known as ethereal).
Wireshark is an open source cross-platform packet capture and analysis tool, with versions for
Windows and Linux. The GUI window gives a detailed breakdown of the network protocol
stack for each packet, colorizing packet details based on protocol, as well as having
functionality to filter and search the traffic, and pick out TCP streams. Wireshark can also save
packet data to files for offline analysis and export/import packet captures to/from other tools.
Statistics can also be generated for packet capture files.
27 |© 2022 Cisco Networking Academy, UIU Version 4.0
Azim Uddin Chowdhury, UIU
Wireshark can be used for network troubleshooting, to investigate security issues, and to
analyses and understand network protocols. The packet sniffer can exploit information passed
in plaintext, i.e. not encrypted. Examples of protocols which pass information in plaintext are
Telnet, FTP, SNMP, POP, and HTTP.
Wireshark is a GUI based network capture tool. There is a command line based version of the
packet capture utility, called TShark. TShark provides many of the same features as it’s big
brother, but is console-based. It can be a good alternative if only command line access is
available, and also uses less resources as it has no GUI to generate.
Start the Wireshark application. When Wireshark is run, all network interface are shown in
screen. Select any network interface for capture traffic i.e. Wi-Fi
Generate some network traffic with a Web Browser, such as Internet Explorer or Chrome.
Your Wireshark window should show the packets, and now look something like.
Packet Details Panel – this shows the details of the selected packet. It shows the different
protocols making up the layers of data for this packet. Layers include Frame, Ethernet, IP,
TCP/UDP/ICMP, and application protocols such as HTTP.
Packet Bytes Panel – shows the packet bytes in Hex and ASCII encodings.
Objectives
• Capture and view HTTP traffic and HTTPS traffic
Background / Scenario
Hypertext Transfer Protocol (HTTP) is an application layer protocol that presents data
via a web browser. With HTTP, there is no safeguard for the exchanged data between
two communicating devices.
With HTTPS, encryption is used via a mathematical algorithm. This algorithm hides
the true meaning of the data that is being exchanged. This is done through the use of
certificates that can be viewed later in this lab.
Regardless of HTTP or HTTPS, it is only recommended to exchange data with websites
that you trust. Just because a site uses HTTPS does not mean it is a trustworthy site.
Threat actors commonly use HTTPS to hide their activities.
In this lab, you will explore and capture HTTP and HTTPS traffic using Wireshark.
e. Browse through the different HTTP messages and select the POST message.
h. In the Wireshark application, expand the capture window vertically and then filter by HTTPS
traffic via port 443.
Enter tcp.port==443 as a filter, and click Apply.
i. Browse through the different HTTPS messages and select an Application Data message.
Question: What has replaced the HTTP section that was in the previous capture file?
Reflection Questions
1. What are the advantages of using HTTPS instead of HTTP?
Ans:
Objectives
• Use of Access Control Lists (ACLs) defined in Routers to control access in a network.
• Difference between Standard and Extended ACLs.
• Configuring and applying Standard and Extended ACLs in Cisco routers.
After an ACL has been properly configured, you can apply it to an interface to filter traffic.
The security appliance can filter packets in both the inbound and outbound direction on an
interface. When an inbound ACL is applied to an interface, the security appliance analyzes
packets against the ACEs after receiving them. If a packet is permitted by the ACL, the
firewall continues to process the packet and eventually passes the packet to the defined
interface.
Create an ACL using the number on R1 (Why not on R2 or R3?) with a statement that
denies access to the Datacenter Network (192.168.1.0/24) from the LAB#7 Network
(192.168.3.0/24).
By default, an access list denies all traffic that does not match a rule. To permit all other
traffic, configure the following statement:
R1 (config)# access-list 1 permit any
For the ACL to actually filter traffic, it must be applied to some router operation. Apply
the ACL by placing it for outbound traffic on the Gigabit Ethernet 0/0 interface.
R1 (config)# interface GigabitEthernet0/0
R1 (config-if)# ip access-group 1 out
R1 (config-if)# exit
Prevent all Private IP Address to Access Internet (Please follow the order)
LAB#6 network is not allowed to access Office Server using http/https/browsing, but All
other Traffic is Permitted for Lab#6 Network.
R2(config)#access-list 100 deny tcp 192.168.4.0 0.0.0.255 host 192.168.1.11 eq www
R2(config)#access-list 100 permit ip any any
Office Server will be allowed to access only by Office Network, but all other networks
will be denied. All networks will be allowed to access any other Datacenter Servers.
LAB-7 PC01 cannot ping File server but only acccess by http, All other Traffic is
Permitted for Data Center Network.
36 |© 2022 Cisco Networking Academy, UIU Version 4.0
Azim Uddin Chowdhury, UIU
Answer-01: (in Router R1)
R1(config)#access-list 102 deny icmp host 192.168.3.10 host 192.168.1.14 echo-reply
R1(config)#access-list 102 permit tcp host 192.168.3.10 host 192.168.1.14 eq www
R1(config)#access-list 102 deny ip host 192.168.3.10 host 192.168.1.14
R1(config)#access-list 102 permit ip any any
Objectives
• To learn about Virtual LAN (VLAN): why and how used?
• To implement Inter-VLAN Routing using Packet Tracer
In this lab, you will create VLANs on both switches in the topology, assign VLANs to
switch access ports, verify that VLANs are working as expected, and then create a VLAN
trunk between the two switches to allow hosts in the same VLAN to communicate through
the trunk, regardless of which switch the host is actually attached to.
Configure the switch hostname and Create VLANs on S1, S2 and S3.
S1(config)#vlan 10
S1(config-vlan)#name faculty/staff
S1(config-vlan)#vlan 20
S1(config-vlan)#name students
S1(config-vlan)#vlan 30
S1(config-vlan)#name guest
S1(config-vlan)#end
Note: Configure others VLAN same as this configuration and also Configure S2
Set the encapsulation type to 802.1Q and assign VLAN 10 to the sub interface.
• Refer to the Address Table and assign the correct IP address to the sub interface.
R1(config)# int g0/0.10
R1(config-subif)# encapsulation dot1Q 10
R1(config-subif)# ip address 172.17.10.1 255.255.255.0
R1(config-subif)# exit
Objectives
• To learn about Network Address Translation (NAT): why and how used?
• Types of NAT: Static and Dynamic NAT, Port Address Translation (PAT)
• To build an internetwork using NAT using Packet Tracer
ISP (Internet Service Provider) uses static routing to reach all networks beyond R1 (Border
routers). However, R1 translate private addresses into public addresses before sending traffic
to ISP (Internet). Therefore, ISP must be configured with the public addresses
(209.165.200.240/29) for R1. But R4 no need to ISP routing because it’s use the link public
address for PAT.
We will show the configurations on R1, Enter the following static route on ISP. This
static route includes all addresses assigned to R1 for public use.
ISP (config) #ip route 209.165.200.240 255.255.255.248 200.165.200.194
Configure RIP in all LAN routers,
R1(config)#router rip
R1(config-router)#net 192.168.12.0
R1(config-router)#net 192.168.220.0
R1(config-router)#net 192.168.221.0
R1(config-router)#exit
Note: Configure others LAN router.
Alternatively, you can clear the routing table with the clear ip route “*” command. A default
route pointing to R1 should appear in the R2 & R3 routing table. From R2, ping the serial
interface (connected to ISP) on R1. The pings should be successful. Troubleshoot if the pings
fail.
Part-2(B): Configure Static NAT
Statically map a public IP address to a private IP address.
The UCAM Server attached to R1 is accessible by outside hosts beyond ISP. Statically
assign the public IP address 209.165.200.241 as the address for NAT to use to map packets to
the private IP address of the UCAM Server at 192.168.12.12. Similarly, assign the public IP
address 209.165.200.242 to the private IP address of the Game Server at 192.168.11.11
Create a standard access control list to identify which inside addresses are translated.
R1 (config)#access-list 1 permit 192.168.10.0 0.0.0.255
R1 (config)#access-list 1 permit 192.168.11.0 0.0.0.255
R1 (config)#access-list 1 permit 192.168.12.0 0.0.0.255
Establish dynamic source translation by binding the pool with the access control list.
A router can have more than one NAT pool and more than one ACL. The following
command tells the router which address pool to use to translate hosts that are allowed by the
ACL.
R1 (config)#ip nat inside source list 1 NAT pool NAT-POOL
In the previous example, what would happen if you needed more than the four public IP
addresses that the pool allows? By tracking port numbers, NAT overloading allows multiple
inside users to reuse a public IP address.
In this task, you will configure PAT (or NAT overload) on R4 so that all internal IP addresses
are translated to the R4 S0/0/0 IP address when connecting to any outside device.
The configuration is similar to dynamic NAT, except that instead of a pool of addresses, the
interface keyword is used to identify the outside IP address. Therefore, no NAT pool is defined.
The overload keyword enables the addition of the port number to the translation.
Create a standard access control list to identify which inside addresses are translated.
R4 (config)#access-list 10 permit 192.168.1.0 0.0.0.255
Establish dynamic source translation by binding the pool with the access control list.
R4(config)#int gig0/0
R4(config-if)#ip nat inside
R4(config-if)#exit
Objectives
• Introduction to Socket Programming concepts.
• Introduction to Python API for Socket Programming.
• To create a Client-Server application using Socket Programming in Python.
In this lab, you will learn the basics of socket programming for TCP connections in Python:
how to create a socket, bind it to a specific address and port, as well as send and receive a
HTTP packet. You will also learn some basics of HTTP header format.
Hints
• Here are a few hints that may help you as you write the program.
• You have to choose a server port to connect to. Ports from 1-1023 are mostly used for
certain services and require administrative privileges. Use port numbers greater than at
least 1023.
• Close your sockets cleanly before exit. If you abort the program, the port may not be
freed.
• You can run all of the processes on the same machine. For your machine, just use
localhost. You can use ifconfig (unix) or ipconfig (windows) to know IP address for
testing multiple machines.
• Be wary of overzealous firewalls stopping your connections - try temporarily disabling
firewalls if you find your connections timeout or are denied.
Create a Socket
This first thing to do is create a socket. The socket.socket function does this. Run
socketExample1.py. The code will create a socket with Address Family : AF_INET (this is IP
version 4 or IPv4), Type : SOCK_STREAM (this means connection oriented TCP protocol).
Connect to a Server
We connect to a remote server on a certain port number. So we need 2 things , IP address and
port number to connect to. So you need to know the IP address of the remote server you are
connecting to. Here we used the ip address of google.com as a sample. Run
socketExample2.py. It creates a socket and then connects. Try connecting to a port different
from port 80 and you should not be able to connect which indicates that the port is not open for
connection. This logic can be used to build a port scanner.
Sending data to a Server
Function sendall will simply send data. Let us send some data to google.com. Run
socketExample3.py. In the above example , we first connect to an ip address and then send the
47 |© 2022 Cisco Networking Academy, UIU Version 4.0
Azim Uddin Chowdhury, UIU
string message "GET / HTTP/1.1\r\n\r\n" to it. The message is actually an "http command" to
fetch the mainpage of a website. Now that we have send some data, it’s time to receive a reply
from the server. So let us do it.
A Simple Server
To write Internet servers, we use the socket function available in socket module to create a
socket object. A socket object is then used to call other functions to setup a socket server. Now
call bind (hostname, port) function to specify a port for your service on the given host. Next,
call the accept method of the returned object. This method waits until a client connects to the
port you specified, and then returns a connection object that represents the connection to that
client.
s = socket(AF_INET, SOCK_STREAM
s.bind((host,port)) # Binds the socket. Note that the input to the bind function is a tuple
# Accepts incoming request from client and returns socket & address to variables q and addr
q,addr=s.accept()
The following code is a very simple client that connects to a given host and port, reads any available
data from the socket, and then exits:
#Client
# TCP Client Code
msg = s.recv(1024) # Receives data upto 1024 bytes and stores in variables msg
Now run this server.py in background and then run above client.py to see the result
You will develop a web server that handles one HTTP request at a time. Your web server should accept
and parse the HTTP request, get the requested file from the server’s file system, create an HTTP
response message consisting of the requested file preceded by header lines, and then send the
response directly to the client. If the requested file is not present in the server, the server should send
an HTTP “404 Not Found” message back to the client.
Skeleton Code
Below find the skeleton code for the Web server. You are to complete the skeleton code. The places
where you need to fill in code are marked with #Fill in start and #Fill in end. Each place may
require one or more lines of code.
try:
message = #Fill in start #Fill in end
filename = message.split()[1] f = open(filename[1:])
outputdata = #Fill in start #Fill in end