选择题:下面是一个简单的使用RAWSOCKET实现的ping程序,填入(n)处。 /*simple ping program*/ struct sock

  • 题目分类:软考初级
  • 题目类型:选择题
  • 查看权限:VIP
题目内容:
下面是一个简单的使用RAWSOCKET实现的ping程序,填入(n)处。

/*simple ping program*/

struct sockaddr_in saddr;

int rawsock;

unsigned short in_cksum(unsigned short*addr, int len)

{ int sum=0;

unsigned short res=0;

while(1en>1){

sum+=*addr++; len-=2;

}

if(len=1){

*((unsigned char *)(&res))=*((unsigned char *)addr); sum+=res;

}

sum=(sum>>16)+(sam & 0xffff);

sum+=(sum>>16); res=~sum;

return res;

}

void ping(int signo)

{

int len;

int i;

static unsigned short seq=0;

char buff[8192];

struct timeval tv;

struet icmp*icmph=(struct icmp * )buff;

long*data=(long*)icmph→icmp_data;

bzero(buff, 8192);

gettimeofday(&tv, NULL);

icmph→icmp_type=ICMP_ECHO;

icmph→icmp_code=0;

icmph→icmp_cksum=0;

icmph→icmp_id=0;

icmph→icmp_seq=0;

icmph→icmp_id=getpid()&0xffff;

icmph→icmp_seq=seq++;

data[0]=tv.tv_sec;

data[1]=tv.tv_usec;

for(i=8; i< ; i++)

icmph→icmp_data[i]=(unsigned char)i;

icmph→icmp_cksum=in_cksum((unsigned short *)buff, ? 72);

len; sendto(rawsock, buff, 72, 0, &saddr, sizeof(saddr));

alarm(1);

}

void sigint(int signo)

{ printf("CATCH SIGINT !!! \n");

close(rawsock);

exit(0);

}

void dumppkt(char*buf, int len)

{ struct ip*iph=(struct ip*)buf;

int i=iph→ip_h1*4;

struct icmp*icmph=(struct icmp*)&buf[i];

long*data=(long*)iemph→icmp_data;

struct timeval tv;

gettimeofday(&tv, NULL);

if(icmph→icmp_type! =ICMP_ECHOREPLY)

return;

if(icmph→icmp_id! =(getpid()&0xffff))

return;

printf("From %s:ttl=% d seq=% d time=%.2f ms\n",

inet_ntoa(iph→ip_src),iph→ip_ttl?,

icmph→icmp_seq,

(tv.tv_see-data[0])*1000.0+(tv.tv_usec-data[0])/1000.0);

}

int main(int argc, char*argv[])

{ int len;

stuct timeval now;

char recvbuff[8192];

if(1){

printf("%s aaa.bbb.ccc.ddd\n", argv[0]);

exit(1);

}

rawsock=soeket(AF_INET, (2), IPPROTO_ICMP);

if(rawsock<0) {

perror("soeket");

exit(1);

}

bzero ( &saddr, sizeof(saddr));

saddr.sin_family=(3);

if( inet_aton( argv[1], &saddr.sin_addr) <0) {

printf("invalid IP address: %s\n", argv[1]);

exit(1);

}

signal(SICALRM, ping);

signal(SICINT, sigint);

alarm(1);

while (1){

len=read (4), recvbuff, 8192);

if( len<0 && errno=EINTR)

continue;

else it( len<0)

perror("read");

else if( len>0)

dumppkt(recvbuff, len);

}

close (5);

exit(0);

}




参考答案:

请简要说出网关服务器与短消息服务过程。

请简要说出网关服务器与短消息服务过程。

查看答案

阅读以下有关网络设计的叙述,分析网络结构,回答下面问题。 某公司从20世纪70年代中期开始使用PC机

阅读以下有关网络设计的叙述,分析网络结构,回答下面问题。 某公司从20世纪70年代中期开始使用PC机

查看答案

●试题三 IPv6使用16字节地址。如果每皮秒分配一个含有100万个地址的地址块,那么该16字节地址可持

●试题三 IPv6使用16字节地址。如果每皮秒分配一个含有100万个地址的地址块,那么该16字节地址可持

查看答案

● 下面关于信元(Cell Switch )交换的描述 中,不正确 的是 (20) 。 (20 )A. 信元 的大小为固定长

● 下面关于信元(Cell Switch )交换的描述 中,不正确 的是 (20) 。 (20 )A. 信元 的大小为固定长

查看答案

●试题四 阅读下列HTML文本和说明,在该HTML文本中存在5处错误,请指出错误所在的行号、错误原因以

●试题四 阅读下列HTML文本和说明,在该HTML文本中存在5处错误,请指出错误所在的行号、错误原因以

查看答案