📄 named_stats
字号:
#!/afs/net/tools/@sys/perl## named_stats --- collect statistics for the MIT nameservers.## This program connects to a pre-arranged port on four hosts and dumps the # name daemon statistics in a nice tabular form. This program has been# written for MIT. You will need to change things to make them work for# your site.## Written by Theodore Ts'o, Copyright 1991. ## Use this code however you want, as long as you don't try to make# money off of it and as long as you don't claim it's yours.### Change this to be whatever port number you assign in /etc/services#$default_nstats_port = XXXXX;## Change this to be the list of hosts that you're interested in.#@hosts = ("bitsy.mit.edu", "strawb.mit.edu", "w20ns.mit.edu", "lithium.lcs.mit.edu");@querytypes = ("A", "NS", "MD", "MF", "CNAME", "SOA", "MB", "MG", "MR", "NULL", "WKS", "PTR", "HINFO", "MINFO", "MX", "TXT", "UINFO", "UID", "GID", "UNSPEC", "UNSPECA", "AXFR", "MAILB", "MAILA", "ANY");$boottime = "time since boot (secs)";($name, $aliases, $nstats_port) = getservbyname("nstats", 'tcp');if (!$nstats_port) { $nstats_port = $default_nstats_port;}grep(s/$/ queries/, @querytypes);foreach $query (@querytypes) { $added{$query} = 1;}foreach $host (@hosts) { ($hostname = $host) =~ s/\..*//; push(@hostnames, $hostname); ($name, $aliases, $type, $len, $thisaddr) = gethostbyname($host); $port = $nstats_port; &mkport($thisaddr,$port); $dateline = <SERVER>; $dateline =~ s/###//; printf("%8-s:%s", $hostname,$dateline); while (<SERVER>) { chop; ($num, $var) = /([0-9]+)\s+(.*)/; $data{$hostname, $var} = $num; $total{$var} += $num; $seen{$var} = 1; if (!$added{$var}) { $added{$var} = 1; push(@varnames, $var); } }}print "\n";printf("%25-s", "");foreach $host (@hostnames) { printf("%10s", $host);}printf("%10s", "TOTAL");print "\n";foreach $var (@varnames,@querytypes) { if ((!$seen{$var}) || ($total{$var} == 0)) { next; } printf("%25-s", $var); foreach $host (@hostnames) { $num = $data{$host, $var}; printf("%10d", $num); } # # Totals don't make sense for some stats # if ($var =~ /^time since/) { print "\n"; next; } printf("%10s", $total{$var}); print "\n";}## End of main program, subroutines begin here#sub mkport { $port = $_[1]; $saddr = $_[0];# print "$saddr,$port\n"; $sockaddr = 'S n a4 x8'; $sin = pack($sockaddr, 2, $port, $saddr); socket(SERVER, 2, 1, 0) || ((print "socket:$!\n"), return $FAIL);# setsockopt(SERVER,&SOL_SOCKET,&SO_KEEPALIVE,1)# || (print "Server setsockopt failed\n"); connect(SERVER, $sin) || ((print "connect:$!\n"), return $FAIL); $sockname = getsockname(SERVER) || ((print "getsockname:$!\n"), return $FAIL); ($family, $port, $addr) = unpack($sockaddr, $sockname); @addr = unpack("CCCC", $addr);# select(SERVER); $| = 1; select(STDOUT); $| = 1; $connecting = 1;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -