senddnsquery-raw.c

来自「unix网络编程第一卷socket编程书上的全部源代码」· C语言 代码 · 共 44 行

C
44
字号
#include	"udpcksum.h"/* * Build a DNS A query for "a.root-servers.net" and write it to * the raw socket. *//* include send_dns_query */voidsend_dns_query(void){	size_t		nbytes;	char		*buf, *ptr;	buf = Malloc(sizeof(struct udpiphdr) + 100);	ptr = buf + sizeof(struct udpiphdr);/* leave room for IP/UDP headers */	*((uint16_t *) ptr) = htons(1234);	/* identification */	ptr += 2;	*((uint16_t *) ptr) = htons(0x0100);	/* flags: recursion desired */	ptr += 2;	*((uint16_t *) ptr) = htons(1);		/* # questions */	ptr += 2;	*((uint16_t *) ptr) = 0;			/* # answer RRs */	ptr += 2;	*((uint16_t *) ptr) = 0;			/* # authority RRs */	ptr += 2;	*((uint16_t *) ptr) = 0;			/* # additional RRs */	ptr += 2;	memcpy(ptr, "\001a\014root-servers\003net\000", 20);	ptr += 20;	*((uint16_t *) ptr) = htons(1);		/* query type = A */	ptr += 2;	*((uint16_t *) ptr) = htons(1);		/* query class = 1 (IP addr) */	ptr += 2;	nbytes = (ptr - buf) - sizeof(struct udpiphdr);	udp_write(buf, nbytes);	if (verbose)		printf("sent: %d bytes of data\n", nbytes);}/* end send_dns_query */

⌨️ 快捷键说明

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