-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDNSServer.java
More file actions
62 lines (48 loc) · 2.18 KB
/
Copy pathDNSServer.java
File metadata and controls
62 lines (48 loc) · 2.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.HashMap;
public class DNSServer {
private static String normalizeDomain(String input) {
String domain = input.trim().toLowerCase();
if (domain.startsWith("http://")) {
domain = domain.substring(7);
} else if (domain.startsWith("https://")) {
domain = domain.substring(8);
}
int slashIndex = domain.indexOf('/');
if (slashIndex != -1) {
domain = domain.substring(0, slashIndex);
}
return domain;
}
public static void main(String[] args) {
try {
DatagramSocket socket = new DatagramSocket(9876);
System.out.println("DNS Server started...");
HashMap<String, String> dnsTable = new HashMap<>();
dnsTable.put("www.google.com", "142.250.190.78");
dnsTable.put("google.com", "142.250.190.78");
dnsTable.put("www.yahoo.com", "98.137.11.163");
dnsTable.put("yahoo.com", "98.137.11.163");
dnsTable.put("www.example.com", "93.184.216.34");
dnsTable.put("example.com", "93.184.216.34");
byte[] receiveData = new byte[1024];
while (true) {
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
socket.receive(receivePacket);
String rawInput = new String(receivePacket.getData(), 0, receivePacket.getLength());
String domainName = normalizeDomain(rawInput);
System.out.println("Query received: " + rawInput + " -> " + domainName);
String ipAddress = dnsTable.getOrDefault(domainName, "Domain not found");
byte[] sendData = ipAddress.getBytes();
InetAddress clientAddress = receivePacket.getAddress();
int clientPort = receivePacket.getPort();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, clientAddress, clientPort);
socket.send(sendPacket);
}
} catch (Exception e) {
System.out.println(e);
}
}
}