下面是一个简单的使用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);
}
第1题
A.在新组建的网络中很少使用简单网络管理协议(SNMP)
B.简单网络管理协议(SNMP)是一个TCP/IP标准
C.简单网络管理协议(SNMP)使用一个被称为管理信息库(MIB.的概念
D.简单网络管理协议(SNMP)对于有大量业务的网络是一个最佳选择
第2题
A.是一个简单的网络管理协议,功能有限
B.SNMP用到的端口号是161、162两个知名的端口号
C.它是一个应用层协议,在传输层使用TCP协议
D.它是一个应用层协议,在传输层使用UDP协议
第3题
A.图中“查看结果”按钮是一个表单元素
B.图中该表单只能使用单项按钮
C.图中“投票”按钮不是一个表单元素
D.表单元素必须使用3个以上
第4题
A.是一个简单的网络管理协议,功能有限
B.SNMP用到端口号161、162两个知名端口
C.它是一个应用层协议,在传输层使用TCP协议
D.它是一个应用层协议,在传输层使用UDP协议
第5题
程序的三种基本控制结构的共同特点是______。
A.不能嵌套使用
B.只能用来写简单程序
C.已经用硬件实现
D.只有一个入口和一个出口
第6题
程序的三种基本控制结构的共同特点是 ______。
A.不能嵌套使用
B.只能用来写简单程序
C.已经用硬件实现
D.只有一个入口和一个出口
第10题
关于Visual FoxPro 6.0的变量,下面说法中正确的是( )。
A.使用一个简单变量之前要先声明或定义
B.数组中各数组元素的数据类型可以不同
C.定义数组以后,系统为数组的每个数组元素赋以数值0
D.数组元素的下标下限是0
为了保护您的账号安全,请在“上学吧”公众号进行验证,点击“官网服务”-“账号验证”后输入验证码“”完成验证,验证成功后方可继续查看答案!