Merge #84: Add --address, bind to specific address
bf40486011
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: ACKbf40486011
Tree-SHA512: 1924533a31f4e1b1149e1863454c28b5860eea6bd90e4d54fea761b608ad47ad8e15e6e2a745c91717658466cdd6c2cdc221f2587968f94c798d09774e4ddca0
This commit is contained in:
commit
c52f3dbcc8
3 changed files with 20 additions and 3 deletions
2
dns.cpp
2
dns.cpp
|
@ -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;
|
||||
}
|
||||
|
|
1
dns.h
1
dns.h
|
@ -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);
|
||||
|
|
20
main.cpp
20
main.cpp
|
@ -28,11 +28,12 @@ public:
|
|||
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"
|
||||
|
@ -44,6 +45,7 @@ public:
|
|||
"-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"
|
||||
|
@ -63,6 +65,7 @@ public:
|
|||
{"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'},
|
||||
|
@ -75,7 +78,7 @@ public:
|
|||
{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': {
|
||||
|
@ -105,6 +108,18 @@ public:
|
|||
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;
|
||||
|
@ -261,6 +276,7 @@ public:
|
|||
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;
|
||||
|
|
Loading…
Reference in a new issue