package util;
import java.util.*;
import java.net.*;
public class Dns {
private Vector<String> answername = null;
private Vector<InetAddress> answerip = null;
static byte[] QueryDomain(String domain) {
String[] StringSplit = domain.split("\\.");
String DomainFormat = "";
for (int i = 0; i < StringSplit.length; i++) {
DomainFormat = DomainFormat
+ (Character.toString((char) StringSplit[i].length()) + StringSplit[i]);
}
return (DomainFormat + Character.toString((char) 0)).getBytes();
}
public void opet() {
InetAddress url = null;
DatagramSocket ds = null;
try {
url = ByteArray.strtourl("202.97.224.68");
} catch (Exception urlException) {
System.out.println(urlException);
}
try {
ds = new DatagramSocket(8888);
} catch (Exception BlindError) {
System.out.println(BlindError + "udp无法使用端口");
}
byte[] b = new byte[1024];
DatagramPacket dpr = new DatagramPacket(b, 1024);
short Flags = 0x0100;
short Questions = 0x0001;
short AnswerRRs = 0x0000;
short AuthorityRRs = 0x0000;
short AdditionalRRs = 0x0000;
short SEARCHTYPE = 1;
short SEARCHCLASS = 0x0001; // Class 一般为 1 指 Internet
// 构造请求报文
ByteArray ba = new ByteArray();
ba.add((short) 20);
ba.add(Flags);
ba.add(Questions);
ba.add(AnswerRRs);
ba.add(AuthorityRRs);
ba.add(AdditionalRRs);
ba.add(QueryDomain("www.baidu.com"));
ba.add(SEARCHTYPE);
ba.add(SEARCHCLASS);
byte[] Header = ba.getBytes();
ba = null;
try {
ds.setSoTimeout(6000);
ds.send(new DatagramPacket(Header, Header.length, url, 53));
ds.receive(dpr);
} catch (Exception e) {
System.out.println(e);
}
System.out.println("TID is OK");
if ((ByteArray.bytes2short(b, 2) & 0x000f) != 0) {
System.out
.print("Error the domain you request is can't to explain!!");
}
answername = new Vector<String>();
answerip = new Vector<InetAddress>();
int answers = ByteArray.bytes2short(b, 6);
System.out.println("Answers:" + answers);
int answercount = 0;
// [4:6]Questions 数 两个字节
// [6:8]Answer RRs数 两个字节
// [8:10]Authority RRs数 两个字节
// [10:12]Additional RRs数 两个字节
int bitflag = 12;
while (b[bitflag] != 0)
bitflag++;
bitflag++; // 域名结束
bitflag += 2; // 跳过Type
bitflag += 2; // 跳过Class
int i = 0;
while (i < answers) {
System.out.println("============" + (i + 1) + "==============");
// Name 两个字节 指针-指向域名的字符
bitflag += 2;
if (ByteArray.bytes2short(b, bitflag) == 1) {
// Type 两个字节
bitflag += 8; // Class两个字节
// TTL 四个字节
bitflag += 2; // Rdatalength 两个字节
System.out.println(ByteArray.unsignedByte(b[bitflag]) + "."
+ ByteArray.unsignedByte(b[bitflag + 1]) + "."
+ ByteArray.unsignedByte(b[bitflag + 2]) + "."
+ ByteArray.unsignedByte(b[bitflag + 3]));
answerip.add(ByteArray.strtourl(ByteArray
.unsignedByte(b[bitflag])
+ "."
+ ByteArray.unsignedByte(b[bitflag + 1])
+ "."
+ ByteArray.unsignedByte(b[bitflag + 2])
+ "."
+ ByteArray.unsignedByte(b[bitflag + 3])));
bitflag += 4;
} else if (ByteArray.bytes2short(b, bitflag) == 5) // CNAME
{
bitflag += 8;
int rdatalength = ByteArray.bytes2short(b, bitflag);
bitflag += 2;
StringBuffer domain = new StringBuffer();
getDomain(b, bitflag, domain);
System.out.println(domain.toString());
answername.add(domain.toString());
bitflag += rdatalength;
}
i++;
}
}
public void getDomain(byte[] b, int offset, StringBuffer domain) {
if ((b[offset] & 0xc0) == 0xc0) {
getDomain(b, ByteArray.bytes2short(b, offset) & 0x3fff, domain);
} else if (b[offset] == 0) {
} else {
domain.append(new String(b, offset + 1, ByteArray
.unsignedByte(b[offset])) + ".");
getDomain(b, offset + 1 + ByteArray.unsignedByte(b[offset]), domain);
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
java 开发的局域网内DNS 服务器
共23个文件
class:10个
java:9个
temp:1个
4星 · 超过85%的资源 需积分: 14 123 下载量 191 浏览量
2011-12-08
10:40:29
上传
评论 2
收藏 22KB RAR 举报
温馨提示
配置:把源代码导入Eclipse中,运行DNSServer.java文件。然后把局域网内计算机系统的DNS服务器地址改为运行DNSServer.java的主机地址。这样就配置完成了。 源代码中还包含了DNS查询包和应答包的解析,非常利于学习。
资源推荐
资源详情
资源评论
收起资源包目录
DNS.rar (23个子文件)
DNS
bin
DNSQueryPackage.class 3KB
DNSServerOld.class 3KB
DNS.class 3KB
Ntp.class 2KB
DNSServer.class 2KB
DNSDispatcher.class 3KB
util
ByteArray.class 3KB
Dns.class 4KB
DNSClient.class 418B
temp 762B
.settings
org.eclipse.jdt.core.prefs 629B
src
DNS.java 2KB
DNSClient.java 151B
Ntp.java 1KB
DNSQueryPackage.java 2KB
Ntp.class 2KB
DNSDispatcher.java 2KB
DNSServer.java 766B
util
ByteArray.java 2KB
Dns.java 4KB
DNSServerOld.java 2KB
.project 379B
.classpath 301B
共 23 条
- 1
jy_game_over
- 粉丝: 52
- 资源: 10
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
前往页