Crate mdns [] [src]

Multicast DNS library with built-in networking.

This crate can be used to discover mDNS devices that are listening on a network.

Basic usage

This example finds all Chromecast devices on the same LAN as the executing computer.

Once the devices are discovered, they respond with standard DNS records, with a few minor low-level protocol differences.

The only Chromecast-specific piece of code here is the SERVICE_NAME. In order to discover other types of devices, simply change the service name to the one your device uses.

This example obtains the IP addresses of the cast devices by looking up A/AAAA records.

extern crate mdns;

use mdns::{Record, RecordKind};
use std::net::IpAddr;

/// The hostname of the devices we are searching for.
/// Every Chromecast will respond to the service name in this example.
const SERVICE_NAME: &'static str = "_googlecast._tcp.local";

fn main() {
    // Iterate through responses from each Cast device.
    for response in mdns::discover::all(SERVICE_NAME).unwrap() {
        let response = response.unwrap();

        let addr = response.records()
                           .filter_map(self::to_ip_addr)
                           .next();

        if let Some(addr) = addr {
            println!("found cast device at {}", addr);
        } else {
            println!("cast device does not advertise address");
        }
    }
}

fn to_ip_addr(record: &Record) -> Option<IpAddr> {
    match record.kind {
        RecordKind::A(addr) => Some(addr.into()),
        RecordKind::AAAA(addr) => Some(addr.into()),
        _ => None,
    }
}

Modules

discover

Utilities for discovering devices on the LAN.

Structs

Error

The Error type.

Record

Any type of DNS record.

Response

A DNS response.

Enums

ErrorKind

The kind of an error.

RecordKind

A specific DNS record variant.

Traits

ResultExt

Additional methods for Result, for easy interaction with this crate.