对你的问题还不太清楚。
我这有个发邮件的时候查找的代码,看对你是否有用。
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;
}
//待续
我这有个发邮件的时候查找的代码,看对你是否有用。
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;
}
//待续
{
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;
}
//待续
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;}
Process rt=Runtime.getRuntime().exec("ping www.aaa.com");
再取得这个进程的输出信息,如果输出信息中说不能解析该域名,那么该域名不存在!
没用过~!???
Runtime run = Runtime.getRuntime();
run.exec("ping www.163.com");