SNMPServer :
import java.io.*;
import java.net.*;
public class SNMPServer
{
public static void main(String[] args) throws
IOException
{
DatagramSocket socket = new
DatagramSocket(8086);
// SNMP uses UDP port 8086
byte[] receiveData = new byte[1024];
System.out.println("SNMP Server is running...");
while (true)
{
DatagramPacket receivePacket =new
DatagramPacket(receiveData,receiveData.l
ength); socket.receive(receivePacket);
String request = new String
( receivePacket. getData () ,
0,receivePacket.getLength());
System.out.println("Received SNMP
request: " + request);
// Simple response message
String response = "This is a SNMP
response to: " + request;
byte[] sendData =
response.getBytes();
InetAddress clientAddress =
receivePacket.
getAddress ();
int clientPort =
receivePacket.getPort();
DatagramPacket sendPacket = new
Datagram Packet(sendData,
sendData.length, clientAddress, clientPort);
socket.send(sendPacket);
}
}
}
SNMPClient:
import java.io.*;
import java.net.*;
public class SNMPClient
{
public static void main(String[] args) throws
IOException
{
BufferedReader reader = new
BufferedReader(new
InputStreamReader(System.in));
DatagramSocket socket = new
DatagramSocket();
InetAddress
serverAddress=InetAddress.getByName("localh
ost");
// Change to the actual server IP if needed
int serverPort = 8086;
// SNMP uses port 8086
System.out.println("Enter SNMP request: ");
String request = reader.readLine();
byte[] sendData = request.getBytes();
DatagramPacket sendPacket = new
DatagramPacket( sendData,sendData.length,
serverAddress, serverPort);
socket.send(sendPacket);
byte[] receiveData = new byte[1024];
DatagramPacket receivePacket = new
DatagramPacket (receiveData,
receiveData.length);
socket.receive(receivePacket);
String response = new
String(receivePacket.getData(), 0,
receivePacket.getLength());
System.out.println("Received SNMP response: "
+ response);
socket.close();
}
}
OUTPUT :
PingServer :
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class PingServer
{
public static void main(String[] args)
{
try
{
DatagramSocket socket = new
DatagramSocket (1234);
byte[] receiveBuffer = new
byte[1024];
System.out.println("Server is waiting
for ping reque sts ...");
while (true)
{
DatagramPacket packet = new
Datagram Packet(receiveBuffer,
receiveBuffer.length);
socket.receive(packet);
// Wait for client ping
String receivedData = new String
(packet. getData(), 0,
packet.getLength());
System.out.println("Received from
client: " + receivedData);
// Send the same data back
(echo for ping)
InetAddress clientAddress = packet.
getAddress();
int clientPort = packet.getPort();
String response = "Pong";
DatagramPacket responsePacket =
new
DatagramPacket(response.getBytes(),
response.length(), clientAddress,
clientPort);
socket.send(responsePacket);
System.out.println("Pong sent to
client.");
}
} catch (Exception e)
{
e.printStackTrace();
}
}
}
PingClient :
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class PingClient
{
public static void main(String[] args)
{
try
{
DatagramSocket socket = new
DatagramSocket();
InetAddress serverAddress =
InetAddress.getByName ("localhost"); // Replace
with server IP
byte[] sendBuffer = "Ping".getBytes();
DatagramPacket packet = new
DatagramPacket (sendBuffer,
sendBuffer.length, serverAddress,1234);
// Send "Ping" request to the server
socket.send(packet);
System.out.println("Ping sent to server.");
// Receive the response
byte[] receiveBuffer = new byte[1024];
DatagramPacket responsePacket =new
DatagramPacket (receiveBuffer,
receiveBuffer.length);
socket.receive(responsePacket);
// Wait for server response
String response=new
String(responsePacket.getData(),0,
responsePacket.getLength());
System.out.println("Response from
server:"+response );
} catch (Exception e)
{
e.printStackTrace();
}
}
}
OUTPUT :
TraceRouteServer :
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class TraceRouteServer
{
public static void main(String[] args) throws
IOException
{
int port = 33434;
// Port on which to listen for incoming
packets
DatagramSocket serverSocket = new
DatagramSocket (port);
System.out.println("TraceRoute Server is
running on port " + port + "...");
while (true)
{
byte[] receiveData = new byte[1024];
DatagramPacket receivePacket=new
Datagram Packet (receiveData,
receiveData.length);
// Receive packet from client
serverSocket.receive(receivePacket);
String message=new
String(receivePacket.getData (),0,
receivePacket.getLength());
InetAddress clientAddress=receivePacket
.getAddress();
int clientPort = receivePacket.getPort();
System.out.println("Received from client: "
+ message + " | Responding back...");
// Send a response packet back to
client
String responseMessage = "Reply from " +
InetAddress.getLocalHost().getHostAddress();
byte[] responseData=responseMessage.
getBytes();
DatagramPacket responsePacket = new
Datagram Packet(responseData,
responseData.length,clien
tAddress, clientPort);
serverSocket.send(responsePacket);
}
}
}
TraceRouteClient :
import java.io.IOException;
import java.net.*;
public class TraceRouteClient
{
public static void main(String[] args) throws
IOException
{
String serverAddress = "localhost";
// Use the actual server address if needed
int port = 33434;
int maxHops = 30;
InetAddress address = InetAddress.getByName
(serverAddress);
System.out.println("Tracing route to " +
serverAddress);
for (int ttl = 1; ttl <= maxHops; ttl++)
{
DatagramSocket socket = new
DatagramSocket();
socket.setSoTimeout(3000);
// 3 seconds timeout
try {
socket.setTrafficClass(ttl);
// Setting the TTL
byte[] data = ("Trace packet with TTL
"+
ttl).getBytes();
DatagramPacket packet = new
Datagram
Packet(data, data.length, address,
port);
// Send packet
long startTime =
System.currentTimeMillis();
socket.send(packet);
// Prepare to receive response
byte[] receiveData = new byte[1024];
DatagramPacketreceivePacket=newD
atagra
mPacket(receiveData,
receiveData.length);
socket.receive(receivePacket);
// Measure round-trip time
long rtt = System.currentTimeMillis() -
startTime;
// Display the hop details
InetAddress routerAddress =
receivePacket
.getAddress();
System.out.println("Hop " + ttl + ": "
+ router
Address .getHostAddress() + " (RTT: "
+ rtt +
"ms)");
// If the response address is the
final target
//then exit the loop
if (routerAddress.equals(address))
{
System.out.println("Reached
destinati
on.");
break;
}
} catch (SocketTimeoutException e)
{
System.out.println("Hop " + ttl + ":
Request timed out.");
} finally
{
socket.close();
}
}
}
}
OUTPUT :