Java源码示例:org.xbill.DNS.Rcode

示例1
@Test
@SuppressWarnings("AssertThrowsMultipleStatements")
public void testPublishDomainFails_whenDnsUpdateReturnsError() throws Exception {
  DomainBase domain =
      persistActiveDomain("example.tld")
          .asBuilder()
          .setNameservers(ImmutableSet.of(persistActiveHost("ns1.example.tld").createVKey()))
          .build();
  persistResource(domain);
  when(mockResolver.send(any(Message.class))).thenReturn(messageWithResponseCode(Rcode.SERVFAIL));
  VerifyException thrown =
      assertThrows(
          VerifyException.class,
          () -> {
            writer.publishDomain("example.tld");
            writer.commit();
          });
  assertThat(thrown).hasMessageThat().contains("SERVFAIL");
}
 
示例2
@Test
@SuppressWarnings("AssertThrowsMultipleStatements")
public void testPublishHostFails_whenDnsUpdateReturnsError() throws Exception {
  HostResource host =
      persistActiveSubordinateHost("ns1.example.tld", persistActiveDomain("example.tld"))
          .asBuilder()
          .setInetAddresses(ImmutableSet.of(InetAddresses.forString("10.0.0.1")))
          .build();
  persistResource(host);
  when(mockResolver.send(any(Message.class))).thenReturn(messageWithResponseCode(Rcode.SERVFAIL));
  VerifyException thrown =
      assertThrows(
          VerifyException.class,
          () -> {
            writer.publishHost("ns1.example.tld");
            writer.commit();
          });
  assertThat(thrown).hasMessageThat().contains("SERVFAIL");
}
 
示例3
static void doAXFR(Message response) {
  System.out.println("; java dig 0.0 <> " + name + " axfr");
  if (response.isSigned()) {
    System.out.print(";; TSIG ");
    if (response.isVerified()) {
      System.out.println("ok");
    } else {
      System.out.println("failed");
    }
  }

  if (response.getRcode() != Rcode.NOERROR) {
    System.out.println(response);
    return;
  }

  for (Record record : response.getSection(Section.ANSWER)) {
    System.out.println(record);
  }

  System.out.print(";; done (");
  System.out.print(response.getHeader().getCount(Section.ANSWER));
  System.out.print(" records, ");
  System.out.print(response.getHeader().getCount(Section.ADDITIONAL));
  System.out.println(" additional)");
}
 
示例4
static void	doAXFR(Message response) throws IOException {
	System.out.println("; java dig 0.0 <> " + name + " axfr");
	if (response.isSigned()) {
		System.out.print(";; TSIG ");
		if (response.isVerified())
			System.out.println("ok");
		else
			System.out.println("failed");
	}

	if (response.getRcode() != Rcode.NOERROR) {
		System.out.println(response);
		return;
	}

	Record [] records = response.getSectionArray(Section.ANSWER);
	for (int i = 0; i < records.length; i++)
		System.out.println(records[i]);

	System.out.print(";; done (");
	System.out.print(response.getHeader().getCount(Section.ANSWER));
	System.out.print(" records, ");
	System.out.print(response.getHeader().getCount(Section.ADDITIONAL));
	System.out.println(" additional)");
}
 
示例5
@Override
protected Boolean doInBackground(String... args) {
    //main();
    if (args.length != 1) return false;
    String name = args[0];
    if ((name == null) || (name.isEmpty()))
        return false; //pointless trying to lookup nothing
    Timber.d("Resolving %s", name);
    try {
        SimpleResolver sr = new SimpleResolver(DNSSEC_SERVERS[new Random().nextInt(DNSSEC_SERVERS.length)]);
        ValidatingResolver vr = new ValidatingResolver(sr);
        vr.setTimeout(0, DNS_LOOKUP_TIMEOUT);
        vr.loadTrustAnchors(new ByteArrayInputStream(ROOT.getBytes("ASCII")));
        Record qr = Record.newRecord(Name.fromConstantString(name + "."), Type.TXT, DClass.IN);
        Message response = vr.send(Message.newQuery(qr));
        final int rcode = response.getRcode();
        if (rcode != Rcode.NOERROR) {
            Timber.i("Rcode: %s", Rcode.string(rcode));
            for (RRset set : response.getSectionRRsets(Section.ADDITIONAL)) {
                if (set.getName().equals(Name.root) && set.getType() == Type.TXT
                        && set.getDClass() == ValidatingResolver.VALIDATION_REASON_QCLASS) {
                    Timber.i("Reason:  %s", ((TXTRecord) set.first()).getStrings().get(0));
                }
            }
            return false;
        } else {
            dnssec = response.getHeader().getFlag(Flags.AD);
            for (Record record : response.getSectionArray(Section.ANSWER)) {
                if (record.getType() == Type.TXT) {
                    txts.addAll(((TXTRecord) record).getStrings());
                }
            }
        }
    } catch (IOException | IllegalArgumentException ex) {
        return false;
    }
    return true;
}
 
