J'ai essayé d'écrire un serveur DNS personnalisé en utilisant netty. J'ai utilisé le DatagramDnsQueryDecoder pour analyser les paquets UDP DNSQuery entrants mais je n'arrive pas à comprendre comment envoyer une réponse pour résoudre un nom de domaine. J'ai reçu l'objet DatagramDnsQuery du gestionnaire mais je ne trouve pas un moyen d'initialiser DatagramDnsResponse et d'ajouter un enregistrement DNS de test et de le renvoyer au client via DatagramDnsResponseEncoder.Serveur DNS personnalisé utilisant Netty
Voici ce que je l'ai fait jusqu'à présent
public class DNSListen {
public static void main(String[] args) {
final NioEventLoopGroup group = new NioEventLoopGroup();
try {
Bootstrap bootstrap = new Bootstrap();
bootstrap.group(group)
.channel(NioDatagramChannel.class)
.handler(new ChannelInitializer<NioDatagramChannel>() {
@Override
protected void initChannel(NioDatagramChannel nioDatagramChannel) throws Exception {
nioDatagramChannel.pipeline().addLast(new DatagramDnsQueryDecoder());
nioDatagramChannel.pipeline().addLast(new DatagramDnsResponseEncoder());
nioDatagramChannel.pipeline().addLast(new DNSMessageHandler());
}
})
.option(ChannelOption.SO_BROADCAST, true);
ChannelFuture future = bootstrap.bind(53).sync();
future.channel().closeFuture().sync();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
group.shutdownGracefully();
}
}
}
ici est le gestionnaire pour DNSMessages
public class DNSMessageHandler extends SimpleChannelInboundHandler<DatagramDnsQuery> {
@Override
protected void channelRead0(ChannelHandlerContext ctx, DatagramDnsQuery dnsMessage) throws Exception {
System.out.println(dnsMessage.content());
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
cause.printStackTrace();
}
}
Je reçois la sortie de plusieurs requêtes DNS lorsque je lance et a fixé le DNS Système 127.0.0.1 Mais je ne peux pas trouver un moyen d'envoyer une réponse DNS fictive afin que l'adresse IP est résolue pour le domaine demandé. (Je pense que je devrais initialiser un objet DatagramDnsResponse et le réécrire à l'utilisateur, mais est-ce correct?, Si oui, comment l'initialiser avec une IP fictive comme l'IP résolu) Suis-je dans le mauvais chemin, quelqu'un peut-il s'il vous plaît dirige-moi vers le bon chemin. Merci.
Il est impossible de dire si vous êtes sur la bonne voie. Vous n'avez pas montré ce que vous avez fait. http://idownvotedbecau.se/nocode/ – blafasel
J'ai ajouté ce que j'ai fait jusqu'ici, et expliqué de plus. Merci. –