Не удается получить DNS-запросы через Java-код в Windows 10 и маршрутизаторе DLINK DIR-615

#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 или нет.

IP УСПЕШНО ДОБАВЛЕН

Я также добавил исключение, разрешающее все запросы, как входящие, так и исходящие, на порт 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:

Хотя трудно дать вам полный ответ, почему ваше приложение не работает, я могу предложить несколько способов расследования:

  1. Порт 53 является привилегированным портом. Это означает, что в Linux для привязки к этому порту требуются права суперпользователя, и приложение выдаст исключение из-за «отказано в разрешении», если выполняется как «обычный» пользователь. Поскольку вы используете Windows, я не знаю, что будет, если вы попытаетесь выполнить привязку как «обычный» пользователь, или вы можете выполняться как пользователь Admin (или любой эквивалент «root» в Windows), и вы этого не знаете. Он может даже просто молча завершиться сбоем, т.Е. Появиться привязка, когда на самом деле это не так, и никакие данные не передаются через ваше приложение. Кроме того, использование по умолчанию «root» в качестве пользователя выполнения по умолчанию в Linux не является нормой, потому что это небезопасно, и большинство дистрибутивов Linux, если не все, не допускают этого по умолчанию, т.Е. Вы можете иметь это, но вы должны сообщить дистрибутиву, что это то, что вы намереваетесь во время установки. Я позволю вам прийти к собственным выводам о том, какую позицию занимает Windows, чтобы сделать пользователей «администраторами»…
  2. В таком сценарии, как этот, если бы это был я, я бы немедленно обратился к некоторым сетевым инструментам, чтобы посмотреть, что происходит. В Linux это tcpdump или Wireshark. Вы также можете получить Wireshark для Windows, поскольку это приложение с графическим интерфейсом. Это позволит вам отслеживать и фильтровать сетевой трафик и, следовательно, будет независимым от вашего приложения. Вы можете фильтровать по адресу источника или назначения и / или номеру порта.
  3. Я бы оставил настройку DNS в маршрутизаторе и сначала изменил настройки DNS на одном компьютере, назвал его тестовым клиентом и установил его DNS-адрес на компьютер, на котором запущено ваше приложение. Затем с помощью tcpdump or Wireshark вы можете отправлять запросы на свой test_client, например, запросы браузера, и просматривать результирующий сетевой трафик.
  4. Вы никогда не упоминали, что после изменения настроек DNS вашего маршрутизатора все запросы браузера от клиентов завершаются неудачей. Это то, что я ожидал бы увидеть, если ваш маршрутизатор больше не может получить разрешение имени. Однако, возможно, в ваших клиентах происходит некоторое кэширование DNS, поэтому может показаться, что вы получаете успешные DNS-запросы на вашем test_client. Снова посмотрите на сетевой трафик или используйте клиент Linux, который предоставит вам гораздо лучшие сетевые инструменты.

Комментарии:

1. Во-первых, в случае отказа в доступе я не могу найти никаких ошибок как в обычном пользовательском режиме, так и в режиме администратора. Во-вторых, я уже изменил настройки своего компьютера, но это не имело никакого значения. в wireshark я не могу найти ничего, что было бы связано (возможно, потому, что я не очень разбираюсь в Wireshark), и, наконец, вы можете предположить, что сейчас меня не беспокоит Linux, поскольку моя основная цель — wondows! и я также хотел бы упомянуть, что я не уверен, действительно ли dns был изменен в маршрутизаторе, как я описал в вопросе, это может быть ошибка!

2. @JaysmitoMukherjee Не уверен, что вы имеете в виду, когда не можете найти ничего, что было бы связано с использованием Wireshark. Означает ли это, что вы не видите никаких данных, поступающих на порт 53 ни на одном компьютере? Если бы это был я, я бы хотел получить независимое подтверждение того, что я вижу, что данные поступают на порт 53 в первом случае, а затем на правильный компьютер во втором. Linux может не быть вашей основной целевой ОС, но ничто не мешает вам использовать его в качестве инструмента для расследования происходящего. В любом случае, я думаю, вам нужно ознакомиться с использованием Wireshark или каким-либо другим способом отслеживания сетевого трафика.