#java #sockets #networking #dns
#java #сокеты #сеть #dns
Вопрос:
Итак, я работаю над программным обеспечением, которое будет отслеживать (и может изменять, действуя как Forrowder) все DNS-запросы, сделанные моим маршрутизатором.
Что я сделал?
Итак, сначала я написал Java-код, который может прослушивать определенный порт и выводить все запросы на консоль [пока я просто хочу протестировать запросы].
Код:
import java.net.*;
import java.io.*;
public class PortLogger{
public static void main(String[] args) {
LoggerServer loggerServer = new LoggerServer(53);
loggerServer.start();
}
}
class LoggerServer extends Thread{
private int port;
public LoggerServer(int port){
this.port = port;
}
@Override
public void run(){
try{
int id = 1;
ServerSocket server = new ServerSocket(port);
System.out.println("Server Listening at port " port);
Socket client;
while(true){
client = server.accept();
ClientHandler clientHandler = new ClientHandler(client, id );
clientHandler.start();
}
}catch(Exception ex){
System.out.println("Exception at Server : 1 :: EX = " ex);
}
}
}
class ClientHandler extends Thread{
private Socket client;
private int id;
public ClientHandler(Socket client, int id){
this.client = client;
this.id = id;
}
@Override
public void run(){
try {
String data = "";
BufferedReader reader = new BufferedReader(new InputStreamReader(client.getInputStream()));
while(true){
data = reader.readLine();
if(data.length() > 0){
System.out.println("Client : " id " :: " data);
}
}
}catch(Exception ex){
System.out.println("Exception at Client : " id " :: EX = " ex);
}
}
}
Единственное предложение этого кода на данный момент — показать мне все запросы, отправленные на сервер.
Я знаю, что для этого мне также нужно изменить DNS-сервер в моем маршрутизаторе.
Итак, для этого я сначала попробовал зайти в internet setup и указать локальный IP-адрес своего компьютера в качестве DNS-сервера.
Но он показывал :
DNS IP и LAN IP должны быть в разных сетях!
Но я нашел другой способ сделать это.
Это выглядит следующим образом:
Я зашел в мастер настройки маршрутизатора и установил DNS-сервер на тот же IP-адрес.
На удивление, это сработало!
[Я понятия не имею, является ли это ошибкой в прошивке D-Link или нет.
Я также добавил исключение, разрешающее все запросы, как входящие, так и исходящие, на порт 53.
В чем проблема?
Итак, теперь проблема в том, что даже после успешного изменения DNS на моих серверах. Казалось, что запросов к консоли вообще не было. Я много пробовал, но ничего.
Я проверил, что программа работает нормально, добровольно отправив ей запрос с помощью telnet?
Теперь я делаю что-то не так или есть какая-то ошибка с маршрутизатором (он старый).
ПРИМЕЧАНИЕ: черные линии на изображениях предназначены только для того, чтобы скрыть мой общедоступный IP-адрес, ничего особенного.
РЕДАКТИРОВАТЬ: я попробовал еще несколько раз, затем обнаружил, что веб-сайты не открывались, когда я менял DNS на своем маршрутизаторе, но в консоли по-прежнему ничего не было!
Комментарии:
1. Возможно, DNS-запросы разрешаются не маршрутизатором, а Windows? Попробуйте также изменить DNS Windows: developers.google.com/speed/public-dns/docs/using#windows
2. @DelfikPro нет, я уверен, что это разрешено маршрутизатором, поскольку я передал dns-IP-адреса маршрутизатору, а также ранее я также пытался вручную установить IP-адрес DNS-сервера windos для себя и s, пока ответа не было
Ответ №1:
Хотя трудно дать вам полный ответ, почему ваше приложение не работает, я могу предложить несколько способов расследования:
- Порт 53 является привилегированным портом. Это означает, что в Linux для привязки к этому порту требуются права суперпользователя, и приложение выдаст исключение из-за «отказано в разрешении», если выполняется как «обычный» пользователь. Поскольку вы используете Windows, я не знаю, что будет, если вы попытаетесь выполнить привязку как «обычный» пользователь, или вы можете выполняться как пользователь Admin (или любой эквивалент «root» в Windows), и вы этого не знаете. Он может даже просто молча завершиться сбоем, т.Е. Появиться привязка, когда на самом деле это не так, и никакие данные не передаются через ваше приложение. Кроме того, использование по умолчанию «root» в качестве пользователя выполнения по умолчанию в Linux не является нормой, потому что это небезопасно, и большинство дистрибутивов Linux, если не все, не допускают этого по умолчанию, т.Е. Вы можете иметь это, но вы должны сообщить дистрибутиву, что это то, что вы намереваетесь во время установки. Я позволю вам прийти к собственным выводам о том, какую позицию занимает Windows, чтобы сделать пользователей «администраторами»…
- В таком сценарии, как этот, если бы это был я, я бы немедленно обратился к некоторым сетевым инструментам, чтобы посмотреть, что происходит. В Linux это
tcpdump
или Wireshark. Вы также можете получить Wireshark для Windows, поскольку это приложение с графическим интерфейсом. Это позволит вам отслеживать и фильтровать сетевой трафик и, следовательно, будет независимым от вашего приложения. Вы можете фильтровать по адресу источника или назначения и / или номеру порта. - Я бы оставил настройку DNS в маршрутизаторе и сначала изменил настройки DNS на одном компьютере, назвал его тестовым клиентом и установил его DNS-адрес на компьютер, на котором запущено ваше приложение. Затем с помощью
tcpdump
or Wireshark вы можете отправлять запросы на свой test_client, например, запросы браузера, и просматривать результирующий сетевой трафик. - Вы никогда не упоминали, что после изменения настроек DNS вашего маршрутизатора все запросы браузера от клиентов завершаются неудачей. Это то, что я ожидал бы увидеть, если ваш маршрутизатор больше не может получить разрешение имени. Однако, возможно, в ваших клиентах происходит некоторое кэширование DNS, поэтому может показаться, что вы получаете успешные DNS-запросы на вашем test_client. Снова посмотрите на сетевой трафик или используйте клиент Linux, который предоставит вам гораздо лучшие сетевые инструменты.
Комментарии:
1. Во-первых, в случае отказа в доступе я не могу найти никаких ошибок как в обычном пользовательском режиме, так и в режиме администратора. Во-вторых, я уже изменил настройки своего компьютера, но это не имело никакого значения. в wireshark я не могу найти ничего, что было бы связано (возможно, потому, что я не очень разбираюсь в Wireshark), и, наконец, вы можете предположить, что сейчас меня не беспокоит Linux, поскольку моя основная цель — wondows! и я также хотел бы упомянуть, что я не уверен, действительно ли dns был изменен в маршрутизаторе, как я описал в вопросе, это может быть ошибка!
2. @JaysmitoMukherjee Не уверен, что вы имеете в виду, когда не можете найти ничего, что было бы связано с использованием Wireshark. Означает ли это, что вы не видите никаких данных, поступающих на порт 53 ни на одном компьютере? Если бы это был я, я бы хотел получить независимое подтверждение того, что я вижу, что данные поступают на порт 53 в первом случае, а затем на правильный компьютер во втором. Linux может не быть вашей основной целевой ОС, но ничто не мешает вам использовать его в качестве инструмента для расследования происходящего. В любом случае, я думаю, вам нужно ознакомиться с использованием Wireshark или каким-либо другим способом отслеживания сетевого трафика.