因此,我正在开发一种软件,该软件将监视(并可能通过充当 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 服务器。
因此,为此我首先尝试通过互联网设置并将我的计算机的本地 IP 作为 DNS 服务器。
但它显示:
DNS IP and LAN IP must be on different networks!
但我找到了另一种方法。
如下:
我去了路由器的设置向导并将DNS服务器设置为相同的IP。
令人惊讶的是,这奏效了!
[我不知道这是否是 D-Link 固件中的错误。
我还添加了一个异常(exception),以允许所有入站和出站请求到端口 53。
问题是什么?
所以现在的问题是,即使成功地将 DNS 更改为我的服务器。控制台似乎根本没有任何请求。我尝试了很多,但没有。
我通过使用 telnet 自愿向它发送请求来检查程序是否运行良好?
现在我做错了什么还是路由器有一些错误(它是一个旧的)。
注意:图像上的黑线只是为了隐藏我的公共(public) IP 地址,没什么特别的。
编辑:我又试了几次,然后发现当我更改路由器中的 DNS 时网站没有打开,但控制台中仍然没有任何内容!
最佳答案
虽然很难给您一个完整的答案,为什么您的应用程序不起作用,但我可以建议一些调查方法:
tcpdump
或 Wireshark。您还可以获取适用于 Windows 的 Wireshark,因为它是一个 GUI 应用程序。这将允许您监控和过滤网络流量,因此将独立于您的应用程序。您可以按源或目标地址和/或端口号进行过滤。 tcpdump
或 Wireshark 然后您可以在您的 test_client 上发出请求,例如浏览器请求并查看产生的网络流量。 关于java - 无法通过 Windows 10 和 DLINK DIR-615 路由器中的 Java 代码获取 DNS 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65598139/