-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathdns.rs
77 lines (73 loc) · 2.37 KB
/
dns.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
//
// Copyright 2018-2019 Tamas Blummer
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
//!
//! # Bitcoin DNS lookup
//!
//! Find initial Bitcoin node addresses by looking up trusted DNS servers
//! This should only be used if the peer has no own knowledge where to find a node of the
//! Bitcoin network
//!
//!
use bitcoin::network::constants::Network;
use log::{info, trace};
use std::net::{SocketAddr, ToSocketAddrs};
const MAIN_SEEDER: [&str; 9] = [
"seed.bitcoin.sipa.be",
"dnsseed.bluematt.me",
"dnsseed.bitcoin.dashjr.org",
"seed.bitcoinstats.com",
"seed.bitcoin.jonasschnelli.ch",
"seed.btc.petertodd.org",
"seed.bitcoin.sprovoost.nl",
"dnsseed.emzy.de",
"seed.bitcoin.wiz.biz",
];
const TEST_SEEDER: [&str; 4] = [
"testnet-seed.bitcoin.jonasschnelli.ch",
"seed.tbtc.petertodd.org",
"seed.testnet.bitcoin.sprovoost.nl",
"testnet-seed.bluematt.me",
];
pub fn dns_seed(network: Network) -> Vec<SocketAddr> {
let mut seeds = Vec::new();
if network == Network::Bitcoin {
info!("reaching out for DNS seed...");
for seedhost in MAIN_SEEDER.iter() {
if let Ok(lookup) = (*seedhost, 8333).to_socket_addrs() {
for host in lookup {
seeds.push(host);
}
} else {
trace!("{} did not answer", seedhost);
}
}
info!("received {} DNS seeds", seeds.len());
}
if network == Network::Testnet {
info!("reaching out for DNS seed...");
for seedhost in TEST_SEEDER.iter() {
if let Ok(lookup) = (*seedhost, 18333).to_socket_addrs() {
for host in lookup {
seeds.push(host);
}
} else {
trace!("{} did not answer", seedhost);
}
}
info!("received {} DNS seeds", seeds.len());
}
seeds
}