10 querydns(int fd, char *line, int n)
15 if(write(fd, line, n) != n) {
20 while((n = read(fd, buf, sizeof(buf)-1)) > 0){
27 * convert address into a reverse lookup address
30 mkptrname(char *ip, char *rip, int rlen)
36 if(cistrstr(ip, "in-addr.arpa") || cistrstr(ip, "ip6.arpa") || parseip(a, ip) == -1)
37 snprint(rip, rlen, "%s", ip);
39 snprint(rip, rlen, "%ud.%ud.%ud.%ud.in-addr.arpa",
40 a[15], a[14], a[13], a[12]);
44 for(i = 15; i >= 0; i--){
45 p = seprint(p, e, "%ux.", a[i]&0xf);
46 p = seprint(p, e, "%ux.", a[i]>>4);
48 seprint(p, e, "ip6.arpa");
57 char buf[1024], line[1024];
61 for(fprint(2, "> "); lp = Brdline(&in, '\n'); fprint(2, "> ")){
74 /* default to an "ip" request if alpha, "ptr" if numeric */
75 if(strchr(line, ' ') == nil)
76 if(strcmp(ipattr(line), "ip") == 0) {
84 if(n > 4 && strcmp(" ptr", &line[n-4]) == 0){
86 mkptrname(line, buf, sizeof buf);
87 n = snprint(line, sizeof line, "%s ptr", buf);
90 querydns(fd, line, n);
96 main(int argc, char *argv[])
98 char *dns = "/net/dns";
103 dns = "/net.alt/dns";
106 fprint(2, "usage: %s [-x] [/net/dns]\n", argv0);
113 fd = open(dns, ORDWR);
115 sysfatal("can't open %s: %r", dns);