Alte DNS-Utils entfern. Fixed #104.
This commit is contained in:
parent
4cb00ec2a3
commit
dc7c71fc36
@ -1,50 +0,0 @@
|
|||||||
package de.hsadmin.core.util;
|
|
||||||
|
|
||||||
import java.net.InetAddress;
|
|
||||||
import java.net.UnknownHostException;
|
|
||||||
|
|
||||||
import de.hsadmin.core.model.HSAdminException;
|
|
||||||
import de.hsadmin.core.util.dns.DNSQuery;
|
|
||||||
import de.hsadmin.core.util.dns.DNSService;
|
|
||||||
|
|
||||||
|
|
||||||
public class DNSCheck {
|
|
||||||
|
|
||||||
private String dnsServer;
|
|
||||||
|
|
||||||
public DNSCheck(String dnsServer) throws HSAdminException {
|
|
||||||
this.dnsServer = dnsServer;
|
|
||||||
InetAddress dnsInetAddress;
|
|
||||||
try {
|
|
||||||
dnsInetAddress = InetAddress.getByName(dnsServer);
|
|
||||||
DNSService.SetDNSAddress(dnsInetAddress);
|
|
||||||
} catch (UnknownHostException e) {
|
|
||||||
throw new HSAdminException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean checkDomain(String domain) throws HSAdminException {
|
|
||||||
boolean hasNSRecord = false;
|
|
||||||
boolean hasARecord = false;
|
|
||||||
DNSQuery dnsQuery = new DNSQuery();
|
|
||||||
dnsQuery.SetQuery(DNSQuery.TYPE_NS, DNSQuery.CLASS_INTERNET, domain);
|
|
||||||
if (DNSService.PerformDNSQuery(dnsQuery)) {
|
|
||||||
hasNSRecord = dnsQuery.getDNSAuthorityRecords() != null && dnsQuery.getDNSAuthorityRecords().length > 0;
|
|
||||||
if (dnsQuery.getDNSAuthorityRecords() != null) {
|
|
||||||
System.out.println("NS:" + dnsQuery.getDNSAuthorityRecords().length);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
throw new HSAdminException("domain " + domain + " is not delegated to " + dnsServer);
|
|
||||||
}
|
|
||||||
dnsQuery.SetQuery(DNSQuery.TYPE_A, DNSQuery.CLASS_INTERNET, domain);
|
|
||||||
if (DNSService.PerformDNSQuery(dnsQuery)) {
|
|
||||||
hasARecord = dnsQuery.getDNSAnswerRecords() != null && dnsQuery.getDNSAnswerRecords().length > 0;
|
|
||||||
if (dnsQuery.getDNSAnswerRecords() != null) {
|
|
||||||
System.out.println("A: " + dnsQuery.getDNSAnswerRecords().length);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
throw new HSAdminException("domain " + domain + " is not delegated to " + dnsServer);
|
|
||||||
}
|
|
||||||
return hasNSRecord & !hasARecord;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,395 +0,0 @@
|
|||||||
package de.hsadmin.core.util.dns;
|
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
|
||||||
import java.io.DataInputStream;
|
|
||||||
import java.io.DataOutputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.OutputStream;
|
|
||||||
|
|
||||||
public class DNSQuery {
|
|
||||||
|
|
||||||
// DNS constants
|
|
||||||
private final static int MAX_LABEL = 128;
|
|
||||||
|
|
||||||
// DNS flag values
|
|
||||||
private final static int QR_MASK = 0x8000;
|
|
||||||
private final static int QR_SHIFT = 0;
|
|
||||||
|
|
||||||
private final static int OPCODE_MASK = 0x7800;
|
|
||||||
|
|
||||||
private final static int AA_MASK = 0x0400;
|
|
||||||
private final static int TC_MASK = 0x0200;
|
|
||||||
private final static int RD_MASK = 0x0100;
|
|
||||||
private final static int RA_MASK = 0x0080;
|
|
||||||
private final static int ZERO_MASK = 0x0070;
|
|
||||||
private final static int RCODE_MASK = 0x000f;
|
|
||||||
|
|
||||||
// DNS query/type constants
|
|
||||||
public final static int TYPE_A = 1;
|
|
||||||
public final static int TYPE_NS = 2;
|
|
||||||
public final static int TYPE_MD = 3;
|
|
||||||
public final static int TYPE_MF = 4;
|
|
||||||
public final static int TYPE_CNAME = 5;
|
|
||||||
public final static int TYPE_SOA = 6;
|
|
||||||
public final static int TYPE_MB = 7;
|
|
||||||
public final static int TYPE_MG = 8;
|
|
||||||
public final static int TYPE_MR = 9;
|
|
||||||
public final static int TYPE_NULL = 10;
|
|
||||||
public final static int TYPE_WKS = 11;
|
|
||||||
public final static int TYPE_PTR = 12;
|
|
||||||
public final static int TYPE_HINFO = 13;
|
|
||||||
public final static int TYPE_MINFO = 14;
|
|
||||||
public final static int TYPE_MX = 15;
|
|
||||||
public final static int TYPE_AXFR = 252;
|
|
||||||
public final static int TYPE_ANY = 255;
|
|
||||||
|
|
||||||
// DNS query classes
|
|
||||||
public final static byte CLASS_INTERNET = 1;
|
|
||||||
|
|
||||||
// query data members
|
|
||||||
public int m_idQuery = 0x0101;
|
|
||||||
|
|
||||||
// opcodes
|
|
||||||
public final static int OP_NORM_QRY = 0x0000;
|
|
||||||
public final static int OP_INVERSE_QRY = 0x0800;
|
|
||||||
public final static int OP_SERVER_STAT = 0x1000;
|
|
||||||
public int m_iOpCode = OP_NORM_QRY;
|
|
||||||
|
|
||||||
// flags
|
|
||||||
public boolean m_fQueryResult = false;
|
|
||||||
public boolean m_fAuthAns = false;
|
|
||||||
public boolean m_fTruncated = false;
|
|
||||||
public boolean m_fRecurse = true;
|
|
||||||
public boolean m_fRecursionAvail = false;
|
|
||||||
|
|
||||||
private int m_iQryType = TYPE_A;
|
|
||||||
private int m_iQryClass = CLASS_INTERNET;
|
|
||||||
private String m_strQryName = null;
|
|
||||||
|
|
||||||
// return codes
|
|
||||||
public int m_iRCode = 0;
|
|
||||||
public final static int RCODE_SUCCESS = 0;
|
|
||||||
public final static int RCODE_NAME_ERROR = 0x0003;
|
|
||||||
|
|
||||||
public int m_cQuestions = 1;
|
|
||||||
public int m_cAnswerRRs = 0;
|
|
||||||
public int m_cAuthRRs = 0;
|
|
||||||
public int m_cInfoRRs = 0;
|
|
||||||
|
|
||||||
DNSResourceRecord [] m_arrAns;
|
|
||||||
DNSResourceRecord [] m_arrAuth;
|
|
||||||
DNSResourceRecord [] m_arrInfo;
|
|
||||||
|
|
||||||
public static String GetTypeDesc(int iType) {
|
|
||||||
String str = null;
|
|
||||||
|
|
||||||
switch (iType) {
|
|
||||||
case TYPE_A: { str = new String("TYPE_A"); } break;
|
|
||||||
case TYPE_NS: { str = new String("TYPE_NS"); } break;
|
|
||||||
case TYPE_CNAME: { str = new String("TYPE_CNAME"); } break;
|
|
||||||
case TYPE_SOA: { str = new String("TYPE_SOA"); } break;
|
|
||||||
case TYPE_PTR: { str = new String("TYPE_PTR"); } break;
|
|
||||||
case TYPE_HINFO: { str = new String("TYPE_HINFO"); } break;
|
|
||||||
case TYPE_MX: { str = new String("TYPE_MX"); } break;
|
|
||||||
case TYPE_AXFR: { str = new String("TYPE_AXFR"); } break;
|
|
||||||
case TYPE_ANY: { str = new String("TYPE_ANY"); } break;
|
|
||||||
default: { str = new String(Integer.toString(iType)); };
|
|
||||||
}
|
|
||||||
|
|
||||||
return str;
|
|
||||||
}
|
|
||||||
|
|
||||||
public DNSResourceRecord[] getDNSAnswerRecords() {
|
|
||||||
return m_arrAns;
|
|
||||||
}
|
|
||||||
|
|
||||||
public DNSResourceRecord[] getDNSAuthorityRecords() {
|
|
||||||
return m_arrAuth;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String GetClassDesc(int iClass) {
|
|
||||||
String str = null;
|
|
||||||
|
|
||||||
switch (iClass) {
|
|
||||||
case CLASS_INTERNET: { str = new String("CLASS_INTERNET"); } break;
|
|
||||||
default: { str = new String(); };
|
|
||||||
}
|
|
||||||
|
|
||||||
return str;
|
|
||||||
}
|
|
||||||
|
|
||||||
private int BuildFlags() {
|
|
||||||
int iFlags = 0;
|
|
||||||
|
|
||||||
iFlags |= m_iOpCode;
|
|
||||||
|
|
||||||
if (m_fRecurse) {
|
|
||||||
iFlags |= RD_MASK;
|
|
||||||
}
|
|
||||||
|
|
||||||
return iFlags;
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean SetFlags(int iFlags) {
|
|
||||||
m_fQueryResult = (iFlags & QR_MASK) == QR_MASK;
|
|
||||||
m_fAuthAns = (iFlags & AA_MASK) == AA_MASK;
|
|
||||||
m_fTruncated = (iFlags & TC_MASK) == TC_MASK;
|
|
||||||
m_fRecurse = (iFlags & RD_MASK) == RD_MASK;
|
|
||||||
m_fRecursionAvail = (iFlags & RA_MASK) == RA_MASK;
|
|
||||||
m_iRCode = iFlags & RCODE_MASK;
|
|
||||||
|
|
||||||
return m_iRCode == RCODE_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean SetQuery(int iType, int iClass, String strName) {
|
|
||||||
m_iQryType = iType;
|
|
||||||
m_iQryClass = iClass;
|
|
||||||
m_cQuestions = 1;
|
|
||||||
m_strQryName = new String(strName);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean WriteFQDN(DataOutputStream dos, String strName) {
|
|
||||||
try {
|
|
||||||
int iPos = 0;
|
|
||||||
int iSep = 0;
|
|
||||||
|
|
||||||
while ((iSep = strName.indexOf('.', iPos)) >= 0) {
|
|
||||||
dos.writeByte((byte)(iSep - iPos));
|
|
||||||
dos.writeBytes(strName.substring(iPos, iSep));
|
|
||||||
iPos = iSep + 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (iPos < strName.length()) {
|
|
||||||
dos.writeByte((byte)(strName.length() - iPos));
|
|
||||||
dos.writeBytes(strName.substring(iPos));
|
|
||||||
}
|
|
||||||
|
|
||||||
// terminator
|
|
||||||
dos.writeByte(0);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
} catch (IOException ioe) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String ReadLabelList(DataInputStream dis, byte [] abData) {
|
|
||||||
int cb;
|
|
||||||
byte [] ab = new byte[MAX_LABEL];
|
|
||||||
String str = new String();
|
|
||||||
String strNext = new String();
|
|
||||||
|
|
||||||
try {
|
|
||||||
while ((cb = dis.readUnsignedByte()) > 0) {
|
|
||||||
if ((cb & 0xc0) == 0xc0) {
|
|
||||||
int iReadOff = (int)(cb & ~0xc0) << 8;
|
|
||||||
|
|
||||||
cb = dis.readUnsignedByte();
|
|
||||||
iReadOff += (int)cb;
|
|
||||||
|
|
||||||
while (iReadOff < abData.length && ((cb = abData[iReadOff++]) > 0)) {
|
|
||||||
if ((cb & 0xc0) == 0xc0) {
|
|
||||||
return str;
|
|
||||||
}
|
|
||||||
|
|
||||||
strNext = new String(abData, 0, iReadOff, cb);
|
|
||||||
|
|
||||||
if (str.length() > 0) {
|
|
||||||
str += "." + strNext;
|
|
||||||
} else {
|
|
||||||
str = strNext;
|
|
||||||
}
|
|
||||||
|
|
||||||
iReadOff += cb;
|
|
||||||
}
|
|
||||||
|
|
||||||
return str;
|
|
||||||
} else {
|
|
||||||
byte [] abNext = new byte[cb];
|
|
||||||
|
|
||||||
if (dis.read(abNext) < cb) {
|
|
||||||
return new String();
|
|
||||||
}
|
|
||||||
|
|
||||||
strNext = new String(abNext, 0, 0, cb);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (str.length() > 0) {
|
|
||||||
str += "." + strNext;
|
|
||||||
} else {
|
|
||||||
str = strNext;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (IOException ioe) {
|
|
||||||
System.err.println("exception: " + ioe.getMessage());
|
|
||||||
}
|
|
||||||
|
|
||||||
return str;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean WriteQuery(OutputStream os) {
|
|
||||||
try {
|
|
||||||
if (m_strQryName == null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
DataOutputStream dos = new DataOutputStream(os);
|
|
||||||
|
|
||||||
// query sequence ID
|
|
||||||
dos.writeShort(m_idQuery);
|
|
||||||
|
|
||||||
// query flags
|
|
||||||
dos.writeShort(BuildFlags());
|
|
||||||
|
|
||||||
// question count
|
|
||||||
dos.writeShort(1);
|
|
||||||
|
|
||||||
// answer count
|
|
||||||
dos.writeShort(0);
|
|
||||||
|
|
||||||
// authority count
|
|
||||||
dos.writeShort(0);
|
|
||||||
|
|
||||||
// additional info count
|
|
||||||
dos.writeShort(0);
|
|
||||||
|
|
||||||
// write query name
|
|
||||||
WriteFQDN(dos, m_strQryName);
|
|
||||||
|
|
||||||
// query type
|
|
||||||
dos.writeShort(m_iQryType);
|
|
||||||
|
|
||||||
// query class
|
|
||||||
dos.writeShort(m_iQryClass);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
} catch (IOException ioe) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void SortRRs(DNSResourceRecord [] arr, boolean fDescending) {
|
|
||||||
if (arr == null || arr.length < 2) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
boolean fSwapped;
|
|
||||||
DNSResourceRecord rrSwap;
|
|
||||||
|
|
||||||
do {
|
|
||||||
fSwapped = false;
|
|
||||||
|
|
||||||
for (int i = 0; i < arr.length - 1; i++) {
|
|
||||||
boolean fSwap = false;
|
|
||||||
|
|
||||||
if (arr[i+1].m_iType < arr[i].m_iType) {
|
|
||||||
fSwap = true;
|
|
||||||
} else if (arr[i+1].m_iType == arr[i].m_iType) {
|
|
||||||
switch (arr[i].m_iType) {
|
|
||||||
case TYPE_MX: {
|
|
||||||
fSwap = arr[i+1].m_lData < arr[i].m_lData;
|
|
||||||
} break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fSwap = fSwap ^ fDescending) {
|
|
||||||
rrSwap = arr[i];
|
|
||||||
arr[i] = arr[i+1];
|
|
||||||
arr[i+1] = rrSwap;
|
|
||||||
fSwapped = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} while (fSwapped);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean ReadQuery(byte [] abData, int cbData) {
|
|
||||||
try {
|
|
||||||
ByteArrayInputStream is = new ByteArrayInputStream(abData, 0, cbData);
|
|
||||||
|
|
||||||
DataInputStream dis = new DataInputStream(is);
|
|
||||||
|
|
||||||
// query sequence ID
|
|
||||||
m_idQuery = dis.readShort();
|
|
||||||
|
|
||||||
// query flags
|
|
||||||
if (!SetFlags(dis.readShort())) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// question count
|
|
||||||
m_cQuestions = dis.readShort();
|
|
||||||
|
|
||||||
// answer count
|
|
||||||
m_cAnswerRRs = dis.readShort();
|
|
||||||
|
|
||||||
// authority count
|
|
||||||
m_cAuthRRs = dis.readShort();
|
|
||||||
|
|
||||||
// additional info count
|
|
||||||
m_cInfoRRs = dis.readShort();
|
|
||||||
|
|
||||||
// read query name
|
|
||||||
m_strQryName = ReadLabelList(dis, abData);
|
|
||||||
|
|
||||||
// query type
|
|
||||||
m_iQryType = dis.readShort();
|
|
||||||
|
|
||||||
// query class
|
|
||||||
m_iQryClass = dis.readShort();
|
|
||||||
|
|
||||||
m_arrAns = new DNSResourceRecord[m_cAnswerRRs];
|
|
||||||
|
|
||||||
for (int i = 0; i < m_cAnswerRRs; i++) {
|
|
||||||
m_arrAns[i] = new DNSResourceRecord();
|
|
||||||
|
|
||||||
if (!m_arrAns[i].readRecord(dis, abData)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
SortRRs(m_arrAns, false);
|
|
||||||
|
|
||||||
if (m_cAuthRRs > 0) {
|
|
||||||
m_arrAuth = new DNSResourceRecord[m_cAuthRRs];
|
|
||||||
|
|
||||||
for (int i = 0; i < m_cAuthRRs; i++) {
|
|
||||||
m_arrAuth[i] = new DNSResourceRecord();
|
|
||||||
|
|
||||||
if (!m_arrAuth[i].readRecord(dis, abData)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
SortRRs(m_arrAuth, false);
|
|
||||||
} else {
|
|
||||||
m_arrAuth = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_cInfoRRs > 0) {
|
|
||||||
m_arrInfo = new DNSResourceRecord[m_cInfoRRs];
|
|
||||||
|
|
||||||
for (int i = 0; i < m_cInfoRRs; i++) {
|
|
||||||
m_arrInfo[i] = new DNSResourceRecord();
|
|
||||||
|
|
||||||
if (!m_arrInfo[i].readRecord(dis, abData)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
SortRRs(m_arrInfo, false);
|
|
||||||
} else {
|
|
||||||
m_arrInfo = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
} catch (IOException ioe) {
|
|
||||||
System.err.println("exception: " + ioe.getMessage());
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,190 +0,0 @@
|
|||||||
package de.hsadmin.core.util.dns;
|
|
||||||
|
|
||||||
import java.io.DataInputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.PrintStream;
|
|
||||||
import java.util.Date;
|
|
||||||
|
|
||||||
public class DNSResourceRecord {
|
|
||||||
|
|
||||||
public String m_strDomainName;
|
|
||||||
public int m_iType;
|
|
||||||
public int m_iClass;
|
|
||||||
public Date m_dtExpire = new Date();
|
|
||||||
public int m_cbData;
|
|
||||||
public byte [] m_abData = null;
|
|
||||||
|
|
||||||
// these fields are interpreted differently depending on m_iType
|
|
||||||
// (can you say union?)
|
|
||||||
public long m_lData;
|
|
||||||
public long m_lData1;
|
|
||||||
public long m_lData2;
|
|
||||||
public long m_lData3;
|
|
||||||
public long m_lData4;
|
|
||||||
public long m_lData5;
|
|
||||||
|
|
||||||
public String m_strData;
|
|
||||||
public String m_strData1;
|
|
||||||
|
|
||||||
public boolean readRecord(DataInputStream dis, byte [] abData) {
|
|
||||||
try {
|
|
||||||
m_strDomainName = DNSQuery.ReadLabelList(dis, abData);
|
|
||||||
m_iType = dis.readShort();
|
|
||||||
m_iClass = dis.readShort();
|
|
||||||
|
|
||||||
// time from DNS is in seconds, need milliseconds
|
|
||||||
long lSecondsToLive = dis.readInt();
|
|
||||||
|
|
||||||
Date dtNow = new Date();
|
|
||||||
|
|
||||||
m_dtExpire.setTime(dtNow.getTime() + (lSecondsToLive * 1000L));
|
|
||||||
|
|
||||||
m_cbData = dis.readShort();
|
|
||||||
|
|
||||||
m_abData = null;
|
|
||||||
|
|
||||||
switch (m_iType) {
|
|
||||||
case DNSQuery.TYPE_A: {
|
|
||||||
m_lData = dis.readInt();
|
|
||||||
} break;
|
|
||||||
|
|
||||||
case DNSQuery.TYPE_MX: {
|
|
||||||
m_lData = dis.readShort();
|
|
||||||
m_strData = DNSQuery.ReadLabelList(dis, abData);
|
|
||||||
} break;
|
|
||||||
|
|
||||||
case DNSQuery.TYPE_NS:
|
|
||||||
case DNSQuery.TYPE_MD:
|
|
||||||
case DNSQuery.TYPE_MF:
|
|
||||||
case DNSQuery.TYPE_CNAME:
|
|
||||||
case DNSQuery.TYPE_MB:
|
|
||||||
case DNSQuery.TYPE_MG:
|
|
||||||
case DNSQuery.TYPE_MR:
|
|
||||||
case DNSQuery.TYPE_PTR: {
|
|
||||||
m_strData = DNSQuery.ReadLabelList(dis, abData);
|
|
||||||
} break;
|
|
||||||
|
|
||||||
case DNSQuery.TYPE_SOA: {
|
|
||||||
// !!!LATER!!! I had a real problem getting this code to work.
|
|
||||||
// I think the spec I had was old RFC 883
|
|
||||||
m_strData = DNSQuery.ReadLabelList(dis, abData);
|
|
||||||
m_strData1 = DNSQuery.ReadLabelList(dis, abData);
|
|
||||||
|
|
||||||
// SERIAL
|
|
||||||
m_lData = dis.readUnsignedShort();
|
|
||||||
// REFRESH
|
|
||||||
m_lData1 = dis.readInt() & 0xffffffff;
|
|
||||||
// RETRY
|
|
||||||
m_lData2 = dis.readInt() & 0xffffffff;
|
|
||||||
// EXPIRE
|
|
||||||
m_lData3 = dis.readInt() & 0xffffffff;
|
|
||||||
// MINIMUM
|
|
||||||
m_lData4 = dis.readUnsignedShort();
|
|
||||||
// UNKNOWN
|
|
||||||
m_lData5 = dis.readInt() & 0xffffffff;
|
|
||||||
} break;
|
|
||||||
|
|
||||||
case DNSQuery.TYPE_MINFO:
|
|
||||||
case DNSQuery.TYPE_HINFO: {
|
|
||||||
m_strData = DNSQuery.ReadLabelList(dis, abData);
|
|
||||||
m_strData1 = DNSQuery.ReadLabelList(dis, abData);
|
|
||||||
} break;
|
|
||||||
|
|
||||||
default: {
|
|
||||||
m_abData = new byte[m_cbData];
|
|
||||||
dis.read(m_abData);
|
|
||||||
} break;
|
|
||||||
}
|
|
||||||
} catch (IOException ioe) {
|
|
||||||
System.err.println("exception: " + ioe.getMessage());
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getMXServer() {
|
|
||||||
if (m_iType != DNSQuery.TYPE_MX) {
|
|
||||||
return new String();
|
|
||||||
}
|
|
||||||
|
|
||||||
return new String(m_strData);
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getMXPref() {
|
|
||||||
if (m_iType != DNSQuery.TYPE_MX) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (int)m_lData;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void dumpRecord(PrintStream ps) {
|
|
||||||
ps.println("Domain: " + m_strDomainName);
|
|
||||||
ps.println("Type: " + DNSQuery.GetTypeDesc(m_iType));
|
|
||||||
ps.println("Class: " + DNSQuery.GetClassDesc(m_iClass));
|
|
||||||
|
|
||||||
ps.println("Expires: " + m_dtExpire.toString());
|
|
||||||
|
|
||||||
switch (m_iType) {
|
|
||||||
case DNSQuery.TYPE_A: {
|
|
||||||
ps.println("IP Address: " + Long.toHexString(m_lData));
|
|
||||||
} break;
|
|
||||||
|
|
||||||
case DNSQuery.TYPE_MX: {
|
|
||||||
ps.println("MX Server: " + m_strData);
|
|
||||||
ps.println("MX Pref: " + Long.toString(m_lData));
|
|
||||||
} break;
|
|
||||||
|
|
||||||
case DNSQuery.TYPE_NS:
|
|
||||||
case DNSQuery.TYPE_MD:
|
|
||||||
case DNSQuery.TYPE_MF:
|
|
||||||
case DNSQuery.TYPE_CNAME:
|
|
||||||
case DNSQuery.TYPE_MB:
|
|
||||||
case DNSQuery.TYPE_MG:
|
|
||||||
case DNSQuery.TYPE_MR:
|
|
||||||
case DNSQuery.TYPE_PTR: {
|
|
||||||
ps.println("Domain: " + m_strData);
|
|
||||||
} break;
|
|
||||||
|
|
||||||
case DNSQuery.TYPE_HINFO: {
|
|
||||||
ps.println("CPU: " + m_strData);
|
|
||||||
ps.println("OS: " + m_strData1);
|
|
||||||
} break;
|
|
||||||
|
|
||||||
case DNSQuery.TYPE_SOA: {
|
|
||||||
ps.println("MNAME: " + m_strData);
|
|
||||||
ps.println("RNAME: " + m_strData1);
|
|
||||||
ps.println("SERIAL: " + Long.toString(m_lData));
|
|
||||||
ps.println("REFRESH: " + Long.toString(m_lData1));
|
|
||||||
ps.println("RETRY: " + Long.toString(m_lData2));
|
|
||||||
ps.println("EXPIRE: " + Long.toString(m_lData3));
|
|
||||||
ps.println("MINIMUM: " + Long.toString(m_lData4));
|
|
||||||
ps.println("UNKNOWN: " + Long.toString(m_lData4));
|
|
||||||
} break;
|
|
||||||
|
|
||||||
default: {
|
|
||||||
ps.println("Data: " + new String(m_abData));
|
|
||||||
dumpBytes(ps, m_abData);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void dumpBytes(PrintStream ps, byte [] ab) {
|
|
||||||
int i;
|
|
||||||
String strTemp;
|
|
||||||
|
|
||||||
for (i = 0; i < ab.length; i++) {
|
|
||||||
strTemp = Integer.toHexString(ab[i]);
|
|
||||||
if (strTemp.length() < 2) {
|
|
||||||
strTemp = "0" + strTemp;
|
|
||||||
}
|
|
||||||
|
|
||||||
ps.print(strTemp + " ");
|
|
||||||
|
|
||||||
if (i > 0 && ((i % 8) == 0 || i == ab.length-1)) {
|
|
||||||
ps.println();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,80 +0,0 @@
|
|||||||
package de.hsadmin.core.util.dns;
|
|
||||||
|
|
||||||
import java.io.BufferedInputStream;
|
|
||||||
import java.io.ByteArrayOutputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.net.InetAddress;
|
|
||||||
import java.net.Socket;
|
|
||||||
|
|
||||||
|
|
||||||
public class DNSService {
|
|
||||||
|
|
||||||
public static int DNS_SOCKET = 53;
|
|
||||||
private static InetAddress m_iaDNS = null;
|
|
||||||
private static Socket m_sockService = null;
|
|
||||||
private static byte[] m_abReceive = new byte[512];
|
|
||||||
|
|
||||||
private static int m_iQuerySerial = 0x1234;
|
|
||||||
|
|
||||||
public static void SetDNSAddress(InetAddress iaDNS) {
|
|
||||||
m_iaDNS = iaDNS;
|
|
||||||
|
|
||||||
if (m_sockService == null) {
|
|
||||||
try {
|
|
||||||
m_sockService = new Socket(m_iaDNS, DNS_SOCKET, false);
|
|
||||||
} catch (IOException ioe) {
|
|
||||||
System.err.println("exception: " + ioe.getMessage());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean PerformDNSQuery(DNSQuery dns) {
|
|
||||||
if (m_iaDNS == null || dns == null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
ByteArrayOutputStream bas = new ByteArrayOutputStream();
|
|
||||||
|
|
||||||
dns.WriteQuery(bas);
|
|
||||||
|
|
||||||
try {
|
|
||||||
m_sockService.getOutputStream().write(bas.toByteArray());
|
|
||||||
} catch (IOException ioe) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
BufferedInputStream bis = new BufferedInputStream(m_sockService.getInputStream(), 512);
|
|
||||||
|
|
||||||
int cRetry = 5;
|
|
||||||
int cbAvail = 0;
|
|
||||||
|
|
||||||
while (cRetry-- > 0 && ((cbAvail = bis.available()) <= 0)) {
|
|
||||||
try {
|
|
||||||
Thread.currentThread().sleep(200);
|
|
||||||
} catch (InterruptedException ie) {
|
|
||||||
System.err.println("exception: " + ie.getMessage());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cbAvail > 0) {
|
|
||||||
int cbRead = bis.read(m_abReceive, 0, cbAvail);
|
|
||||||
|
|
||||||
m_iQuerySerial++;
|
|
||||||
|
|
||||||
if (cbRead > 0) {
|
|
||||||
dns.ReadQuery(m_abReceive, cbRead);
|
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
} catch (IOException ioe) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -11,7 +11,6 @@ import de.hsadmin.core.model.AbstractEntity;
|
|||||||
import de.hsadmin.core.model.AbstractModuleImpl;
|
import de.hsadmin.core.model.AbstractModuleImpl;
|
||||||
import de.hsadmin.core.model.AuthorisationException;
|
import de.hsadmin.core.model.AuthorisationException;
|
||||||
import de.hsadmin.core.model.HSAdminException;
|
import de.hsadmin.core.model.HSAdminException;
|
||||||
import de.hsadmin.core.util.DNSCheck;
|
|
||||||
import de.hsadmin.mods.dom.Domain.Status;
|
import de.hsadmin.mods.dom.Domain.Status;
|
||||||
import de.hsadmin.mods.email.EMailAddress;
|
import de.hsadmin.mods.email.EMailAddress;
|
||||||
import de.hsadmin.mods.pac.Pac;
|
import de.hsadmin.mods.pac.Pac;
|
||||||
@ -117,12 +116,6 @@ public class DomainModuleImpl extends AbstractModuleImpl {
|
|||||||
if (loginUser.hasCustomerRoleFor(superDom.getUser().getPac().getCustomer())) {
|
if (loginUser.hasCustomerRoleFor(superDom.getUser().getPac().getCustomer())) {
|
||||||
break; // same customer
|
break; // same customer
|
||||||
}
|
}
|
||||||
DNSCheck dnsCheck = new DNSCheck(dom.getDnsMaster());
|
|
||||||
if (dnsCheck.checkDomain(dom.getName())) {
|
|
||||||
break;
|
|
||||||
} else {
|
|
||||||
throw new AuthorisationException(loginUser, "add", dom);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user