Skip to content

Commit

Permalink
Merge #84: Add --address, bind to specific address
Browse files Browse the repository at this point in the history
bf40486 Add --address, bind to specific address (uhliksk)

Pull request description:

  - Fix #83 (will reply from same address as provided)
  - Fix #59 (will work if you bind to specific IPv4 address)
  - Fix #51 (will work with systemd-resolved service if you bind to specific address)

ACKs for top commit:
  sipa:
    ACK bf40486

Tree-SHA512: 1924533a31f4e1b1149e1863454c28b5860eea6bd90e4d54fea761b608ad47ad8e15e6e2a745c91717658466cdd6c2cdc221f2587968f94c798d09774e4ddca0
  • Loading branch information
sipa committed Dec 17, 2020
2 parents c80dfca + bf40486 commit c52f3db
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 3 deletions.
2 changes: 1 addition & 1 deletion dns.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -425,7 +425,7 @@ int dnsserver(dns_opt_t *opt) {
memset((char *) &si_me, 0, sizeof(si_me));
si_me.sin6_family = AF_INET6;
si_me.sin6_port = htons(opt->port);
si_me.sin6_addr = in6addr_any;
inet_pton(AF_INET6, opt->addr, &si_me.sin6_addr);
if (bind(listenSocket, (struct sockaddr*)&si_me, sizeof(si_me))==-1)
return -2;
}
Expand Down
1 change: 1 addition & 0 deletions dns.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ struct dns_opt_t {
int datattl;
int nsttl;
const char *host;
const char *addr;
const char *ns;
const char *mbox;
int (*cb)(void *opt, char *requested_hostname, addr_t *addr, int max, int ipv4, int ipv6);
Expand Down
20 changes: 18 additions & 2 deletions main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,12 @@ class CDnsSeedOpts {
const char *ns;
const char *host;
const char *tor;
const char *ip_addr;
const char *ipv4_proxy;
const char *ipv6_proxy;
std::set<uint64_t> filter_whitelist;

CDnsSeedOpts() : nThreads(96), nDnsThreads(4), nPort(53), mbox(NULL), ns(NULL), host(NULL), tor(NULL), fUseTestNet(false), fWipeBan(false), fWipeIgnore(false), ipv4_proxy(NULL), ipv6_proxy(NULL) {}
CDnsSeedOpts() : nThreads(96), nDnsThreads(4), ip_addr("::"), nPort(53), mbox(NULL), ns(NULL), host(NULL), tor(NULL), fUseTestNet(false), fWipeBan(false), fWipeIgnore(false), ipv4_proxy(NULL), ipv6_proxy(NULL) {}

void ParseCommandLine(int argc, char **argv) {
static const char *help = "Bitcoin-seeder\n"
Expand All @@ -44,6 +45,7 @@ class CDnsSeedOpts {
"-m <mbox> E-Mail address reported in SOA records\n"
"-t <threads> Number of crawlers to run in parallel (default 96)\n"
"-d <threads> Number of DNS server threads (default 4)\n"
"-a <address> Address to listen on (default ::)\n"
"-p <port> UDP port to listen on (default 53)\n"
"-o <ip:port> Tor proxy IP/Port\n"
"-i <ip:port> IPV4 SOCKS5 proxy IP/Port\n"
Expand All @@ -63,6 +65,7 @@ class CDnsSeedOpts {
{"mbox", required_argument, 0, 'm'},
{"threads", required_argument, 0, 't'},
{"dnsthreads", required_argument, 0, 'd'},
{"address", required_argument, 0, 'a'},
{"port", required_argument, 0, 'p'},
{"onion", required_argument, 0, 'o'},
{"proxyipv4", required_argument, 0, 'i'},
Expand All @@ -75,7 +78,7 @@ class CDnsSeedOpts {
{0, 0, 0, 0}
};
int option_index = 0;
int c = getopt_long(argc, argv, "h:n:m:t:p:d:o:i:k:w:", long_options, &option_index);
int c = getopt_long(argc, argv, "h:n:m:t:a:p:d:o:i:k:w:", long_options, &option_index);
if (c == -1) break;
switch (c) {
case 'h': {
Expand Down Expand Up @@ -105,6 +108,18 @@ class CDnsSeedOpts {
break;
}

case 'a': {
if (strchr(optarg, ':')==NULL) {
char* ip4_addr = (char*) malloc(strlen(optarg)+8);
strcpy(ip4_addr, "::FFFF:");
strcat(ip4_addr, optarg);
ip_addr = ip4_addr;
} else {
ip_addr = optarg;
}
break;
}

case 'p': {
int p = strtol(optarg, NULL, 10);
if (p > 0 && p < 65536) nPort = p;
Expand Down Expand Up @@ -261,6 +276,7 @@ class CDnsThread {
dns_opt.datattl = 3600;
dns_opt.nsttl = 40000;
dns_opt.cb = GetIPList;
dns_opt.addr = opts->ip_addr;
dns_opt.port = opts->nPort;
dns_opt.nRequests = 0;
dbQueries = 0;
Expand Down

0 comments on commit c52f3db

Please sign in to comment.