DNS 服务器压力测试程序(2)
2009-05-13 04:24:13来源:未知 阅读 ()
void
gen_dns_data(char *name)
{
char b[512];
int n = 0;
char *p, *q = b;
const char *sep = ".";
char *brkt;
memcpy(dns, dns1, sizeof(dns1));
for ((p = strtok_r(name, sep, &brkt)); p; (p = strtok_r(NULL, sep, &brkt))) {
*q++ = strlen(p);
n = sprintf(q, "%s", p);
q+= n;
*q = 0;
}
n = strlen(b) + 1;
memcpy(dns + sizeof(dns1), b, n);
memcpy(dns + sizeof(dns1) + n, dns2, sizeof(dns2));
dns_len = sizeof(dns1) + n + sizeof(dns2);
}
/* check sum */
unsigned short
ip_sum (char *addr, int len)
{
register u_short nleft = len;
register u_short *w;
register int sum = 0;
w = (u_short *)addr;
while (nleft > 1) {
sum += *w++;
nleft -= 2;
}
if (nleft == 1)
sum += (*(u_char *)w & 0xff);
sum = (sum >> 16) + (sum & 0xffff);
sum += (sum >> 16);
return (~sum & 0xffff);
}
unsigned long
getaddr(char *name)
{
struct hostent *h;
h = gethostbyname(name);
if (!h) {
printf("Unknown host %s\n", name);
exit(-1);
}
return *(unsigned long *)h->h_addr;
}
void
send_dns(unsigned long lip, unsigned long rip, unsigned short port)
{
struct iphdr ih;
struct udphdr uh;
struct sockaddr_in sin;
char buf[512];
ih.ver = 4;
ih.ihl = 5;
ih.tos = 0;
ih.len = sizeof(ih) + sizeof(uh) + dns_len;
ih.id = port;
ih.frag = 0;
ih.ttl = 64;
ih.proto = 17;
ih.sum = 0;
ih.sip = lip;
ih.dip = rip;
uh.sport = htons(port);
uh.dport = 0x3500;
uh.len = htons(sizeof(uh) + dns_len);
uh.sum = 0;
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有