对你的问题还不太清楚。
我这有个发邮件的时候查找的代码,看对你是否有用。
import java.awt.TextArea;
import java.io.*;
import java.net.*;public class DNSRequest
{   public DNSRequest()
   {
      this(false);
   }   public DNSRequest(boolean flag)
   {
      f_RD = 1;
      f_opcode = OP_ST_QUERY;
      q_msg = new byte[msglen];
      try
      {
         dgs = new DatagramSocket();
         dgs.setSoTimeout(1000);
      }
      catch ( Exception _ex )
      {}
      query_id = 4096 + (int)(28671D * Math.random());
      debug = flag;
   }   public DNSRequest(boolean flag, int i)
   {
      f_RD = 1;
      f_opcode = OP_ST_QUERY;
      q_msg = new byte[msglen];
      try
      {
         dgs = new DatagramSocket();
         dgs.setSoTimeout(i);
      }
      catch ( Exception _ex )
      {}
      query_id = 4096 + (int)(28671D * Math.random());
      debug = flag;
   }   private int getMessage(byte abyte0[], int i)
   {
      id = Bytes2Int(abyte0[0], abyte0[1]);
      f_QR = fromByte(abyte0[2], 0, 1);
      f_opcode = fromByte(abyte0[2], 1, 4);
      f_AA = fromByte(abyte0[2], 5, 1);
      f_TC = fromByte(abyte0[2], 6, 1);
      f_RD = fromByte(abyte0[2], 7, 1);
      f_RA = fromByte(abyte0[3], 0, 1);
      f_rcode = fromByte(abyte0[3], 4, 4);
      q_num = Bytes2Int(abyte0[4], abyte0[5]);
      aRR_num = Bytes2Int(abyte0[6], abyte0[7]);
      aaRR_num = Bytes2Int(abyte0[8], abyte0[9]);
      aadRR_num = Bytes2Int(abyte0[10], abyte0[11]);
      RR_total = aRR_num + aaRR_num + aadRR_num;
      if ( RR_total > 0 )
      {
         RR_dnames = new String[RR_total];
         RR_type = new int[RR_total];
         RR_rdata = new String[RR_total];
         RR_dlength = new int[RR_total];
         RR_mxpref = new int[RR_total];
         outDNSdomain(abyte0, head_len, i, 0, -1);
         pos = pos + 4;
         for ( int j = 0; j < RR_total; j++ )
         {
            if ( (RR_dnames[j] = outDNSdomain(abyte0, pos + 1, i, 0, -1)) == null )
               break;
            if ( debug )
               System.out.println("Position just after dom. name: " + pos);
            RR_type[j] = Bytes2Int(abyte0[pos + 1], abyte0[pos + 2]);
            RR_dlength[j] = Bytes2Int(abyte0[pos + 9], abyte0[pos + 10]);
            if ( RR_type[j] == 1 )
            {
               RR_rdata[j] = new String(Byte2Int(abyte0[pos + 11]) + "." + Byte2Int(abyte0[pos + 12]) + "." + Byte2Int(abyte0[pos + 13]) + "." + Byte2Int(abyte0[pos + 14]));
               pos = pos + 14;
            }
            else
               if ( RR_type[j] == 15 )
            {
               RR_mxpref[j] = Bytes2Int(abyte0[pos + 11], abyte0[pos + 12]);
               pos = pos + 2;
               RR_rdata[j] = outDNSdomain(abyte0, pos + 11, i, RR_type[j], RR_dlength[j]);
            }
            else
            {
               RR_rdata[j] = outDNSdomain(abyte0, pos + 11, i, RR_type[j], RR_dlength[j]);
            }
            if ( RR_rdata[j] == null )
               pos = pos + 10 + RR_dlength[j];
            if ( debug )
               System.out.println("After retrieving RR - pos: " + pos + " type: " + RR_type[j] + " length: " + RR_dlength[j]);
         }      }
      return 0;
   }
//待续

解决方案 »

  1.   

       public int setMessage(String s, int i)
       {
          query_id = query_id != 32767 ? query_id + 1 : 4096;
          String s1;
          if ( i == QT_PTR && s.indexOf("in-addr.arpa") == -1 )
          {
             StringBuffer stringbuffer = new StringBuffer();
             // boolean flag = false;
             int l;
             for ( int i1 = s.length() - 1; i1 > 0; i1 = l - 1 )
             {
                l = s.lastIndexOf(".", i1);
                stringbuffer.append(s.substring(l + 1, i1 + 1) + ".");
             }         s1 = new String(stringbuffer.toString() + "in-addr.arpa");
          }
          else
          {
             s1 = new String(s);
          }
          for ( int k = 0; k < head_len; k++ )
             q_msg[k] = header[k];      byte abyte0[] = new byte[2];
          toByte(Integer.toHexString(query_id), abyte0, 0);
          q_msg[0] = abyte0[0];
          q_msg[1] = abyte0[1];
          int j = toDNSdomain(q_msg, head_len, s1.length(), s1.getBytes()) + head_len;
          q_msg[j] = 0;
          q_msg[j + 1] = (byte)i;
          q_msg[j + 2] = 0;
          q_msg[j + 3] = 1;
          q_msg_len = j + 4;
          return q_msg_len;
       }   private int toDNSdomain(byte abyte0[], int i, int j, byte abyte1[])
       {
          int k = j - 1;
          int l;
          for ( l = j - 1; l > -1; l-- )
          {
             if ( abyte1[l] != 46 )
                abyte0[i + l + 1] = abyte1[l];
             if ( abyte1[l] == 46 && l != j - 1 )
             {
                abyte0[i + l + 1] = (byte)(k - l);
                k = l - 1;
             }
          }      abyte0[i] = (byte)(k - l);
          abyte0[i + j + 1] = 0;
          return j + 2;
       }   private String outDNSdomain(byte abyte0[], int i, int j, int k, int l)
       {
          int i1 = i;
          StringBuffer stringbuffer = new StringBuffer();
          int k1 = 0;
          pos = 0;
          try
          {
             while ( i1 < j && abyte0[i1] != 0 && (k1 < l || l < 0 || pos > 0) )
             {
                if ( fromByte(abyte0[i1], 0, 2) == 3 )
                {
                   if ( pos == 0 )
                      pos = i1 + 1;
                   i1 = fromByte(abyte0[i1], 2, 6, true) + Byte2Int(abyte0[i1 + 1]);
                   k1++;
                }
                int j1;
                for ( j1 = i1 + 1; j1 < i1 + Byte2Int(abyte0[i1]) + 1; j1++ )
                   stringbuffer.append((char)abyte0[j1]);            if ( k == 13 && i1 == i )
                   stringbuffer.append("; OS = ");
                else
                   if ( k != 16 && k != 13 )
                   stringbuffer.append(".");
                if ( pos == 0 && l >= 0 )
                   k1 = (k1 + j1) - i1;
                i1 = j1;
             }      }
          catch ( Exception exception )
          {
             System.out.println("Error outDnsdomain: " + exception.getMessage());
          }
          if ( i1 >= abyte0.length )
          {
             System.out.println("Returning null strbuf.length = " + stringbuffer.length() + " " + stringbuffer.toString());
             return null;
          }
          if ( k1 >= l && pos == 0 && l >= 0 )
             pos = i1 - 1;
          else
             if ( pos == 0 )
             pos = i1;
          return stringbuffer.toString();
       }   public int printMessage(Object obj)
       {
          try
          {
             append(obj, "HEADER: \n");
             append(obj, "  opcode = ");
             if ( f_opcode == 0 )
                append(obj, "QUERY");
             else
                if ( f_opcode == 2 )
                append(obj, "SERVER STATUS REQUEST");
             else
                if ( f_opcode == 1 )
                append(obj, "INVERSE QUERY");
             append(obj, ", id = " + id);
             append(obj, ", rcode = ");
             if ( f_rcode == 0 )
                append(obj, "NOERROR\n");
             else
                if ( f_rcode == 3 )
                append(obj, "NAME_ERROR\n");
             else
                if ( f_rcode == 2 )
                append(obj, "SERVFAIL\n");
             else
                append(obj, f_rcode + "\n");
             append(obj, "  header flags: ");
             if ( f_QR == 1 )
                append(obj, "response");
             else
                append(obj, "query");
             if ( f_TC == 1 )
                append(obj, ", truncated");
             if ( f_AA == 0 )
                append(obj, ", non-authoritative answer");
             else
                append(obj, ", authoritative answer");
             if ( f_RD == 1 )
                append(obj, ", want recursion");
             if ( f_RA == 1 )
                append(obj, ", recursion available\n");
             else
                append(obj, ", recursion is not available\n");
             append(obj, "  questions = 1, answers = " + aRR_num + ", authority records = " + aaRR_num + ", additional = " + aadRR_num + "\n");
             for ( int i = 0; i < RR_total; i++ )
             {
                if ( i == 0 && aRR_num > 0 )
                   append(obj, "ANSWERS: \n");
                else
                   if ( i == aRR_num && aaRR_num > 0 )
                   append(obj, "AUTHORITY RECORDS: \n");
                else
                   if ( i == aaRR_num + aRR_num && aadRR_num > 0 )
                   append(obj, "ADDITIONAL RECORDS: \n");
                if ( RR_dnames[i].length() > 0 )
                   append(obj, " -> " + RR_dnames[i] + "\n");
                else
                   append(obj, " -> (root)\n");
                if ( RR_type[i] == 1 )
                   append(obj, "    internet address = ");
                else
                   if ( RR_type[i] == 5 )
                   append(obj, "    canonical name = ");
                else
                   if ( RR_type[i] == 12 )
                   append(obj, "    name = ");
                else
                   if ( RR_type[i] == 2 )
                   append(obj, "    nameserver = ");
                else
                   if ( RR_type[i] == 6 )
                   append(obj, "    origin = ");
                else
                   if ( RR_type[i] == 13 )
                   append(obj, "    host information  CPU = ");
                else
                   if ( RR_type[i] == 15 )
                   append(obj, "   preference = " + RR_mxpref[i] + ", mail exchanger = ");
                else
                   if ( RR_type[i] == 16 )
                   append(obj, "   text = ");
                else
                   append(obj, "    type (" + RR_type[i] + ") = ");
                append(obj, RR_rdata[i] + "\n");
             }         append(obj, "\n");
          }
          catch ( IOException _ex )
          {
             return -1;
          }
          return 0;
       }
    //待续
      

  2.   


       private void append(Object obj, String s)
       throws IOException
       {
          if ( obj instanceof TextArea )
          {
             ((TextArea)obj).append(s);
             return;
          }
          if ( obj instanceof FileOutputStream )
          {
             ((FileOutputStream)obj).write(s.getBytes());
             return;
          }
          if ( obj instanceof PrintStream )
             ((PrintStream)obj).print(s);
       }   public int sendMessage(String s)
       {
          try
          {
             DatagramPacket datagrampacket = new DatagramPacket(q_msg, q_msg_len, InetAddress.getByName(s), 53);
             dgs.send(datagrampacket);
          }
          catch ( UnknownHostException _ex )
          {
             return -1;
          }
          catch ( IOException _ex )
          {
             return -2;
          }
          return 0;
       }   public int receiveMessage()
       {
          DatagramPacket datagrampacket = new DatagramPacket(q_msg, msglen);
          int i;
          try
          {
             dgs.receive(datagrampacket);
             i = Bytes2Int(datagrampacket.getData()[0], datagrampacket.getData()[1]);
             if ( i == query_id )
             {
                if ( debug )
                   // printString(tohexString(datagrampacket.getData(), datagrampacket.getLength(), 0), 1, 4);
    printString(tohexString(datagrampacket.getData(), datagrampacket.getLength(), 0), 4);
                getMessage(datagrampacket.getData(), datagrampacket.getLength());
                i = 0;
             }
          }
          catch ( InterruptedIOException _ex )
          {
             return -1;
          }
          catch ( IOException _ex )
          {
             return -2;
          }
          return i;
       }   public int getReturnCode()
       {
          return f_rcode;
       }   public String getAnswer(int i)
       {
          if ( i >= 0 && i < RR_total )
             return RR_rdata[i];
          else
             return null;
       }   public String getDomainName(int i)
       {
          if ( i >= 0 && i < RR_total )
             return RR_dnames[i];
          else
             return null;
       }   public int getMXPreference(int i)
       {
          if ( i < RR_total && RR_type[i] == QT_MX )
             return RR_mxpref[i];
          else
             return -1;
       }   public int getType(int i)
       {
          if ( i >= 0 && i < RR_total )
             return RR_type[i];
          else
             return -1;
       }   public int getAnswersTotal()
       {
          return RR_total;
       }   public int getNumberOfAnswers()
       {
          return aRR_num;
       }   public int getNumberOfAuthorityRec()
       {
          return aaRR_num;
       }   public int getNumberOfAdditionalRec()
       {
          return aadRR_num;
       }   private int fromByte(byte byte0, int i, int j, boolean flag)
       {
          int k = Byte2Int(byte0);
          int l = flag ? 256 : 1;
          String s = Integer.toBinaryString(k);
          for ( int i1 = 7; s.length() < 8; i1-- )
             s = '0' + s;      s = s.substring(i, i + j);
          k = 0;
          for ( int j1 = s.length() - 1; j1 >= 0; j1-- )
          {
             if ( s.charAt(j1) == '1' )
                k += l;
             l *= 2;
          }      return k;
       }   private int fromByte(byte byte0, int i, int j)
       {
          return fromByte(byte0, i, j, false);
       }   private int Bytes2Int(byte byte0, byte byte1)
       {
          int i = 0;
          if ( byte0 == 0 && byte1 == 0 )
             return 0;
          if ( byte1 != 0 )
             i = Byte2Int(byte1);
          if ( byte0 == 0 )
             return i;
          else
             return fromByte(byte0, 0, 8, true) + i;
       }   private int Byte2Int(byte byte0)
       {
          if ( byte0 < 0 )
             return byte0 + 256;
          else
             return byte0;
       }   private byte hextoByte(char c)
       {
          if ( c <= '9' && c >= '0' )
             return (byte)(c - 48);
          if ( c >= 'a' || c <= 'f' )
             return (byte)((c - 97) + 10);
          if ( c >= 'A' || c <= 'F' )
             return (byte)((c - 65) + 10);
          else
             return 0;
       }   private char halfBytetoHex(int i)
       {
          if ( i <= 9 )
             return (char)(48 + i);
          if ( i <= 15 )
             return (char)((65 + i) - 10);
          else
             return '-';
       }   private byte[] toByte(String s, byte abyte0[], int i)
       {
          for ( int j = 0; j < (s.length() + 1) / 2; j++ )
          {
             abyte0[j + i] = (byte)(16 * hextoByte(s.charAt(2 * j)));
             if ( j != s.length() - 1 )
                abyte0[j + i] = (byte)(abyte0[j + i] + hextoByte(s.charAt(2 * j + 1)));
          }      return abyte0;
       }   private String tohexString(byte abyte0[], int i, int j)
       {
          StringBuffer stringbuffer = new StringBuffer(i * 2);
          for ( int l = 0; l < i; l++ )
          {
             int k;
             if ( abyte0[l + j] < 0 )
                k = abyte0[l + j] + 256;
             else
                k = abyte0[l + j];
             stringbuffer.insert(2 * l, halfBytetoHex(k / 16));
             stringbuffer.insert(2 * l + 1, halfBytetoHex(k - 16 * (k / 16)));
          }      return stringbuffer.toString();
       }//   private String tohexString(byte abyte0[], int i)
    //   {
    //      return tohexString(abyte0, i, 0);
    //   }
    //
    //   private String tohexString(byte abyte0[])
    //   {
    //      return tohexString(abyte0, abyte0.length, 0);
    //   }   private void printString(String s, int j)
       {
          for ( int k = 0; k < s.length() - j * 2; k += j * 2 )
          {
             System.out.print(k / 2 + ": ");
             for ( int l = 0; l < j * 2; l += 2 )
                if ( k + l + 2 < s.length() )
                   System.out.print(s.substring(k + l, k + l + 2) + " ");         System.out.println("");
          }   }   final static int msglen = 1024;
       final static byte header[] = {
          0, 2, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0
       };
       final static int head_len = 12;
       final static int OP_ST_QUERY = 0;
       final static int OP_IN_QUERY = 1;
       final static int OP_SER_STATUS = 2;
       final public static int QT_A = 1;
       final static int QT_NS = 2;
       final static int QT_CNAME = 5;
       final public static int QT_PTR = 12;
       final public static int QT_HINFO = 13;
       final public static int QT_MX = 15;
       final public static int QT_TXT = 16;
       int id;
       int f_QR;
       int f_AA;
       int f_TC;
       int f_RD;
       int f_RA;
       int f_opcode;
       int f_rcode;
       int q_num;
       int aRR_num;
       int aaRR_num;
       int aadRR_num;
       String RR_dnames[];
       String RR_rdata[];
       int RR_type[];
       int RR_dlength[];
       int RR_mxpref[];
       int pos;
       int RR_total;
       DatagramSocket dgs;
       int query_id;
       byte q_msg[];
       int q_msg_len;
       int query_type;
       static boolean debug = true;}
      

  3.   

    用ping命令来ping 你想要的域名,比如说你想查域名www.aaa.com是否存在,可以:
    Process rt=Runtime.getRuntime().exec("ping www.aaa.com");
    再取得这个进程的输出信息,如果输出信息中说不能解析该域名,那么该域名不存在!
      

  4.   

    哦,好象只能ping ,没有通用的数据库 查找
      

  5.   

    Process rt=Runtime.getRuntime().exec("ping www.aaa.com");
    没用过~!???
      

  6.   

    就是通过调用windows进程实现,这样估计到别的平台就不行了~
      

  7.   

    类似的还可以 
      Runtime run = Runtime.getRuntime();
               run.exec("ping www.163.com");