Computer Networks Lab Manuval
Computer Networks Lab Manuval
M COLLEGE OF ENGINEERING
KOMARAPALAYAM
OBJECTIVES
➢ To learn and use network commands.
➢ To learn socket programming.
➢ To implement and analyze various network protocols.
➢ To learn and use simulation tools.
➢ To use simulation tools to analyze the performance of various network
protocols
LIST OF EXPERIMENTS
1. Learn to use commands like tcpdump, netstat, ifconfig, nslookup and traceroute.
Capture ping and traceroute PDUs using a network protocol analyzer and examine.
2. Write a HTTP web client program to download a web page using TCP sockets.
3. Applications using TCP sockets like:
▪ Echo client and echo server
▪ Chat
▪ File Transfer
4. Simulation of DNS using UDP sockets.
5. Write a code simulating ARP /RARP protocols.
6. Study of Network simulator (NS) and Simulation of Congestion Control
Algorithms using NS.
7. Study of TCP/UDP performance using Simulation tool.
8. Simulation of Distance Vector/ Link State Routing algorithm.
9. Use a tool like Wireshark to capture packets and examine the packets
10. Simulation of error correction code (like CRC).
TOTAL: 30 PERIODS
EX.NO:1 Learn to use commands like tcpdump, netstat, ifconfig, nslookup and
traceroute.Capture ping and traceroute PDUs using a network protocol
analyzer and examine.
AIM: To Learn to use commands like tcpdump, netstat, ifconfig, nslookup and traceroute ping.
Tcpdump:
The tcpdump utility allows you to capture packets that flow within your network to assist in
network troubleshooting. The following are several examples of using tcpdump with different options.
Traffic is captured based on a specified filter.
Netstat
Netstat is a common command line TCP/IP networking available in most versions of
Windows, Linux, UNIX and other operating systems.
Netstat provides information and statistics about protocols in use and current TCP/IP network
connections.
ipconfig
ipconfig is a console application designed to run from the Windows command prompt. This
utility allows you to get the IP address information of a Windows computer.
From the command prompt, type ipconfig to run the utility with default options. The output of the
default command contains the IP address, network mask, and gateway for all physical and virtual
network adapter.
nslookup
The nslookup (which stands for name server lookup) command is a network utility program used to
obtain information about internet servers. It finds name server information for domains by querying the
Domain Name System.
Trace route:
Traceroute is a network diagnostic tool used to track the pathway taken by a packet on an IP network
from source to destination. Traceroute also records the time taken for each hop the packet makes during
its route to the destination
Commands:
Tcpdump:
Display traffic between 2 hosts:
To display all traffic between two hosts (represented by variables host1 and host2): # tcpdump
host host1 and host2
Display traffic from a source or destination host only:
To display traffic from only a source (src) or destination (dst) host:
# tcpdump src host
# tcpdump dst host
Display traffic for a specific protocol
Provide the protocol as an argument to display only traffic for a specific protocol, for example tcp,
udp, icmp, arp
# tcpdump protocol
For example to display traffic only for the tcp traffic :
# tcpdump tcp
Filtering based on source or destination port
To filter based on a source or destination port:
# tcpdump src port ftp
# tcpdump dst port http
2. Netstat
Netstat is a common command line TCP/IP networking available in most versions of
Windows, Linux, UNIX and other operating systems.
Netstat provides information and statistics about protocols in use and current TCP/IP network
connections. The Windows help screen (analogous to a Linux or UNIX for netstat reads as follows:
displays protocol statistics and current TCP/IP network connections.
#netstat
3. ipconfig
In Windows, ipconfig is a console application designed to run from the Windows command
prompt. This utility allows you to get the IP address information of a Windows computer.
Using ipconfig
From the command prompt, type ipconfig to run the utility with default options. The output of the default
command contains the IP address, network mask, and gateway for all physical and virtual network
adapter.
#ipconfig
4. nslookup
The nslookup (which stands for name server lookup) command is a network utility program used to
obtain information about internet servers. It finds name server information for domains by querying the
Domain Name System.
The nslookup command is a powerful tool for diagnosing DNS problems. You know you're
experiencing a DNS problem when you can access a resource by specifying its IP address but not its
DNS name.
#nslookup
5. Trace route:
Traceroute uses Internet Control Message Protocol (ICMP) echo packets with variable time to live (TTL)
values. The response time of each hop is calculated. To guarantee accuracy, each hop is queried multiple
times (usually three times) to better measure the response of that particular hop.
Traceroute is a network diagnostic tool used to track the pathway taken by a packet on an IP network
from source to destination. Traceroute also records the time taken for each hop the packet makes during
its route to the destination. Traceroute uses Internet Control Message Protocol (ICMP) echo packets
with variable time to live (TTL) values.
The response time of each hop is calculated. To guarantee accuracy, each hop is queried multiple
times (usually three times) to better measure the response of that particular hop. Traceroute sends
packets with TTL values that gradually increase from packet to packet, starting with TTL value of one.
Routers decrement TTL values of packets by one when routing and discard packets whose TTLvalue
has reached zero, returning the ICMP error message ICMP Time Exceeded.
For the first set of packets, the first router receives the packet, decrements the TTL value and
drops the packet because it then has TTL value zero. The router sends an ICMP Time Exceeded message
back to the source. The next set of packets are given a TTL value of two, so the first router forwards the
packets, but the second router drops them and replies with ICMP Time Exceeded.
Proceeding in this way, traceroute uses the returned ICMP Time Exceeded messages to build a list of
routers that packets traverse, until the destination is reached and returns an ICMP Echo Reply
message.
With the tracert command shown above, we're asking tracert to show us the path from the local
computer all the way to the network device with the hostname
www.google.com.
#tracert google.com
6. Ping:
The ping command sends an echo request to a host available on the network. Using this command,
you can check if your remote host is responding well or not. Tracking and isolating hardware and
software problems. Determining the status of the network and various foreign hosts. The ping
command is usually used as a simple way to verify that a computer can communicate over the
networkwith another computer or network device. The ping command operates by sending Internet
Control Message Protocol(ICMP) Echo Request messages to the destination computer and waiting for
a response
# ping172.16.6.2
VIVA(Pre &Post Lab) QUESTIONS:
1. Define network
2. Define network topology
3. What is OSI Layers.
4. What is the use of netstat command?
5. What is nslookup command?
6. What is the purpose of traceroute command?
7. What is ping command.
RESULT:
Thus the various networks commands like tcpdump, netstat, ifconfig, nslookup and traceroute
ping are executed successfully.
Ex.No: 2 Write a HTTP web client program to download a web page using TCP sockets
AIM:
To write a java program for socket for HTTP for web page upload and download .
ALGORITHM:
Client:
1. Start.
2. Create socket and establish the connection with the server.
3. Read the image to be uploaded from the disk
4. Send the image read to the server
5. Terminate the connection
6. Stop.
Server:
1. Start
2. Create socket, bind IP address and port number with the created socket and make server a
listening server.
3. Accept the connection request from the client
4. Receive the image sent by the client.
5. Display the image.
6. Close the connection.
7. Stop.
PROGRAM
Client.java
import javax.swing.*;
import java.net.*;
import java.awt.image.*;
import javax.imageio.*;
import java.io.*;
public class Client {
public static void main(String[] args) throws Exception {
Socket soc;
BufferedImage img = null;
soc = new Socket("localhost", 4000);
System.out.println("Client is running.");
try {
System.out.println("Reading image from disk.");
img = ImageIO.read(new File("introduction_image.jpg"));
// Convert the BufferedImage to byte array
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(img, "jpg", baos);
baos.flush();
byte[] bytes = baos.toByteArray();
baos.close();
System.out.println("Sending image to server.");
OutputStream out = soc.getOutputStream();
DataOutputStream dos = new DataOutputStream(out);
// First, send the size of the image byte array
dos.writeInt(bytes.length);
// Then, send the actual image data
dos.write(bytes, 0, bytes.length);
System.out.println("Image sent to server.");
dos.close();
out.close();
} catch (Exception e) {
System.out.println("Exception: " + e.getMessage());
} finally {
soc.close(); // Ensure the socket is closed
}
}
}
Server.java
import java.net.*;
import java.io.*;
import java.awt.image.*;
import javax.imageio.*;
import javax.swing.*;
public class Server {
public static void main(String[] args) throws Exception {
ServerSocket server = null;
Socket socket = null;
try {
server = new ServerSocket(4000);
System.out.println("Server waiting for image...");
socket = server.accept();
System.out.println("Client connected.");
InputStream in = socket.getInputStream();
DataInputStream dis = new DataInputStream(in);
// Read the size of the image byte array first
int len = dis.readInt();
System.out.println("Image Size: " + len / 1024 + " KB");
// Create a byte array to store the image data
byte[] data = new byte[len];
dis.readFully(data);
// Convert the byte array back to a BufferedImage
InputStream ian = new ByteArrayInputStream(data);
BufferedImage bImage = ImageIO.read(ian);
// Display the image in a JFrame
JFrame f = new JFrame("Server");
ImageIcon icon = new ImageIcon(bImage);
JLabel l = new JLabel();
l.setIcon(icon);
f.add(l);
f.pack();
f.setVisible(true);
dis.close();
in.close();
} catch (Exception e) {
System.out.println("Exception: " + e.getMessage());
} finally {
if (socket != null) {
socket.close(); // Close the socket connection
}
if (server != null) {
server.close(); // Close the server socket
}}}}
OUTPUT:
When you run the client code, following output screen would appear on client side.
VIVA(Pre &Post Lab) QUESTIONS:
1. What is URL.
2. Why is http required?
3. What id http client?
4. what is WWW?
5. Compare HTTP and FTP.
6. Define Socket.
7. What do you mean by active web page?
8. What are the four Main properties of HTTP?
.
RESULT:
Thus the socket program for HTTP for web page upload and download was developed and
executed successfully.
Ex.No: 3 Applications using TCP sockets like: Echo client and echo server,
Chat and File Transfer
AIM
To write a java program for application using TCP Sockets Links
Server
1. Start
2. Create TCP socket, make it a listening socket
3. Accept the connection request sent by the client for connection establishment
4. Receive the message sent by the client
5. Display the received message
6. Send the received message to the client from which it receives
7. Close the connection when client initiates termination and server becomes a listening server,
waiting for clients.
8. Stop.
PROGRAM:
EchoServer.java
import java.net.*;
import java.io.*;
public class EchoServer {
public static void main(String[] args) {
try (ServerSocket serverSocket = new ServerSocket(9000)) {
System.out.println("Server is running... Waiting for a client to connect...");
try (Socket clientSocket = serverSocket.accept();
BufferedReader in = new BufferedReader(new
InputStreamReader(clientSocket.getInputStream()));
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true)) {
System.out.println("Client connected.");
String inputLine;
// Echo loop
while ((inputLine = in.readLine()) != null) {
System.out.println("Received from client: " + inputLine);
out.println(inputLine); // Echo back to client
}
}
} catch (IOException e) {
System.err.println("Error occurred: " + e.getMessage());
e.printStackTrace();
}
}
}
EClient.java
import java.net.*;
import java.io.*;
public class EClient {
public static void main(String[] args) {
try {
InetAddress serverAddress = InetAddress.getLocalHost(); // Get local host address
try (Socket socket = new Socket(serverAddress, 9000);
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true)) {
String userInput;
System.out.println("Connected to the server. Type messages to send:");
// Communication loop
while ((userInput = input.readLine()) != null) {
out.println(userInput); // Send to server
System.out.println("Server: " + in.readLine()); // Read server's response
}
}
} catch (IOException e) {
System.err.println("Error occurred: " + e.getMessage());
e.printStackTrace();
}
}
}
OUTPUT
Server
C:\Program Files\Java\jdk1.5.0\bin>javac EServer.java
C:\Program Files\Java\jdk1.5.0\bin>java EServer
C:\Program Files\Java\jdk1.5.0\bin>
Client
C:\Program Files\Java\jdk1.5.0\bin>javac EClient.java
C:\Program Files\Java\jdk1.5.0\bin>java EClient
Client: Hai Server
Server:Hai Server
Client: Hello
Server:Hello
Client:end
Server:end
Client:ds
Socket Closed!
B.Chat
ALGORITHM
Client
1. Start
2. Create the UDP datagram socket
3. Get the request message to be sent from the user
4. Send the request message to the server
5. If the request message is “END” go to step 10
6. Wait for the reply message from the server
7. Receive the reply message sent by the server
8. Display the reply message received from the server
9. Repeat the steps from 3 to 8
10. Stop
Server
1. Start
2. Create UDP datagram socket, make it a listening socket
3. Receive the request message sent by the client
4. If the received message is “END” go to step 10
5. Retrieve the client’s IP address from the request message received
6. Display the received message
7. Get the reply message from the user
8. Send the reply message to the client
9. Repeat the steps from 3 to 8.
10. Stop.
PROGRAM
UDPserver.java
import java.io.*;
import java.net.*;
class UDPserver
{
public static DatagramSocket ds;
public static byte buffer[]=new byte[1024];
public static int clientport=789,serverport=790;
public static void main(String args[])throws Exception
{
ds=new DatagramSocket(clientport);
System.out.println("press ctrl+c to quit the program");
BufferedReader dis=new BufferedReader(new InputStreamReader(System.in));
InetAddress ia=InetAddress.getLocalHost();
while(true)
{
DatagramPacket p=new DatagramPacket(buffer,buffer.length);
ds.receive(p);
String psx=new String(p.getData(),0,p.getLength());
System.out.println("Client:" + psx);
System.out.println("Server:");
String str=dis.readLine();
if(str.equals("end"))
break;
buffer=str.getBytes();
ds.send(new DatagramPacket(buffer,str.length(),ia,serverport));
}
}
}
UDPclient.java
import java .io.*;
import java.net.*;
class UDPclient
{
public static DatagramSocket ds;
public static int clientport=789,serverport=790;
public static void main(String args[])throws Exception
{
byte buffer[]=new byte[1024];
ds=new DatagramSocket(serverport);
BufferedReader dis=new BufferedReader(new InputStreamReader(System.in));
System.out.println("server waiting");
InetAddress ia=InetAddress.getLocalHost();
while(true)
{
System.out.println("Client:");
String str=dis.readLine();
if(str.equals("end"))
break;
buffer=str.getBytes();
ds.send(new DatagramPacket(buffer,str.length(),ia,clientport));
DatagramPacket p=new DatagramPacket(buffer,buffer.length);
ds.receive(p);
String psx=new String(p.getData(),0,p.getLength());
System.out.println("Server:" + psx);
}
}
}
OUTPUT:
Server
Client
C:\Program Files\Java\jdk1.5.0\bin>javac UDPclient.javaC:\Program Files\Java\jdk1.5.0\bin>java
UDPclient server waiting
Client:Hai Server
Server:Hello Clie
Client:How are You
Server:I am Fine
Client:end
C. File Transfer
AIM:
Algorithm
Server
1. Import java packages and create class file server.
2. Create a new server socket and bind it to the port.
3. Accept the client connection
4. Get the file name and stored into the BufferedReader.
5. Create a new object class file and realine.
6. If file is exists then FileReader read the content until EOF is reached.
7. Stop the program.
Client
1. Import java packages and create class file server.
2. Create a new server socket and bind it to the port.
3. Now connection is established.
4. The object of a BufferReader class is used for storing data content which has been retrieved
from socket object.
5. The connection is closed.
6. Stop the program.
PROGRAM
FileServer.java :
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
public class FileServer {
public static void main(String[] args) {
ServerSocket serverSocket = null;
Socket socket = null;
try {
// Initialize server socket
serverSocket = new ServerSocket(5000);
System.out.println("Server started. Waiting for connections...");
socket = serverSocket.accept();
System.out.println("Client connected: " + InetAddress.getByName("localhost"));
// Specify the file to send
File file = new File("e:\\Bookmarks.html");
try (FileInputStream fis = new FileInputStream(file);
BufferedInputStream bis = new BufferedInputStream(fis);
OutputStream os = socket.getOutputStream()) {
// Read and send file contents
byte[] contents;
long fileLength = file.length();
long current = 0;
long start = System.nanoTime();
while (current != fileLength) {
int size = 10000;
if (fileLength - current >= size) {
current += size;
} else {
size = (int) (fileLength - current);
current = fileLength;
}
contents = new byte[size];
bis.read(contents, 0, size);
os.write(contents);
// Progress output
System.out.print("Sending file ... " + (current * 100) / fileLength + "% complete!\r");
}
os.flush(); // Ensure all data is sent
System.out.println("\nFile sent successfully!");
} catch (IOException e) {
System.err.println("Error reading or sending file: " + e.getMessage());
}
} catch (IOException e) {
System.err.println("Error initializing server: " + e.getMessage());
} finally {
try {
if (socket != null && !socket.isClosed()) {
socket.close();
}
if (serverSocket != null && !serverSocket.isClosed()) {
serverSocket.close();
}
} catch (IOException e) {
System.err.println("Error closing resources: " + e.getMessage());
}
}
}
}
FileClient:
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.InetAddress;
import java.net.Socket;
public class FileClient {
public static void main(String[] args) {
Socket socket = null;
try {
// Initialize socket to connect to the server
socket = new Socket(InetAddress.getByName("localhost"), 5000);
System.out.println("Connected to the server.");
// Buffer to store incoming file data
byte[] contents = new byte[10000];
// Initialize the FileOutputStream to the output file's full path
try (FileOutputStream fos = new FileOutputStream("e:\\Bookmarks1.html");
BufferedOutputStream bos = new BufferedOutputStream(fos);
InputStream is = socket.getInputStream()) {
// Read and write the file content from the server
int bytesRead;
while ((bytesRead = is.read(contents)) != -1) {
bos.write(contents, 0, bytesRead);
}
bos.flush(); // Ensure all data is written to file
System.out.println("File saved successfully!");
} catch (Exception e) {
System.err.println("Error saving file: " + e.getMessage());
}
} catch (Exception e) {
System.err.println("Error connecting to server: " + e.getMessage());
} finally {
try {
if (socket != null && !socket.isClosed()) {
socket.close(); // Ensure the socket is closed
}
} catch (Exception e) {
System.err.println("Error closing socket: " + e.getMessage());
}
}
}
}
Output
server
E:\nwlab>java FileServer File
sent successfully!
E:\nwlab>client
E:\nwlab>java FileClient
File saved successfully!
E:\nwlab>
1. What is LAN.
2. Mention the roles of Transport layer.
3. State the differences between TCP and UDP
4. What are well-known ports?
5. What are MAC addresses?
6. What is TCP Echo Client Server?
7. Define the three states of TCP Connection establishment and termination.
8. List the types of sockets
RESULT:
Thus the java application program using TCP Sockets was developed and executed
successfully.
Ex.No: 4 Simulation of DNS using UDP Sockets
AIM
To write a java program for DNS application
PRE LAB DISCUSSION:
• The Domain Name System (DNS) is a hierarchical decentralized naming system for
computers, services, or other resources connected to the Internet or a private network. It
associates various information with domain names assigned to each of the participating
entities.
• The domain name space refers a hierarchy in the internet naming structure. This hierarchy
has multiple levels (from 0 to 127), with a root at the top. The following diagram shows
the domain name space hierarchy.
• Name server contains the DNS database. This database comprises of various names and
their corresponding IP addresses. Since it is not possible for a single server to maintain
entire DNS database, therefore, the information is distributed among many DNS servers.
• Types of Name Servers
• Root Server is the top level server which consists of the entire DNS tree. It does not contain
the information about domains but delegates the authority to the other server
• Primary Server stores a file about its zone. It has authority to create, maintain, and update
the zone file.
• Secondary Server transfers complete information about a zone from another server which
may be primary or secondary server. The secondary server does not have authority to create
or update a zone file.
• DNS is a TCP/IP protocol used on different platforms. The domain name space is divided
into three different sections: generic domains, country domains, and inverse domain.
• The main function of DNS is to translate domain names into IP Addresses, which
computers can understand. It also provides a list of mail servers which accept Emails for
each domain name. Each domain name in DNS will nominate a set of name servers to be
authoritative for its DNS records.
ALGORITHM
Server
1. Start
2. Create UDP datagram socket
3. Create a table that maps host name and IP address
4. Receive the host name from the client
5. Retrieve the client’s IP address from the received datagram
6. Get the IP address mapped for the host name from the table.
7. Display the host name and corresponding IP address
8. Send the IP address for the requested host name to the client
9. Stop.
Client
1. Start
2. Create UDP datagram socket.
3. Get the host name from the client
4. Send the host name to the server
5. Wait for the reply from the server
6. Receive the reply datagram and read the IP address for the requested host name
7. Display the IP address.
8. Stop.
PROGRAM
Udpdnsserver.java
import java.io.*;
import java.net.*;
public class udpdnsserver
{
private static int indexOf(String[] array, String str)
{
str = str.trim();
for (int i=0; i < array.length; i++)
{
if (array[i].equals(str))
return i;
}
return -1;
}
public static void main(String arg[])throws IOException
{
String[] hosts = {"yahoo.com", "gmail.com","cricinfo.com", "facebook.com"};
String[] ip = {"68.180.206.184", "209.85.148.19","80.168.92.140", "69.63.189.16"};
System.out.println("Press Ctrl + C to Quit");
while (true)
{
DatagramSocket serversocket=new DatagramSocket(1362);
byte[] senddata = new byte[1021];
byte[] receivedata = new byte[1021];
DatagramPacket recvpack = new DatagramPacket(receivedata, receivedata.length);
serversocket.receive(recvpack);
String sen = new String(recvpack.getData());
InetAddress ipaddress = recvpack.getAddress();
int port = recvpack.getPort();
String capsent;
System.out.println("Request for host " + sen);
if(indexOf (hosts, sen) != -1)
capsent = ip[indexOf (hosts, sen)];
else
capsent = "Host Not Found";
senddata = capsent.getBytes();
DatagramPacket pack = new DatagramPacket (senddata, senddata.length,ipaddress,port);
serversocket.send(pack);
serversocket.close();
}}} }}}
udpdnsclient.java
import java.io.*;
import java.net.*;
public class udpdnsclient {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
DatagramSocket clientSocket = new DatagramSocket();
InetAddress ipAddress;
// Check if the user provided the address or use localhost
if (args.length == 0) {
ipAddress = InetAddress.getLocalHost();
} else {
ipAddress = InetAddress.getByName(args[0]);
}
byte[] sendData = new byte[1024];
byte[] receiveData = new byte[1024];
int port = 1362;
System.out.print("Enter the hostname: ");
String hostname = br.readLine();
sendData = hostname.getBytes();
// Send DNS request to the server
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, ipAddress, port);
clientSocket.send(sendPacket);
// Receive the response from the server
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
clientSocket.receive(receivePacket);
// Extract the IP address from the received packet
String modifiedSentence = new String(receivePacket.getData(), 0, receivePacket.getLength());
System.out.println("IP Address: " + modifiedSentence);
// Close the socket
clientSocket.close();
}
}
OUTPUT
Server
javac udpdnsserver.java
java udpdnsserver
Press Ctrl + C to Quit Request for host yahoo.com
Request for host cricinfo.com
Request for host youtube.com
Client
>javac udpdnsclient.java
>java udpdnsclient
Enter the hostname : yahoo.com
IP Address: 68.180.206.184
>java udpdnsclient
Enter the hostname : cricinfo.com
IP Address: 80.168.92.140
>java udpdnsclient
Enter the hostname : youtube.com
IP Address: Host Not Found
RESULT:
Thus the java application program using UDP Sockets to implement DNS was developed and
executed successfully
Ex.No:5 Write a code simulating ARP /RARP protocols
AIM:
To write a java program for simulating ARP and RARP protocols using TCP.
• Address Resolution Protocol (ARP) is a low-level network protocol for translating network
layer addresses into link layer addresses.ARP lies between layers 2 and 3 of the OSI model,
although ARP was not included in the OSI framework and allows computers to introduce
each other across a network prior to communication.Because protocols are basic network
communication units, address resolution is dependent on protocols such as ARP, which is
the only reliable method of handling required tasks.
• The Address Resolution Protocol (ARP) is a communication protocol used for
discovering the link layer address, such as a MAC address, associated with a given internet
layer address,
• When configuring a new network computer, each system is assigned an Internet Protocol
(IP) address for primary identification and communication. A computer also has a unique
media access control (MAC) address identity. Manufacturers embed the MAC address in
the local area network (LAN) card. The MAC address is also known as the computer’s
physical address.
• Address Resolution Protocol (ARP) is used to resolve an IPv4 address (32 bit Logical
Address) to the physical address (48 bit MAC Address). Network Applications at the
Application Layer use IPv4 Address to communicate with another device.
• Reverse Address Resolution Protocol (RARP) is a network protocol used to resolve a data
link layer address to the corresponding network layer address. For example,
RARP is used to resolve a Ethernet MAC address to an IP address.
• The client broadcasts a RARP packet with an ethernet broadcast address, and it's own
physical address in the data portion. The server responds by telling the client it's IP address.
Note there is no name sent. Also note there is no security.
• Media Access Control (MAC) addresses need to be individually configured on the servers
by an administrator. RARP is limited to serving only IP addresses.Reverse ARP differs
from the Inverse Address Resolution Protocol which is designed to obtain the IP
address associated with a local Frame Relay data link connection identifier. InARP is not
used in Ethernet.
ALGORITHM:
Client
1. Start the program
2. Create socket and establish connection with the server.
3. Get the IP address to be converted into MAC address from the user.
4. Send this IP address to server.
5. Receive the MAC address for the IP address from the server.
6. Display the received MAC address
7. Terminate the connection
Server
1. Start the program
2. Create the socket, bind the socket created with IP address and port number and make it a
listening socket.
3. Accept the connection request when it is requested by the client.
4. Server maintains the table in which IP and corresponding MAC addresses are
stored.
5. Receive the IP address sent by the client.
6. Retrieve the corresponding MAC address for the IP address and send it to the client.
7. Close the connection with the client and now the server becomes a listening server
waiting for the connection request from other clients
8. Stop
PROGRAM
Client: ClientARP.java
import java.io.*;
import java.net.*;
class ClientARP {
public static void main(String[] args) {
try {
// Input reader to get input from the console
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
// Connect to the server at localhost (127.0.0.1) on port 5000
Socket clsct = new Socket("127.0.0.1", 5000);
// Input and output streams for socket communication
DataInputStream din = new DataInputStream(clsct.getInputStream());
DataOutputStream dout = new DataOutputStream(clsct.getOutputStream());
// Prompt the user to enter the IP address
System.out.println("Enter the Logical address (IP): ");
String str1 = in.readLine();
// Send the IP address to the server
dout.writeUTF(str1); // Using writeUTF instead of writeBytes
dout.flush(); // Ensure the data is sent immediately
// Receive the corresponding physical address (MAC) from the server
String str = din.readUTF(); // Using readUTF to read string data
// Print the received physical address
System.out.println("The Physical Address is: " + str);
// Close the socket and streams
dout.close();
din.close();
clsct.close();
} catch (Exception e) {
// Print the stack trace for debugging purposes
e.printStackTrace();
}
}
}
Server: ServerARP.java
import java.io.*;
import java.net.*;
class ServerARP {
public static void main(String[] args) {
try {
// Start server socket on port 5000
ServerSocket serverSocket = new ServerSocket(5000);
System.out.println("Server is running and waiting for client...");
while (true) {
// Accept a client connection
Socket socket = serverSocket.accept();
System.out.println("Client connected!");
// Input and output streams for socket communication
DataInputStream din = new DataInputStream(socket.getInputStream());
DataOutputStream dout = new DataOutputStream(socket.getOutputStream());
// Read the IP address sent by the client
String clientIP = din.readUTF(); // Using readUTF
// Predefined IP-MAC mapping
String[] ipAddresses = {"165.165.80.80", "165.165.79.1"};
String[] macAddresses = {"6A:08:AA:C2", "8A:BC:E3:FA"};
// Check if the client's IP matches any predefined IP
boolean found = false;
for (int i = 0; i < ipAddresses.length; i++) {
if (clientIP.equals(ipAddresses[i])) {
// Send the corresponding MAC address to the client
dout.writeUTF(macAddresses[i]); // Using writeUTF
found = true;
break;
}
}
// If IP not found, send a message
if (!found) {
dout.writeUTF("MAC Address not found");
}
// Close client socket and streams after each request
din.close();
dout.close();
socket.close();
System.out.println("Client disconnected.");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Output:
E:\networks>java Serverarp
E:\networks>java Clientarp
Enter the Logical address(IP):
165.165.80.80
The Physical Address is: 6A:08:AA:C2
b)Program for Reverse Address Resolution Protocol (RARP) using
UDPALGORITHM:
Client
1. Start the program
2. Create datagram socket
3. Get the MAC address to be converted into IP address from the user.
4. Send this MAC address to server using UDP datagram.
5. Receive the datagram from the server and display the corresponding IP address.
6. Stop
Server
1. Start the program.
2. Server maintains the table in which IP and corresponding MAC addresses are
stored.
3. Create the datagram socket
4. Receive the datagram sent by the client and read the MAC address sent.
5. Retrieve the IP address for the received MAC address from the table.
6. Display the corresponding IP address.
7. Stop
PROGRAM:
Client:
import java.io.*;
import java.net.*;
import java.util.*;
class Clientrarp12
{
public static void main(String args[])
{
try
{
DatagramSocket client=new DatagramSocket(); InetAddress
addr=InetAddress.getByName("127.0.0.1"); byte[] sendbyte=new byte[1024];
byte[] receivebyte=new byte[1024];
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
System.out.println("Enter the Physical address (MAC):")
String str=in.readLine();
sendbyte=str.getBytes();
DatagramPacket sender=newDatagramPacket(sendbyte,sendbyte.length,addr,1309);
client.send(sender);
DatagramPacket receiver=new DatagramPacket(receivebyte,receivebyte.length);
client.receive(receiver);
String s=new String(receiver.getData());
System.out.println("The Logical Address is(IP): "+s.trim());
client.close();
}
catch(Exception e)
{
System.out.println(e);
}}}
Server:
import java.io.*;
import java.net.*;
import java.util.*;
class Serverrarp12
{
public static void main(String args[])
{
try{
DatagramSocket server=new DatagramSocket(1309);
while(true)
{
byte[] sendbyte=new byte[1024];
byte[] receivebyte=new byte[1024];
DatagramPacket receiver=new DatagramPacket(receivebyte,receivebyte.length);
server.receive(receiver);
String str=new String(receiver.getData());
String s=str.trim();
InetAddress addr=receiver.getAddress();
int port=receiver.getPort();
String ip[]={"165.165.80.80","165.165.79.1"};
String mac[]={"6A:08:AA:C2","8A:BC:E3:FA"};
for(int i=0;i<ip.length;i++)
{
if(s.equals(mac[i]))
{
sendbyte=ip[i].getBytes();
DatagramPacket sender = new
DatagramPacket(sendbyte,sendbyte.length,addr,port);
server.send(sender);
break;
}}
break;
}}}catch(Exception e)
{
System.out.println(e);
}}}
Output:
I:\ex>java Serverrarp12
I:\ex>java Clientrarp12
Enter the Physical address (MAC):
6A:08:AA:C2
The Logical Address is(IP): 165.165.80.80
RESULT :
Thus the program for implementing to display simulating ARP and RARP protocols was
executed successfully and output is verified.
Ex.No: 6 Study of Network simulator (NS) and Simulation of Congestion Control
Algorithms using NS
AIM:
To Study Network simulator (NS).and Simulation of Congestion Control Algorithms
using NS
Packet loss
Packet loss occurs when one or more packets of data travelling across a computer network
fail to reach their destination. Packet loss is distinguished as one of the three main error types
encountered in digital communications; the other two being bit error and spurious packets caused
due to noise.
Packets can be lost in a network because they may be dropped when a queue in the network
node overflows. The amount of packet loss during the steady state is another important property
of a congestion control scheme. The larger the value of packet loss, the more difficult it is for
transportlayer protocols to maintain high bandwidths, the sensitivity to loss of individual
packets, as well as to frequency and patterns of loss among longer packet sequences is strongly
dependent on the application itself.
Throughput
Throughput is the main performance measure characteristic, and most widely used. In
communication networks, such as Ethernet or packet radio, throughput or network throughput is
the average rate of successful message delivery over a communication channel. Throughput is
usually measured inbitsper second (bit/s orbps), and sometimes in data packets per second or data
packets per time slot. This measures how soon the receiver is able to get a certain amount ofdata
send by the sender. It is determined as the ratio of the total data received to the end to end delay.
Throughput is an important factor which directly impacts the network performance.
Delay
Delay is the time elapsed while a packet travels from one point e.g., source premise or
network ingress to destination premise or network degrees. The larger the value of delay, the more
difficult it is for transport layer protocols to maintain highbandwidths. We will calculate end to
end delay
Queue Length
A queuing system in networks can be described as packets arriving for service, waiting for
service if it is not immediate, and if having waited for service, leaving the system after being
served. Thus queue length is very important characteristic to determine that how well the active
queue management of the congestion control algorithm has been working.
Program:
include <wifi_lte/wifi_lte_rtable.h>
struct r_hist_entry *elm, *elm2;
int num_later = 1;
elm = STAILQ_FIRST(&r_hist_);
while (elm != NULL && num_later <= num_dup_acks_){
num_later;
elm = STAILQ_NEXT(elm, linfo_);
}
if (elm != NULL){
elm = findDataPacketInRecvHistory(STAILQ_NEXT(elm,linfo_));
if (elm != NULL){
elm2 = STAILQ_NEXT(elm, linfo_);
while(elm2 != NULL){
if (elm2->seq_num_ < seq_num && elm2->t_recv_ <
time){
STAILQ_REMOVE(&r_hist_,elm2,r_hist_entry,linfo_);
delete elm2;
} else
elm = elm2;
elm2 = STAILQ_NEXT(elm, linfo_);
}
}
}
}
void DCCPTFRCAgent::removeAcksRecvHistory(){
struct r_hist_entry *elm1 = STAILQ_FIRST(&r_hist_);
struct r_hist_entry *elm2;
int num_later = 1;
while (elm1 != NULL && num_later <= num_dup_acks_){
num_later;
elm1 = STAILQ_NEXT(elm1, linfo_);
}
if(elm1 == NULL)
return;
elm2 = STAILQ_NEXT(elm1, linfo_);
while(elm2 != NULL){
if (elm2->type_ == DCCP_ACK){
STAILQ_REMOVE(&r_hist_,elm2,r_hist_entry,linfo_);
delete elm2;
} else {
elm1 = elm2;
}
elm2 = STAILQ_NEXT(elm1, linfo_);
}
}
inline r_hist_entry
*DCCPTFRCAgent::findDataPacketInRecvHistory(r_hist_entry *start){
while(start != NULL && start->type_ == DCCP_ACK)
start = STAILQ_NEXT(start,linfo_);
return start;
}
VIVA (Pre and Post Lab) QUESTIONS:
Result:
Thus we have Studied Network simulator (NS) and Simulation of Congestion Control
Algorithms using NS.
Ex.No: 7 Study of TCP/UDP performance using Simulation tool.
AIM:
Output:
46
`
UDP Performance
ALGORITHM :
1. Create a Simulator object.
2. Set routing as dynamic.
3. Open the trace and nam trace files.
4. Define the finish procedure.
5. Create nodes and the links between them.
6. Create the agents and attach them to the nodes.
7. Create the applications and attach them to the UDP agent.
8. Connect udp and null agents.
9. Run the simulation.
PROGRAM:
set ns [new Simulator]
$ns color 0 Blue
$ns color 1 Red
$ns color 2 Yellow
set n0 [$ns node]
set n1 [$ns node]
set n2 [$ns node]
set n3 [$ns node]
set f [open udpout.tr w]
$ns trace-all $f
set nf [open udpout.nam w]
$ns namtrace-all $nf
$ns duplex-link $n0 $n2 5Mb 2ms DropTail
$ns duplex-link $n1 $n2 5Mb 2ms DropTail
$ns duplex-link $n2 $n3 1.5Mb 10ms DropTail
$ns duplex-link-op $n0 $n2 orient right-up
$ns duplex-link-op $n1 $n2 orient right-down
$ns duplex-link-op $n2 $n3 orient right
$ns duplex-link-op $n2 $n3 queuePos 0.5
set udp0 [new Agent/UDP]
$ns attach-agent $n0 $udp0
set cbr0 [new Application/Traffic/CBR]
$cbr0 attach-agent $udp0
set udp1 [new Agent/UDP]
$ns attach-agent $n3 $udp1
`
$udp1 set class_ 0
set cbr1 [new Application/Traffic/CBR]
$cbr1 attach-agent $udp1
set null0 [new Agent/Null]
$ns attach-agent $n1 $null0
set null1 [new Agent/Null]
$ns attach-agent $n1 $null1
$ns connect $udp0 $null0
$ns connect $udp1 $null1
$ns at 1.0 "$cbr0 start"
$ns at 1.1 "$cbr1 start"
puts [$cbr0 set packetSize_]
puts [$cbr0 set interval_]
$ns at 3.0 "finish"
proc finish {} {
global ns f nf
$ns flush-trace
close $f
close $nf
puts "Running nam.."
exec nam udpout.nam &
exit 0
}
$ns run
Output:
`
VIVA (Pre & Post)Lab Questions
1. How is a TCP connection closed?
2. What is Flow control in TCP?
3. What protocol is TCP?
4. How is TCP Reliable?
5. What is TCP?
6. Explain the three way Handshake process?
7. What are the 6 TCP flags?
8. Explain how TCP avoids a network meltdown?
RESULT :
Thus the study of TCP/UDP performance is done successfully.
`
Ex.No: 8 Simulation of Distance Vector/ Link State Routing algorithm.
AIM:
To simulate the Distance vector and link state routing protocols using NS2.
RE LAB DISCUSSION:
LINK STATE ROUTING
Routing is the process of selecting best paths in a network. In the past, the term routing was
also used to mean forwarding network traffic among networks. However this latter function is
much better described as simply forwarding. Routing is performed for many kinds of networks,
including the telephone network (circuit switching), electronic data networks (such as the Internet),
and transportation networks. This article is concerned primarily with routing in electronic data
networks using packet switching technology.
In packet switching networks, routing directs packet forwarding (the transit of logically
addressed network packets from their source toward their ultimate destination) through
intermediate nodes. Intermediate nodes are typically network hardware devices such as routers,
bridges, gateways, firewalls, or switches. General-purpose computers can also forward packets
and perform routing, though they are not specialized hardware and may suffer from limited
performance. The routing process usually directs forwarding on the basis of routing tables which
maintain a record of the routes to various network destinations. Thus, constructing routing tables,
which are held in the router's memory, is very important for efficient routing. Most routing
algorithms use only one network path at a time. Multipath routing techniques enable the use of
multiple alternative paths.
In case of overlapping/equal routes, the following elements are considered in order to
decide which routes get installed into the routing table (sorted by priority):
1. Prefix-Length: where longer subnet masks are preferred (independent of whether it is
within a routing protocol or over different routing protocol)
2. Metric: where a lower metric/cost is preferred (only valid within one and the same
routing protocol)
3. Administrative distance: where a lower distance is preferred (only valid between different
routing protocols)
Routing, in a more narrow sense of the term, is often contrasted with bridging in its
assumption that network addresses are structured and that similar addresses imply proximity
within the network. Structured addresses allow a single routing table entry to represent the route
to a group of devices. In large networks, structured addressing (routing, in the narrow sense)
outperforms unstructured addressing (bridging). Routing has become the dominant form of
addressing on the Internet. Bridging is still widely used within localized environments.
`
b. Flooding
Flooding is a simple routing algorithm in which every incoming packet is sent through
every outgoing link except the one it arrived on. Flooding is used in bridging and in systems such
as Usenet and peer-to-peer file sharing and as part of some routing protocols, including OSPF,
DVMRP, and those used in ad-hoc wireless networks.There are generally two types of flooding
available, Uncontrolled Flooding and Controlled Flooding. Uncontrolled Flooding is the fatallaw
of flooding. All nodes have neighbours and route packets indefinitely. More than two neighbours
creates a broadcast storm.
Controlled Flooding has its own two algorithms to make it reliable, SNCF (Sequence
Number Controlled Flooding) and RPF (Reverse Path Flooding). In SNCF, the node attaches its
own address and sequence number to the packet, since every node has a memory of addresses and
sequence numbers. If it receives a packet in memory, it drops it immediately while in RPF, the
node will only send the packet forward. If it is received from the next node, it sends it back tothe
sender.
Method
Routers using distance-vector protocol do not have knowledge of the entire path to a
destination. Instead they use two methods:
1. Direction in which router or exit interface a packet should be forwarded.
2. Distance from its destination
Distance-vector protocols are based on calculating the direction and distance to any link in
a network. "Direction" usually means the next hop address and the exit interface. "Distance" isa
measure of the cost to reach a certain node. The least cost route between any two nodes is the route
with minimum distance. Each node maintains a vector (table) of minimum distance to
`
every node. The cost of reaching a destination is calculated using various route metrics. RIP uses
the hop count of the destination whereas IGRP takes into account other information such as node
delay and available bandwidth.
Updates are performed periodically in a distance-vector protocol where all or part of a
router's routing table is sent to all its neighbors that are configured to use the same distance- vector
routing protocol. RIP supports cross-platform distance vector routing whereas IGRP is a Cisco
Systems proprietary distance vector routing protocol. Once a router has this information it is able
to amend its own routing table to reflect the changes and then inform its neighbors of the changes.
This process has been described as ‗routing by rumor‘ because routers are relying on the
information they receive from other routers and cannot determine if the information is actually
valid and true. There are a number of features which can be used to help with instability and
inaccurate routing information.
EGP and BGP are not pure distance-vector routing protocols because a distance-vector
protocol calculates routes based only on link costs whereas in BGP, for example, the local route
preference value takes priority over the link cost.
Count-to-infinity problem
The Bellman–Ford algorithm does not prevent routing loops from happening and suffers
from the count-to-infinity problem. The core of the count-to-infinity problem is that if A tells B
that it has a path somewhere, there is no way for B to know if the path has B as a part of it. To see
the problem clearly, imagine a subnet connected like A–B–C–D–E–F, and let the metric between
the routers be "number of jumps". Now suppose that A is taken offline. In the vector- update-
process B notices that the route to A, which was distance 1, is down – B does not receive the vector
update from A. The problem is, B also gets an update from C, and C is still not aware of the fact
that A is down – so it tells B that A is only two jumps from C (C to B to A), which is false. This
slowly propagates through the network until it reaches infinity (in which case the algorithm
corrects itself, due to the relaxation property of Bellman–Ford).
ALGORITHM:
1. Create a Simulator object.
2. Set routing as dynamic.
3. Open the trace and nam trace files.
4. Define the finish procedure.
5. Create nodes and the links between them.
6. Create the agents and attach them to the nodes.
7. Create the applications and attach them to the udp agent.
8. Connect udp and null..
9. At 1 sec the link between node 1 and 2 is broken.
10. At 2 sec the link is up again.
11. Run the simulation.
`
LINK STATE ROUTING PROTOCOL
PROGRAM
set ns [new Simulator]
$ns rtproto LS
set nf [open linkstate.nam w]
$ns namtrace-all $nf
set f0 [open linkstate.tr w]
$ns trace-all $f0
proc finish {} {
global ns f0 nf
$ns flush-trace
close $f0
close $nf
exec nam linkstate.nam &
exit 0
}
for {set i 0} {$i <7} {incr i} {
set n($i) [$ns node]
}
for {set i 0} {$i <7} {incr i} {
$ns duplex-link $n($i) $n([expr ($i+1)%7]) 1Mb 10ms DropTail
}
set udp0 [new Agent/UDP]
$ns attach-agent $n(0) $udp0
set cbr0 [new Application/Traffic/CBR]
$cbr0 set packetSize_ 500
$cbr0 set interval_ 0.005
$cbr0 attach-agent $udp0
set null0 [new Agent/Null]
$ns attach-agent $n(3) $null0
$ns connect $udp0 $null0
$ns at 0.5 "$cbr0 start"
$ns rtmodel-at 1.0 down $n(1) $n(2)
$ns rtmodel-at 2.0 up $n(1) $n(2)
$ns at 4.5 "$cbr0 stop"
$ns at 5.0 "finish"
$ns run
`
Output:
`
DISTANCE VECTOR ROUTING ALGORITHM
ALGORITHM:
1. Create a simulator object
2. Set routing protocol to Distance Vector routing
3. Trace packets on all links onto NAM trace and text trace file
4. Define finish procedure to close files, flush tracing and run NAM
5. Create eight nodes
6. Specify the link characteristics between nodes
7. Describe their layout topology as a octagon
8. Add UDP agent for node n1
9. Create CBR traffic on top of UDP and set traffic parameters.
10. Add a sink agent to node n4
11. Connect source and the sink
12. Schedule events as follows:
a. Start traffic flow at 0.5
b. Down the link n3-n4 at 1.0
c. Up the link n3-n4 at 2.0
d. Stop traffic at 3.0
e. Call finish procedure at 5.0
13. Start the scheduler
14. Observe the traffic route when link is up and down
15. View the simulated events and trace file analyze it
16. Stop
PROGRAM
#Distance vector routing protocol – distvect.tcl
#Create a simulator object
set ns [new Simulator]
#Use distance vector routing
$ns rtproto DV
#Open the nam trace file
set nf [open out.nam w]
$ns namtrace-all $nf
# Open tracefile
set nt [open trace.tr w]
$ns trace-all $nt
#Define 'finish' procedure
`
proc finish {}
{
global ns nf
$ns flush-trace
#Close the trace file
close $nf
#Execute nam on the trace file
exec nam -a out.nam &
exit 0
}
# Create 8 nodes
set n1 [$ns node]
set n2 [$ns node]
set n3 [$ns node]
set n4 [$ns node]
set n5 [$ns node]
set n6 [$ns node]
set n7 [$ns node]
set n8 [$ns node]
# Specify link characterestics
$ns duplex-link $n1 $n2 1Mb 10ms DropTail
$ns duplex-link $n2 $n3 1Mb 10ms DropTail
$ns duplex-link $n3 $n4 1Mb 10ms DropTail
$ns duplex-link $n4 $n5 1Mb 10ms DropTail
$ns duplex-link $n5 $n6 1Mb 10ms DropTail
$ns duplex-link $n6 $n7 1Mb 10ms DropTail
$ns duplex-link $n7 $n8 1Mb 10ms DropTail
$ns duplex-link $n8 $n1 1Mb 10ms DropTail
# specify layout as a octagon
$ns duplex-link-op $n1 $n2 orient left-up
$ns duplex-link-op $n2 $n3 orient up
$ns duplex-link-op $n3 $n4 orient right-up
$ns duplex-link-op $n4 $n5 orient right
$ns duplex-link-op $n5 $n6 orient right-down
$ns duplex-link-op $n6 $n7 orient down
$ns duplex-link-op $n7 $n8 orient left-down
$ns duplex-link-op $n8 $n1 orient left
#Create a UDP agent and attach it to node n1
set udp0 [new Agent/UDP]
$ns attach-agent $n1 $udp0
#Create a CBR traffic source and attach it to udp0
`
set cbr0 [new Application/Traffic/CBR]
$cbr0 set packetSize_ 500
$cbr0 set interval_ 0.005
$cbr0 attach-agent $udp0
#Create a Null agent (a traffic sink) and attach it to node n4
set null0 [new Agent/Null]
$ns attach-agent $n4 $null0
#Connect the traffic source with the traffic sink
$ns connect $udp0 $null0
#Schedule events for the CBR agent and the network dynamics
$ns at 0.0 "$n1 label Source"
$ns at 0.0 "$n4 label Destination"
$ns at 0.5 "$cbr0 start"
$ns rtmodel-at 1.0 down $n3 $n4
$ns rtmodel-at 2.0 up $n3 $n4
$ns at 4.5 "$cbr0 stop"
#Call the finish procedure after 5 seconds of simulation time
$ns at 5.0 "finish"
#Run the simulation
$ns run
OUTPUT
$ ns distvect.tcl
`
`
VIVA (Pre &Post Lab) Questions:
RESULT:
Thus the simulation for Distance vector and link state routing protocols was done using
NS2.
`
Ex.No:9 Use a tool like Wireshark to capture packets and examine the packets
AIM:
To write a Use a tool like Wireshark to capture packets and examine the packets.
The program will display basic information about each captured packet, such as source and destination IP
The program will run indefinitely until the user decides to stop capturing packets.ALGORITHM:
import the required libraries (scapy).
PROGRAM:
import sys
from scapy.all import sniff, IP
def packet_handler(packet):
if IP in packet:
src_ip = packet[IP].src
dst_ip = packet[IP].dst
protocol = packet[IP].proto
packet_summary = packet.summary()
print(f"Source IP: {src_ip}, Destination IP: {dst_ip}, Protocol: {protocol}, Summary:
{packet_summary}")
def main():
try:
print("Starting packet capture... (Press Ctrl+C to stop)")
sniff(prn=packet_handler, store=0)
except KeyboardInterrupt:
print("\nPacket capture stopped.")
if name == " main ":
main()
Result:
AIM:
To implement error checking code using java.
PRE LAB DISSCUSSION:
The cyclic redundancy check, or CRC, is a technique for detecting errors in digital data, but
not for making corrections when errors are detected. It is used primarily in data transmission.
In the CRC method, a certain number of check bits, often called a checksum, are appended to
the message being transmitted. The receiver can determine whether or not the check bits agree with
the data, to ascertain with a certain degree of probability whether or not an error occurred in
transmission.
CRC involves binary division of the data bits being sent by a predetermined divisor agreed
upon by the communicating system. The divisor is generated using polynomials. So, CRC is also called
polynomial code checksum.
CRC uses Generator Polynomial which is available on both sender and receiver side. An
example generator polynomial is of the form like x3 + x + 1. This generator polynomial represents key
1011. Another example is x2 + 1 that represents key 101.
Sender Side (Generation of Encoded Data from Data and Generator Polynomial (or Key)):
• The binary data is first augmented by adding k-1 zeros in the end of the data
• Use modulo-2 binary division to divide binary data by the key and store remainder of
division.
• Append the remainder at the end of the data to form the encoded data and send the same
Perform modulo-2 division again and if remainder is 0, then there are no errors.
Modulo 2 Division:
• The process of modulo-2 binary division is the same as the familiar division process we use
for decimal numbers. Just that instead of subtraction, we use XOR here.
• In each step, a copy of the divisor (or data) is XORed with the k bits of the dividend (or key).
• The result of the XOR operation (remainder) is (n-1) bits, which is used for the next step
after 1 extra bit is pulled down to make it n bits long.
• When there are no bits left to pull down, we have a result. The (n-1)-bit remainder which is
appended at the sender side.
ALGORITHM:
PROGRAM:
crc_gen.java
import java.io.*;
class crc_gen {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int[] data;
int[] div;
int[] divisor;
int[] rem;
int[] crc;
int data_bits, divisor_bits, tot_length;
System.out.println("Enter number of data bits : ");
data_bits = Integer.parseInt(br.readLine());
data = new int[data_bits];
System.out.println("Enter data bits : ");
for (int i = 0; i < data_bits; i++) {
data[i] = Integer.parseInt(br.readLine());
}
System.out.println("Enter number of bits in divisor : ");
divisor_bits = Integer.parseInt(br.readLine());
divisor = new int[divisor_bits];
System.out.println("Enter Divisor bits : ");
for (int i = 0; i < divisor_bits; i++) {
divisor[i] = Integer.parseInt(br.readLine());
}
System.out.print("Data bits are : ");
for (int i = 0; i < data_bits; i++) {
System.out.print(data[i]);
}
System.out.println();
System.out.print("Divisor bits are : ");
for (int i = 0; i < divisor_bits; i++) {
System.out.print(divisor[i]);
}
System.out.println();
tot_length = data_bits + divisor_bits - 1;
div = new int[tot_length];
rem = new int[tot_length];
crc = new int[tot_length];
/* CRC GENERATION */
for (int i = 0; i < data.length; i++) {
div[i] = data[i];
}
System.out.print("Dividend (after appending 0's) are : ");
for (int i = 0; i < div.length; i++) {
System.out.print(div[i]);
}
System.out.println();
for (int j = 0; j < div.length; j++) {
rem[j] = div[j];
}
rem = divide(div, divisor, rem);
for (int i = 0; i < div.length; i++) {
// append dividend and remainder
crc[i] = (div[i] ^ rem[i]);
}
System.out.println();
System.out.println("CRC code : ");
for (int i = 0; i < crc.length; i++) {
System.out.print(crc[i]);
}
/* ERROR DETECTION */
System.out.println();
System.out.println("Enter CRC code of " + tot_length + " bits : ");
for (int i = 0; i < crc.length; i++) {
crc[i] = Integer.parseInt(br.readLine());
}
System.out.print("CRC bits are : ");
for (int i = 0; i < crc.length; i++) {
System.out.print(crc[i]);
}
System.out.println();
for (int j = 0; j < crc.length; j++) {
rem[j] = crc[j];
}
rem = divide(crc, divisor, rem);
for (int i = 0; i < rem.length; i++) {
if (rem[i] != 0) {
System.out.println("Error");
break;
}
if (i == rem.length - 1) {
System.out.println("No Error");
}
}
System.out.println("THANK YOU.");
}
static int[] divide(int div[], int divisor[], int rem[]) {
int cur = 0;
while (true) {
for (int i = 0; i < divisor.length; i++) {
rem[cur + i] = (rem[cur + i] ^ divisor[i]);
}
while (rem[cur] == 0 && cur != rem.length - 1) {
cur++;
}
if ((rem.length - cur) < divisor.length) {
break;
}
}
return rem;
}
}
OUTPUT :
Enter number of data bits :
7
Enter data bits :
1
0
1
1
0
0
1
Enter number of bits in divisor :
3
Enter Divisor bits :
1
0
1
Dividend (after appending 0's) are : 101100100
CRC code :
101100111
Enter CRC code of 9 bits :
1
0
1
1
0
0
1
0
1
crc bits are : 101100101
Error
THANK YOU ..... )
BUILD SUCCESSFUL (total time: 1 minute 34 seconds)
RESULT:
Thus the above program for error checking code using was executed successfully.