Método ordinario de resolución de nombres de dominio:
import java.net.*; public class Kkkk { public static void main(String args[]) throws Exception { Dirección InetAddress = InetAddress.getByName("wxh-PC");// wxh-PC es el nombre de mi computadora System. .println(dirección); System.out.println("-----"); Dirección Inet dirección1 = Dirección Inet.getLocalHost(); System.out.println(address1); InetAddress[] direcciones = InetAddress .getAllByName("www.baidu.com"); System.out.println(addresses.length); para (InetAddress addr: direcciones) { System.out. println(dirección);Implementar la resolución de nombres de dominio con IP de host dinámica
El propósito es utilizar un HOST DNS de INTERNET para dirigir el nombre de dominio al host en casa (personal).
Actualmente CABLEMODEM es muy rápido y tiene IP dinámica, por lo que es posible resolver nombres de dominio a máquinas personales.
Se puede hacer con configuraciones muy simples.
Por ejemplo, si tiene un nombre de dominio sudominio.com, puede resolver este nombre de dominio en cualquier host.
1. El servidor (IP: AAAA) inicia un pequeño proceso de resolución dinámica de DNS.
El archivo de nombre de dominio de VeVB.COm es /var/named/VeVB.COm
Cree otro /var/named/VeVB.COm.static (el archivo de plantilla se puede utilizar para generar VeVB.COm)
(JDK1.3, Linux)
# El código original es el siguiente: ThreadDNSReloadServer.java import java.io.*; import java.net.*; public class ThreadDNSReloadServer { public static void main(String[] args) { int i=1; new ServerSocket( 8189); for (;;) { Socket entrante =s.accept(); System.out.println("aceptar nuevo cliente: " + i); nuevo ThreadDNSReloadHandle(entrante,i).start(); i++; } } catch (Excepción e) { System.out.println(e); } } } clase ThreadDNSReloadHandle extiende Thread { public ThreadDNSReloadHandle(Socket i, int c) { entrante= i; contador=c } public void run() { probar { BufferedReader en=nuevo BufferedReader(new InputStreamReader(incoming.getInputStream())); String User="Desconocido"; String DNSFILEPATH="/var/named/"; USER_VALIDATED=true; booleano hecho=falso; mientras (!hecho) { String str=in.readLine(); //validar usuario; if ( str ==null ) done=true; else { str=str.trim(); if (str.substring(0,2).equals("LA") ) { if (str.length) () >2) Usuario=str.substring(2); } if ( str.substring(0,2).equals("LB") ) { if (str.length() >2) DNSFILE=str.substring( 2); } si ( str.substring(0,2).equals("LC") ) { if (str.length() >2) HOSTIP=str.substring(2 } if ( str.trim().equals("BYE); ")) done = true; } } incoming.close(); //Agregar verificación de usuario. //Escribir el archivo VeVB.COm.static en el servidor en VeVB.COm String DNSTMP =DNSFILEPATH + DNSFILE +".static"; BufferedReader sin=new BufferedReader(new FileReader(DNSTMP)); PrintWriter sout=new PrintWriter(new FileWriter(DNSFILEPATH + DNSFILE), verdadero mientras ((s=sin.readLine()); ) != nulo) { if (s.startsWith("host")) { s="host EN A " + HOSTIP; sout.println(s); s="@ EN A " + HOSTIP; } sout.println(s } //System.out.println("Usuario:" + Usuario); "DNSFILE:" + DNSFILE); //System.out.println("HOSTIP:" + HOSTIP); //ndc reload String comando="ndc reload" + DNSFILE; java.lang.Runtime.getRuntime().exec(command); } catch (Excepción e) { System.out.println(e); } socket privado entrante;
2. Cliente (ventanas/linux)
# Agregue el cliente al inicio (o proceso) cada vez que se inicia: SockTest.java import java.io.*; import java.net.*; public class SocketTest { public static void main(String[] args) { try { Socket s=nuevo Socket("AAAA",8189 BufferedReader en=nuevo BufferedReader(nuevo); InputStreamReader(s.getInputStream())); PrintWriter out=new PrintWriter(s.getOutputStream(),true); InetAddress localHostAddress =InetAddress.getLocalHost() //obtener LocalHost Ip.println("LAguest"); println("LBtudominio.com"); out.println("LC" + localHostAddress.getHostAddress() ); out.close(); s.close() } captura (IOException e) { System.out.println(e); archivo de muestra dns: (VeVB.COm.static)
@ ns.dnsserver.com xxxxx xxxx host IN A 127.0.0.1 // Aquí es donde cambiar www IN CNAME host...