資源簡介
設計一個DNS服務器程序,讀入“域名-IP地址”對照表,當客戶端查詢域名對應的IP地址時,用域名檢索該對照表,三種檢索結果:
檢索結果為ip地址0.0.0.0,則向客戶端返回“域名不存在”的報錯消息(不良網站攔截功能)
檢索結果為普通IP地址,則向客戶返回這個地址(服務器功能)
表中未檢到該域名,則向因特網DNS服務器發出查詢,并將結果返給客戶端(中繼功能)
考慮多個計算機上的客戶端會同時查詢,需要進行消息ID的轉換

代碼片段和文件信息
package?com.kngxscn.dnsrelay;
public?class?DNSHeader?{
/**
?*?DNS?Header
????0??1??2??3??4??5??6??7??0??1??2??3??4??5??6??7
??+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
??|??????????????????????ID???????????????????????|
??+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
??|QR|??opcode???|AA|TC|RD|RA|???Z????|???RCODE???|
??+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
??|????????????????????QDCOUNT????????????????????|
??+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
??|????????????????????ANCOUNT????????????????????|
??+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
??|????????????????????NSCOUNT????????????????????|
??+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
??|????????????????????ARCOUNT????????????????????|
??+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
?*/
/*?會話標識(2字節)*/
private?short?transID;
/*?Flags(2字節)*/
private?short?flags;
/*?QDCOUNT(2字節)*/
private?short?qdcount;
/*?ANCOUNT(2字節)*/
private?short?ancount;
/*?NSCOUNT(2字節)*/
private?short?nscount;
/*?ARCOUNT(2字節)*/
private?short?arcount;
public?DNSHeader()?{}
public?DNSHeader(short?transID?short?flags?short?qdcount?short?ancount?short?nscount?short?arcount)?{
this.transID?=?transID;
this.flags?=?flags;
this.qdcount?=?qdcount;
this.ancount?=?ancount;
this.nscount?=?nscount;
this.arcount?=?arcount;
}
public?short?getTransID()?{
return?transID;
}
public?void?setTransID(short?transID)?{
this.transID?=?transID;
}
public?short?getFlags()?{
return?flags;
}
public?void?setFlags(short?flags)?{
this.flags?=?flags;
}
public?short?getQdcount()?{
return?qdcount;
}
public?void?setQdcount(short?qdcount)?{
this.qdcount?=?qdcount;
}
public?short?getAncount()?{
return?ancount;
}
public?void?setAncount(short?ancount)?{
this.ancount?=?ancount;
}
public?short?getNscount()?{
return?nscount;
}
public?void?setNscount(short?nscount)?{
this.nscount?=?nscount;
}
public?short?getArcount()?{
return?arcount;
}
public?void?setArcount(short?arcount)?{
this.arcount?=?arcount;
}
????/**
?????*?輸出包含DNS協議頭所有信息的字節數組
?????*/
????public?byte[]?toByteArray()?{
????byte[]?data?=?new?byte[12];
????int?offset?=?0;
????byte[]?byte_2?=?new?byte[2];
????byte_2?=?Utils.shortToByteArray(transID);
????for?(int?i=0;?i<2;?i++)?{
????????data[offset++]?=?byte_2[i];
????????}
????????byte_2?=?Utils.shortToByteArray(flags);
????????for?(int?i=0;?i<2;?i++)?{
????????????data[offset++]?=?byte_2[i];
????????}
????????byte_2?=?Utils.shortToByteArray(qdcount);
????????for?(int?i=0;?i<2;?i++)?{
????????????data[offset++]?=?byte_2[i];
????????}
????????byte_2?=?Utils.shortToByteArray(ancount);
????????for?(int?i=0;?i<2;?i++)?{
????????????data[offset++]?=?byte_2[i];
????????}
????????byte_2?=?Utils.shortToByteArray(nscount);
????????for?(int?i=0;?i<2;?i++)?{
????????????data[offset++]?=?byte_2[i];
????????}
????????byte_2?=?Utils.shortToByteArray(arcount);
????????for?(int?i=0;?i<2;?i++)?{
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2017-12-11?13:43??dnsrelay-master\
?????文件?????????562??2017-12-11?13:43??dnsrelay-master\README.md
?????文件??????????81??2017-12-11?13:43??dnsrelay-master\dnsrelay.txt
?????文件?????????758??2017-12-11?13:43??dnsrelay-master\pom.xm
?????目錄???????????0??2017-12-11?13:43??dnsrelay-master\src\
?????目錄???????????0??2017-12-11?13:43??dnsrelay-master\src\main\
?????目錄???????????0??2017-12-11?13:43??dnsrelay-master\src\main\java\
?????目錄???????????0??2017-12-11?13:43??dnsrelay-master\src\main\java\com\
?????目錄???????????0??2017-12-11?13:43??dnsrelay-master\src\main\java\com\kngxscn\
?????目錄???????????0??2017-12-11?13:43??dnsrelay-master\src\main\java\com\kngxscn\dnsrelay\
?????文件????????3168??2017-12-11?13:43??dnsrelay-master\src\main\java\com\kngxscn\dnsrelay\DNSHeader.java
?????文件????????1860??2017-12-11?13:43??dnsrelay-master\src\main\java\com\kngxscn\dnsrelay\DNSQuestion.java
?????文件????????3443??2017-12-11?13:43??dnsrelay-master\src\main\java\com\kngxscn\dnsrelay\DNSRR.java
?????文件????????2440??2017-12-11?13:43??dnsrelay-master\src\main\java\com\kngxscn\dnsrelay\DNSRelayServer.java
?????文件????????7698??2017-12-11?13:43??dnsrelay-master\src\main\java\com\kngxscn\dnsrelay\QueryParser.java
?????文件????????4818??2017-12-11?13:43??dnsrelay-master\src\main\java\com\kngxscn\dnsrelay\Utils.java
?????目錄???????????0??2017-12-11?13:43??dnsrelay-master\src\test\
?????目錄???????????0??2017-12-11?13:43??dnsrelay-master\src\test\java\
?????目錄???????????0??2017-12-11?13:43??dnsrelay-master\src\test\java\com\
?????目錄???????????0??2017-12-11?13:43??dnsrelay-master\src\test\java\com\kngxscn\
?????目錄???????????0??2017-12-11?13:43??dnsrelay-master\src\test\java\com\kngxscn\dnsrelay\
?????文件?????????674??2017-12-11?13:43??dnsrelay-master\src\test\java\com\kngxscn\dnsrelay\DNSRelayServerTest.java
?????文件?????????577??2017-12-11?13:43??dnsrelay-master\src\test\java\com\kngxscn\dnsrelay\UtilsTest.java
評論
共有 條評論