Permalink
Browse files

help text

  • Loading branch information...
1 parent c00ca46 commit 0195702cc6c7b1019da0d21dfa02eec60dcd51a5 @sipa committed Jan 1, 2012
Showing with 71 additions and 0 deletions.
  1. +47 −0 README
  2. +24 −0 main.cpp
View
47 README
@@ -0,0 +1,47 @@
+bitcoin-seeder
+==============
+
+Bitcoin-seeder is a crawler for the Bitcoin network, which exposes a list
+of reliable nodes via a built-in DNS server.
+
+Features:
+* regularly revisits known nodes to check their availability
+* bans nodes after enough failures, or bad behaviour
+* accepts nodes down to v0.3.19 to request new IP addresses from,
+ but only reports good post-v0.3.24 nodes.
+* keeps statistics over (exponential) windows of 2 hours, 8 hours,
+ 1 day and 1 week, to base decisions on.
+* very low memory (a few tens of megabytes) and cpu requirements.
+* crawlers run in parallel (by default 24 threads simultaneously).
+
+USAGE
+-----
+
+Assuming you want to run a dns seed on dnsseed.example.com, you will
+need an authorative NS record in example.com's domain record, pointing
+to for example vps.example.com:
+
+$ dig -t NS dnsseed.example.com
+
+;; ANSWER SECTION
+dnsseed.example.com. 86400 IN NS vps.example.com.
+
+On the system vps.example.com, you can now run dnsseed:
+
+./dnsseed -h dnsseed.example.com -n vps.example.com
+
+If you want the DNS server to report SOA records, please provide an
+e-mailadres (with the @ part replaced by .) using -m.
+
+RUNNING AS NON-ROOT
+-------------------
+
+Typically, you'll need root privileges to listen to port 53 (name service).
+
+One solution is using an iptables rule (Linux only) to redirect it to
+a non-privileged port:
+
+$ iptables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-port 5353
+
+If properly configured, this will allow you to run dnsseed in userspace, using
+the -p 5353 option.
View
@@ -21,13 +21,27 @@ class CDnsSeedOpts {
CDnsSeedOpts() : nThreads(24), nPort(53), mbox(NULL), ns(NULL), host(NULL) {}
void ParseCommandLine(int argc, char **argv) {
+ static const char *help = "Bitcoin-seeder\n"
+ "Usage: %s -h <host> -n <ns> [-m <mbox>] [-t <threads>] [-p <port>]\n"
+ "\n"
+ "Options:\n"
+ "-h <host> Hostname of the DNS seed\n"
+ "-n <ns> Hostname of the nameserver\n"
+ "-m <mbox> E-Mail address reported in SOA records\n"
+ "-t <threads> Number of crawlers to run in parallel (default 24)\n"
+ "-p <port> UDP port to listen on (default 53)\n"
+ "-?, --help Show this text\n"
+ "\n";
+ bool showHelp = false;
+
while(1) {
static struct option long_options[] = {
{"host", required_argument, 0, 'h'},
{"ns", required_argument, 0, 'n'},
{"mbox", required_argument, 0, 'm'},
{"threads", required_argument, 0, 't'},
{"port", required_argument, 0, 'p'},
+ {"help", no_argument, 0, 'h'},
{0, 0, 0, 0}
};
int option_index = 0;
@@ -52,14 +66,23 @@ class CDnsSeedOpts {
case 't': {
int n = strtol(optarg, NULL, 10);
if (n > 0 && n < 1000) nThreads = n;
+ break;
}
case 'p': {
int p = strtol(optarg, NULL, 10);
if (p > 0 && p < 65536) nPort = p;
+ break;
+ }
+
+ case '?': {
+ showHelp = true;
+ break;
}
}
}
+ if (host == NULL || ns == NULL) showHelp = true;
+ if (showHelp) fprintf(stderr, help, argv[0]);
}
};
@@ -175,6 +198,7 @@ int main(int argc, char **argv) {
}
if (!opts.host) {
fprintf(stderr, "No hostname set. Please use -h.\n");
+ exit(1);
}
FILE *f = fopen("dnsseed.dat","r");
if (f) {

0 comments on commit 0195702

Please sign in to comment.