⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dnsquery.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include <u.h>#include <libc.h>#include <bio.h>#include <ctype.h>#include <ndb.h>#include "dns.h"#include "ip.h"voidmain(int argc, char *argv[]){	int fd, n, len, domount;	Biobuf in;	char line[1024], *lp, *p, *np, *mtpt, *srv, *dns;	char buf[1024];	dns = "/net/dns";	mtpt = "/net";	srv = "/srv/dns";	domount = 1;	ARGBEGIN {	case 'x':		dns = "/net.alt/dns";		mtpt = "/net.alt";		srv = "/srv/dns_net.alt";		break;	default:		fprint(2, "usage: %s -x [dns-mount-point]\n", argv0);		exits("usage");	} ARGEND;	if(argc == 1){		domount = 0;		mtpt = argv[0];	}	fd = open(dns, ORDWR);	if(fd < 0){		if(domount == 0){			fprint(2, "can't open %s: %r\n", mtpt);			exits(0);		}		fd = open(srv, ORDWR);		if(fd < 0){			print("can't open %s: %r\n", srv);			exits(0);		}		if(mount(fd, -1, mtpt, MBEFORE, "") < 0){			print("can't mount(%s, %s): %r\n", srv, mtpt);			exits(0);		}		fd = open(mtpt, ORDWR);		if(fd < 0){			print("can't open %s: %r\n", mtpt);			exits(0);		}	}	Binit(&in, 0, OREAD);	for(print("> "); lp = Brdline(&in, '\n'); print("> ")){		n = Blinelen(&in) -1;		while(isspace(lp[n]))			lp[n--] = 0;		n++;		while(isspace(*lp)){			lp++;			n--;		}		if(!*lp)			continue;		strcpy(line, lp);		/* default to an "ip" request if alpha, "ptr" if numeric */		if(strchr(line, ' ')==0) {			if(strcmp(ipattr(line), "ip") == 0) {				strcat(line, " ptr");				n += 4;			} else {				strcat(line, " ip");				n += 3;			}		}		/* inverse queries may need to be permuted */		if(n > 4 && strcmp("ptr", &line[n-3]) == 0		&& strstr(line, "IN-ADDR") == 0 && strstr(line, "in-addr") == 0){			for(p = line; *p; p++)				if(*p == ' '){					*p = '.';					break;				}			np = buf;			len = 0;			while(p >= line){				len++;				p--;				if(*p == '.'){					memmove(np, p+1, len);					np += len;					len = 0;				}			}			memmove(np, p+1, len);			np += len;			strcpy(np, "in-addr.arpa ptr");			strcpy(line, buf);			n = strlen(line);		}		seek(fd, 0, 0);		if(write(fd, line, n) < 0) {			print("!%r\n");			continue;		}		seek(fd, 0, 0);		while((n = read(fd, buf, sizeof(buf))) > 0){			buf[n] = 0;			print("%s\n", buf);		}	}	exits(0);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -