首页 | 登录 | 注册 | 会员中心 | 网站地图
  当前位置:首页 >> 资料 >> 白皮书 >> 网络 >> Ping的原代码 网络安全者必看
Ping的原代码 网络安全者必看
来源: 作者: 发布时间:2008-04-22

  ((IcmpHeader*)icmp_data)->i_cksum = 0;
  ((IcmpHeader*)icmp_data)->timestamp = GetTickCount();
  
  ((IcmpHeader*)icmp_data)->i_seq = seq_no++;
  ((IcmpHeader*)icmp_data)->i_cksum = checksum((USHORT*)icmp_data,
  datasize);
  
  bwrote = sendto(sockRaw,icmp_data,datasize,0,(struct sockaddr*)&dest,
  sizeof(dest));
  if (bwrote == SOCKET_ERROR){
  if (WSAGetLastError() == WSAETIMEDOUT) {
  printf("timed outn");
  continue;
  }
  fprintf(stderr,"sendto failed: %dn",WSAGetLastError());
  ExitProcess(STATUS_FAILED);
  }
  if (bwrote < datasize ) {
  fprintf(stdout,"Wrote %d bytesn",bwrote);
  }
  bread = recvfrom(sockRaw,recvbuf,MAX_PACKET,0,(struct sockaddr*)&from,
  &fromlen);
  if (bread == SOCKET_ERROR){
  if (WSAGetLastError() == WSAETIMEDOUT) {
  printf("timed outn");
  continue;
  }
  fprintf(stderr,"recvfrom failed: %dn",WSAGetLastError());
  ExitProcess(STATUS_FAILED);
  }
  decode_resp(recvbuf,bread,&from);
  Sleep(1000);
  
  }
  return 0;
  
  }
  /*
  The response is an IP packet. We must decode the IP header to locate
  the ICMP data
  */
  void decode_resp(char *buf, int bytes,struct sockaddr_in *from) {
  
  IpHeader *iphdr;
  IcmpHeader *icmphdr;
  unsigned short iphdrlen;
  
  iphdr = (IpHeader *)buf;
  
  iphdrlen = iphdr->h_len * 4 ; // number of 32-bit words *4 = bytes
  
  if (bytes < iphdrlen + ICMP_MIN) {
  printf("Too few bytes from %sn",inet_ntoa(from->sin_addr));
  }
  
  icmphdr = (IcmpHeader*)(buf + iphdrlen);
  
  if (icmphdr->i_type != ICMP_ECHOREPLY) {
  fprintf(stderr,"non-echo type %d recvdn",icmphdr->i_type);
  return;
  }
  if (icmphdr->i_id != (USHORT)GetCurrentProcessId()) {
  fprintf(stderr,"someone else's packet!n");
  return ;
  }
  printf("%d bytes from %s:",bytes, inet_ntoa(from->sin_addr));
  printf(" icmp_seq = %d. ",icmphdr->i_seq);
  printf(" time: %d ms ",GetTickCount()-icmphdr->timestamp);
  printf("n");
  
  }
  
(责任编辑:天空)
网友评论
评论加载中…
快速检索
推荐专题
网吧常见故障排除
Linux中文环境
漏洞扫描全搜索
Solaris 基础知识入门
友情链接 | 欢迎投稿 | 杂志发行 | 广告报价 | 人才招聘 | 服务条款 | 免责声明 | 隐私保护 | 关于网管员世界
CopyRight © 2001-2008 [网管员世界 www.365master.com] All Rights Reserved.
《网管员世界》杂志,专为网管服务的刊物!