示例6
private void
verifyTSIG(Message query, Message response, byte [] b, TSIG tsig) {
    if (tsig == null)
        return;
    int error = tsig.verify(response, b, query.getTSIG());
    if (Options.check("verbose"))
        System.err.println("TSIG verify: " + Rcode.TSIGstring(error));
}
 
示例7
/**
 * update the the lower gui section with the Values from an AnswerScreenState
 *
 * @param state history: if true, do not update the title
 */
public void updateScreenState(final AnswerScreenState state, final boolean history) {
    Runnable guiUpdate = new Runnable() {
        @Override
        public void run() {
            if (!history) {
                setTitle("");
            }

            ((TextView) findViewById(R.id.txtStatusText)).setText(state.status);
            ((TextView) findViewById(R.id.txtServerIP)).setText(state.server);
            ((TextView) findViewById(R.id.txtQbytes)).setText("" + state.qsize);
            ((TextView) findViewById(R.id.txtAbytes)).setText("" + state.asize);
            ((EditText) findViewById(R.id.txtResult)).setText(state.answerText);
            if (state.rcode > -1) {
                ((TextView) findViewById(R.id.txtRcode)).setText(Rcode.string(state.rcode));
            } else {
                ((TextView) findViewById(R.id.txtRcode)).setText("");

            }


            ((CheckBox) findViewById(R.id.cbaAA)).setChecked(state.flag_AA);
            ((CheckBox) findViewById(R.id.cbaTC)).setChecked(state.flag_TC);
            ((CheckBox) findViewById(R.id.cbaRD)).setChecked(state.flag_RD);
            ((CheckBox) findViewById(R.id.cbaRA)).setChecked(state.flag_RA);
            ((CheckBox) findViewById(R.id.cbaAD)).setChecked(state.flag_AD);
            ((CheckBox) findViewById(R.id.cbaCD)).setChecked(state.flag_CD);
        }
    };

    runOnUiThread(guiUpdate);
}
 
示例8
@Override
protected void commitUnchecked() {
  try {
    Message response = transport.send(update);
    verify(
        response.getRcode() == Rcode.NOERROR,
        "DNS server failed domain update for '%s' rcode: %s",
        zoneName,
        Rcode.string(response.getRcode()));
  } catch (IOException e) {
    throw new RuntimeException("publishDomain failed for zone: " + zoneName, e);
  }
}
 
示例9
@Before
public void setUp() throws Exception {
  inject.setStaticField(Ofy.class, "clock", clock);

  createTld("tld");
  when(mockResolver.send(any(Update.class))).thenReturn(messageWithResponseCode(Rcode.NOERROR));

  writer = new DnsUpdateWriter(
      "tld", Duration.ZERO, Duration.ZERO, Duration.ZERO, mockResolver, clock);
}
 
示例10
@Before
public void before() throws Exception {
  simpleQuery =
      Message.newQuery(Record.newRecord(Name.fromString("example.com."), Type.A, DClass.IN));
  expectedResponse = responseMessageWithCode(simpleQuery, Rcode.NOERROR);
  when(mockFactory.createSocket(InetAddress.getByName(UPDATE_HOST), DnsMessageTransport.DNS_PORT))
      .thenReturn(mockSocket);
  resolver = new DnsMessageTransport(mockFactory, UPDATE_HOST, Duration.ZERO);
}
 
示例11
@Test
public void shouldReturnEmptyForHostNotFound() throws Exception {
  String fqdn = "thefqdn.";

  when(lookupFactory.forName(fqdn)).thenReturn(testLookup(fqdn));
  when(xbillResolver.send(any(Message.class))).thenReturn(messageWithRCode(fqdn, Rcode.NXDOMAIN));

  assertThat(resolver.resolve(fqdn).isEmpty(), is(true));
}
 
示例12
byte[] buildErrorMessage(Header header, int rcode, Record question) {
  Message response = new Message();
  response.setHeader(header);
  for (int i = 0; i < 4; i++) {
    response.removeAllRecords(i);
  }
  if (rcode == Rcode.SERVFAIL) {
    response.addRecord(question, Section.QUESTION);
  }
  header.setRcode(rcode);
  return response.toWire();
}
 
