Struct arti_client::TorAddr
source · [−]pub struct TorAddr { /* private fields */ }
Expand description
An address object that you can connect to over the Tor network.
When you’re making a connection with Tor, you shouldn’t do your DNS lookups locally: that would leak your target address to your DNS server. Instead, it’s better to use a combination of a hostname and a port directly.
The preferred way to create a TorAddr
is via the IntoTorAddr
trait,
using a hostname and a port (or a string containing a hostname and a
port). It’s also okay to use an IP and Port there, but only if they come
from some source other than a local DNS lookup.
In order to discourage local hostname lookups, the functions that
construct a TorAddr
from IpAddr
, SocketAddr
, and so
forth are labeled as “dangerous”.
Examples
Making a TorAddr
from various “safe” sources:
use arti_client::IntoTorAddr;
let example_from_tuple = ("example.com", 80).into_tor_addr()?;
let example_from_string = "example.com:80".into_tor_addr()?;
assert_eq!(example_from_tuple, example_from_string);
Making a TorAddr
from an IP address and port:
Warning: This example is only safe because we’re not doing a DNS lookup; rather, the intent is to connect to a hardcoded IP address. If you’re using
DangerouslyIntoTorAddr
, pay careful attention to where your IP addresses are coming from, and whether there’s a risk of information leakage.
use arti_client::DangerouslyIntoTorAddr;
use std::net::{IpAddr, SocketAddr};
let quad_one_dns: SocketAddr = "1.1.1.1:53".parse()?;
let addr_from_socketaddr = quad_one_dns.into_tor_addr_dangerously()?;
let quad_one_ip: IpAddr = "1.1.1.1".parse()?;
let addr_from_tuple = (quad_one_ip, 53).into_tor_addr_dangerously()?;
assert_eq!(addr_from_socketaddr, addr_from_tuple);
Implementations
sourceimpl TorAddr
impl TorAddr
sourcepub fn from<A: IntoTorAddr>(addr: A) -> Result<Self, TorAddrError>
pub fn from<A: IntoTorAddr>(addr: A) -> Result<Self, TorAddrError>
Construct a TorAddr
from any object that implements
IntoTorAddr
.
sourcepub fn dangerously_from<A: DangerouslyIntoTorAddr>(
addr: A
) -> Result<Self, TorAddrError>
pub fn dangerously_from<A: DangerouslyIntoTorAddr>(
addr: A
) -> Result<Self, TorAddrError>
Construct a TorAddr
from any object that implements
DangerouslyIntoTorAddr
.
See DangerouslyIntoTorAddr
for an explanation of why the
style of programming supported by this function is dangerous
to use.
sourcepub fn is_ip_address(&self) -> bool
pub fn is_ip_address(&self) -> bool
Return true if this is an IP address (rather than a hostname).
Trait Implementations
sourceimpl FromStr for TorAddr
impl FromStr for TorAddr
type Err = TorAddrError
type Err = TorAddrError
The associated error which can be returned from parsing.
sourceimpl IntoTorAddr for TorAddr
impl IntoTorAddr for TorAddr
sourcefn into_tor_addr(self) -> Result<TorAddr, TorAddrError>
fn into_tor_addr(self) -> Result<TorAddr, TorAddrError>
impl Eq for TorAddr
impl StructuralEq for TorAddr
impl StructuralPartialEq for TorAddr
Auto Trait Implementations
impl RefUnwindSafe for TorAddr
impl Send for TorAddr
impl Sync for TorAddr
impl Unpin for TorAddr
impl UnwindSafe for TorAddr
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<T> Downcast for T where
T: Any,
impl<T> Downcast for T where
T: Any,
sourcefn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
Convert Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
. Read more
sourcefn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
Convert Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
. Read more
sourcefn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Convert &Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s. Read more
sourcefn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert &mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s. Read more
sourceimpl<T> DowncastSync for T where
T: Any + Send + Sync,
impl<T> DowncastSync for T where
T: Any + Send + Sync,
sourceimpl<T> Instrument for T
impl<T> Instrument for T
sourcefn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
sourcefn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
sourceimpl<T> ToOwned for T where
T: Clone,
impl<T> ToOwned for T where
T: Clone,
type Owned = T
type Owned = T
The resulting type after obtaining ownership.
sourcefn clone_into(&self, target: &mut T)
fn clone_into(&self, target: &mut T)
toowned_clone_into
)Uses borrowed data to replace owned data, usually by cloning. Read more
sourceimpl<T> WithSubscriber for T
impl<T> WithSubscriber for T
sourcefn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> where
S: Into<Dispatch>,
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> where
S: Into<Dispatch>,
Attaches the provided Subscriber
to this type, returning a
WithDispatch
wrapper. Read more
sourcefn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
Attaches the current default Subscriber
to this type, returning a
WithDispatch
wrapper. Read more