Обычный метод разрешения доменного имени:
import java.net.*; public class Kkkk { public static void main(String args[]) выдает исключение { InetAddress адрес = InetAddress.getByName("wxh-PC");// wxh-PC — это имя моего компьютера System. .println(адрес); System.out.println("-----"); InetAddress адрес1 = InetAddress.getLocalHost(); System.out.println(address1); InetAddress[] Address = InetAddress .getAllByName("www.baidu.com"); System.out.println(addresses.length); for (InetAddress addr: Addresses) { System.out. println (адрес); } } }Реализация разрешения доменных имен с динамическим IP-адресом хоста.
Цель состоит в том, чтобы использовать ИНТЕРНЕТ-DNS-ХОСТ для направления доменного имени на домашний хост (личный).
В настоящее время CABLEMODEM очень быстр и имеет динамический IP-адрес, поэтому можно разрешать доменные имена персональным машинам.
Это можно сделать с помощью очень простых настроек.
Например, если у вас есть доменное имя yourdomain.com, вы можете преобразовать это доменное имя в любой хост.
1. Сервер (IP: AAAA) запускает небольшой процесс динамического разрешения DNS.
Файл доменного имени VeVB.COm — /var/named/VeVB.COm.
Создайте еще один /var/named/VeVB.COm.static (файл шаблона можно использовать для создания VeVB.COm)
(JDK1.3, Linux)
# Исходный код выглядит следующим образом: ThreadDNSReloadServer.java import java.io.*; import java.net.*; public class ThreadDNSReloadServer { public static void main(String[] args) { int i=1; новый ServerSocket(8189); for (;;) { Socket incoming =s.accept(); System.out.println("принять нового клиента: " + i); new ThreadDNSReloadHandle(incoming,i).start(); i++; } } catch (Exception e) { System.out.println(e); } } } class ThreadDNSReloadHandle расширяет поток { public ThreadDNSReloadHandle(Socket i, int c) {incoming= i; counter=c } public void run() {try {BufferedReader in=new; BufferedReader(new InputStreamReader(incoming.getInputStream())); String User="Unkown"; String DNSFILEPATH="/var/named/"; String DNSFILE="VeVB.COm"; String HOSTIP="127.0.0.1"; USER_VALIDATED=true; логическое значение Done=False; while (!done) { String str=in.readLine(); //проверить пользователя; if ( str ==null ) Done=true; else { str=str.trim(); if ( str.substring(0,2).equals("LA") ) { if (str.length) () >2) User=str.substring(2); } if ( str.substring(0,2).equals("LB") ) { if (str.length() >2) DNSFILE=str.substring( 2); } если ( str.substring(0,2).equals("LC") ) { if (str.length() >2) HOSTIP=str.substring(2 } if ( str.trim().equals("BYE); ")) Done = true; } } incoming.close(); //Добавляем проверку пользователя. //Записываем файл VeVB.COm.static на сервере в VeVB.COm String DNSTMP =DNSFILEPATH + DNSFILE +".static"; BufferedReader sin=new BufferedReader(new FileReader(DNSTMP)); PrintWriter sout=new PrintWriter(new FileWriter(DNSFILEPATH + DNSFILE) , String s; ) != null) { if (s.startsWith("host")) { s="host IN A " + HOSTIP; sout.println(s); s="@ IN A " + HOSTIP; } sout.println(s } //System.out.println("Пользователь:" + Пользователь ); "DNSFILE:" + DNSFILE ); //System.out.println("HOSTIP:" + HOSTIP ); //ndc reload String command="ndc reload" + DNSFILE ; java.lang.Runtime.getRuntime().exec(command); } catch (Exception e) { System.out.println(e); } } Private Socket incoming;
2. Клиент (Windows/Linux)
# Добавляйте клиент в автозагрузку (или процесс) при каждом его запуске: SockTest.java import java.io.*; import public class SocketTest { public static void main(String[] args) { try { Socket s = новый Socket («AAAA», 8189 BufferedReader in = новый BufferedReader (новый); InputStreamReader(s.getInputStream())); PrintWriter out=new PrintWriter(s.getOutputStream(),true); InetAddress localHostAddress =InetAddress.getLocalHost(); //получить IP-адрес LocalHost out.println("LAguest"); println("LВашдомен.com"); out.println("LC" + localHostAddress.getHostAddress(); s.close() } catch (IOException e) { System.out.println(e); Пример файла DNS: (VeVB.COm.static)
@ns.dnsserver.com xxxxx xxxx хост IN A 127.0.0.1 // Здесь можно изменить www IN CNAME хоста...