Skip to content

Instantly share code, notes, and snippets.

@flazz
Created July 12, 2012 04:49
Show Gist options
  • Save flazz/3095873 to your computer and use it in GitHub Desktop.
Save flazz/3095873 to your computer and use it in GitHub Desktop.
multiple dns lookups
// go run slurp.go rubyhq.com pythonhq.com javahq.com erlanghq.com
package main
import "net"
import "fmt"
import "os"
func lookup (name string, c chan string) {
h, err := net.LookupHost(name)
var answer string
if err == nil {
answer = fmt.Sprintf("%v %v", name, h)
} else {
answer = fmt.Sprintf("%v %v", name, err)
}
c <- answer
}
func main () {
names := os.Args[1:]
c := make(chan string, len(names))
for _, name := range names {
go lookup(name, c)
}
for _ = range names {
answer := <-c
fmt.Println(answer)
}
}
// node slurp.js rubyhq.com pythonhq.com javahq.com erlanghq.com
var dns = require('dns'),
names = process.argv.slice(2);
names.forEach(function(name) {
dns.lookup(name, function(err, address) {
if (err === null) {
console.log(name + ' ' + address);
} else {
console.log(name + ' ' + err);
}
});
});
@goodfoo
Copy link

goodfoo commented Jul 17, 2012

-module(vdns).
-compile([export_all]).

validate(Server, Filename, NumWorkers) ->
  {ok, Address} = inet:getaddr(Server,inet),
  {ok, Data} = file:read_file(Filename),
  Zones = string:tokens(binary_to_list(Data),"\n"),
  Partitions = partition_into(NumWorkers, Zones),
  Pids = [spawn(vdns, worker, [self(), Address, SubPart]) || SubPart <- Partitions ],
  lists:foldl(fun(X, List) -> receive {X, Result} -> Result ++ List end end, [] , Pids).

worker(Client, Address, Zones) ->
  Client ! {self(), [Zone || Zone <- Zones, not authoritative_for(Address, Zone)]}.

authoritative_for(Address, Zone) ->
  {Response,_} =  inet_res:resolve(Zone, in, soa, [{retry,1},{nameservers, [{Address,53}]}]),
  Response == ok.

partition_into(_,[]) -> [];
partition_into(N, List) ->
  {Head,Tail} = lists:split(length(List) div N, List),
  [Head | partition_into(N-1, Tail)].

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment