dnscat 0.1.1

DNSCAT2 protocol
Documentation
#[cfg(feature = "client")]
mod client;
mod endpoint;
mod name;
#[cfg(feature = "trust-dns-resolver")]
mod resolver;

#[cfg(feature = "client")]
pub use self::client::*;
pub use self::endpoint::*;
pub use self::name::*;

use failure::Fail;
use trust_dns_proto::error::ProtoError;

pub use trust_dns_proto::rr::{Name, RecordType};

#[cfg(feature = "trust-dns-resolver")]
pub use self::resolver::get_system_dns_server;

use crate::transport::DatagramError;

#[derive(Debug, Fail)]
pub enum DnsTransportError<D: Fail> {
    #[fail(display = "DNS protocol error: {}", _0)]
    Proto(ProtoError),
    #[fail(display = "Datagram error: {}", _0)]
    Datagram(DatagramError<D>),
    #[fail(display = "DNS endpoint error: {}", _0)]
    Endpoint(DnsEndpointError),
    #[fail(display = "No answers were returned")]
    NoAnswers,
    #[fail(display = "No data was returned")]
    NoData,
}

impl<D: Fail> From<ProtoError> for DnsTransportError<D> {
    fn from(err: ProtoError) -> Self {
        Self::Proto(err)
    }
}

impl<D: Fail> From<DatagramError<D>> for DnsTransportError<D> {
    fn from(err: DatagramError<D>) -> Self {
        Self::Datagram(err)
    }
}

impl<D: Fail> From<DnsEndpointError> for DnsTransportError<D> {
    fn from(err: DnsEndpointError) -> Self {
        Self::Endpoint(err)
    }
}