示例13
public byte[] formerrMessage(byte[] in) {
  Header header;
  try {
    header = new Header(in);
  } catch (IOException e) {
    return null;
  }
  return buildErrorMessage(header, Rcode.FORMERR, null);
}
 
示例14
boolean doAssert(Tokenizer st) throws IOException {
  String field = st.getString();
  String expected = st.getString();
  String value = null;
  boolean flag = true;
  int section;

  if (response == null) {
    print("No response has been received");
    return true;
  }
  if (field.equalsIgnoreCase("rcode")) {
    int rcode = response.getHeader().getRcode();
    if (rcode != Rcode.value(expected)) {
      value = Rcode.string(rcode);
      flag = false;
    }
  } else if (field.equalsIgnoreCase("serial")) {
    List<Record> answers = response.getSection(Section.ANSWER);
    if (answers.isEmpty() || !(answers.get(0) instanceof SOARecord)) {
      print("Invalid response (no SOA)");
    } else {
      SOARecord soa = (SOARecord) answers.get(0);
      long serial = soa.getSerial();
      if (serial != Long.parseLong(expected)) {
        value = Long.toString(serial);
        flag = false;
      }
    }
  } else if (field.equalsIgnoreCase("tsig")) {
    if (response.isSigned()) {
      if (response.isVerified()) {
        value = "ok";
      } else {
        value = "failed";
      }
    } else {
      value = "unsigned";
    }
    if (!value.equalsIgnoreCase(expected)) {
      flag = false;
    }
  } else if ((section = Section.value(field)) >= 0) {
    int count = response.getHeader().getCount(section);
    if (count != Integer.parseInt(expected)) {
      value = Integer.toString(count);
      flag = false;
    }
  } else {
    print("Invalid assertion keyword: " + field);
  }

  if (!flag) {
    print("Expected " + field + " " + expected + ", received " + value);
    while (true) {
      Tokenizer.Token token = st.get();
      if (!token.isString()) {
        break;
      }
      print(token.value);
    }
    st.unget();
  }
  return flag;
}
 
示例15
byte[] generateReply(Message query, byte[] in, Socket s) {
  Header header;
  boolean badversion;
  int maxLength;
  int flags = 0;

  header = query.getHeader();
  if (header.getFlag(Flags.QR)) {
    return null;
  }
  if (header.getRcode() != Rcode.NOERROR) {
    return errorMessage(query, Rcode.FORMERR);
  }
  if (header.getOpcode() != Opcode.QUERY) {
    return errorMessage(query, Rcode.NOTIMP);
  }

  Record queryRecord = query.getQuestion();

  TSIGRecord queryTSIG = query.getTSIG();
  TSIG tsig = null;
  if (queryTSIG != null) {
    tsig = TSIGs.get(queryTSIG.getName());
    if (tsig == null || tsig.verify(query, in, null) != Rcode.NOERROR) {
      return formerrMessage(in);
    }
  }

  OPTRecord queryOPT = query.getOPT();
  if (s != null) {
    maxLength = 65535;
  } else if (queryOPT != null) {
    maxLength = Math.max(queryOPT.getPayloadSize(), 512);
  } else {
    maxLength = 512;
  }

  if (queryOPT != null && (queryOPT.getFlags() & ExtendedFlags.DO) != 0) {
    flags = FLAG_DNSSECOK;
  }

  Message response = new Message(query.getHeader().getID());
  response.getHeader().setFlag(Flags.QR);
  if (query.getHeader().getFlag(Flags.RD)) {
    response.getHeader().setFlag(Flags.RD);
  }
  response.addRecord(queryRecord, Section.QUESTION);

  Name name = queryRecord.getName();
  int type = queryRecord.getType();
  int dclass = queryRecord.getDClass();
  if (type == Type.AXFR && s != null) {
    return doAXFR(name, query, tsig, queryTSIG, s);
  }
  if (!Type.isRR(type) && type != Type.ANY) {
    return errorMessage(query, Rcode.NOTIMP);
  }

  byte rcode = addAnswer(response, name, type, dclass, 0, flags);
  if (rcode != Rcode.NOERROR && rcode != Rcode.NXDOMAIN) {
    return errorMessage(query, rcode);
  }

  addAdditional(response, flags);

  if (queryOPT != null) {
    int optflags = (flags == FLAG_DNSSECOK) ? ExtendedFlags.DO : 0;
    OPTRecord opt = new OPTRecord((short) 4096, rcode, (byte) 0, optflags);
    response.addRecord(opt, Section.ADDITIONAL);
  }

  response.setTSIG(tsig, Rcode.NOERROR, queryTSIG);
  return response.toWire(maxLength);
}