#include <sys/types.h>
#include <netinet/ip.h>
#include <netdb.h>
#include<arpa/inet.h>
#include <errno.h>
#include <netinet/ip_icmp.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>
#include <signal.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <netinet/ip_icmp.h>
#include <netdb.h>
#include <setjmp.h>
#include <errno.h>
unsigned short cal_chksum(unsigned short *addr,int len)
{       int nleft=len;
        int sum=0;
        unsigned short *w=addr;
        unsigned short answer=0;
        while(nleft>1)
        {       sum+=*w++;
                nleft-=2;
        }
        if( nleft==1)
        {       *(unsigned char *)(&answer)=*(unsigned char *)w;
                sum+=answer;
        }
        sum=(sum>>16)+(sum&0xffff);
        sum+=(sum>>16);
        answer=~sum;
        return answer;
}
int main(int argc, char **argv)
{
 if(argc < 2)
{
printf("you input arg is less than two\n");
}
   struct sockaddr_in serveraddr;
   int sockfd = 0;
   if((sockfd = socket(AF_INET,SOCK_RAW,IPPROTO_ICMP)) <0 )
   {
      printf("error\n");
   }
   printf("sockfd is %d\n",sockfd);
   bzero(&serveraddr,sizeof(serveraddr));
   serveraddr.sin_family = AF_INET;
   serveraddr.sin_port = htons(0);
//   char arg[] = "192.168.1.150";
   inet_pton(AF_INET,argv[1],&serveraddr.sin_addr);
   char sendpack[1024] = {0};

struct icmp *picmp = NULL;
   picmp = (struct icmp*)sendpack;
   picmp->icmp_type = ICMP_ECHO;
   picmp->icmp_code = 0;
   picmp->icmp_cksum=0;
   picmp->icmp_seq=0;
   picmp->icmp_id=getpid();
   picmp->icmp_cksum=cal_chksum( (unsigned short *)picmp,64);
   errno = 0;
  // int num = 2;
   int n = 0;
   double rtt;
   struct ip *piphead;
   struct timeval tvsend,tvrecv;
   char recvbuff[4096] = {0};
   struct sockaddr_in addrfrom;
   int len =  sizeof(addrfrom);
   while(1)
   {

//tvsend = (struct timeval *)picmp->icmp_data;
     gettimeofday(&tvsend,NULL);
     if(( n = sendto(sockfd,sendpack,64,0,(struct sockaddr*)&serveraddr,sizeof(serveraddr))) == -1)
     {      
        perror("sendto error\n");
     }
     sleep(1);
     if((recvfrom(sockfd, recvbuff, sizeof(recvbuff), 0, (struct sockaddr*)&addrfrom,&len)) < 0)
     {
       printf("error");
     }
     gettimeofday(&tvrecv,NULL);
     rtt = 1000 * (tvrecv.tv_sec - tvsend.tv_sec) + (tvrecv.tv_usec - tvsend.tv_usec)/1000;
     printf("recvform %s : rtt = %.3fms\n",inet_ntoa(addrfrom.sin_addr),rtt);
   }
   return 0;

}

网络编程之ping的更多相关文章

  1. 网络编程之TCP/IP各层详解

    网络编程之TCP/IP各层详解 我们将应用层,表示层,会话层并作应用层,从TCP/IP五层协议的角度来阐述每层的由来与功能,搞清楚了每层的主要协议,就理解了整个物联网通信的原理. 首先,用户感知到的只 ...

  2. 网络编程之socket

    网络编程之socket socket:在网络编程中的一个基本组件,也称套接字. 一个套接字就是socket模块中的socket类的一个实例. 套接字包括两个: 服务器套接字和客户机套接字 套接字的实例 ...

  3. [深入浅出WP8.1(Runtime)]网络编程之HttpClient类

    12.2 网络编程之HttpClient类 除了可以使用HttpWebRequest类来实现HTTP网络请求之外,我们还可以使用HttpClient类来实现.对于基本的请求操作,HttpClient类 ...

  4. java网络编程之TCP通讯

    java中的网络编程之TCP协议的详细介绍,以及如何使用,同时我在下面举2例说明如何搭配IO流进行操作, /* *TCP *建立连接,形成传输数据的通道: *在连接中进行大数据量传输: *通过三次握手 ...

  5. python3网络编程之socketserver

    本节主要是讲解python3网络编程之socketserver,在上一节中我们讲到了socket.由于socket无法支持多用户和多并发,于是就有了socket server. socket serv ...

  6. 网络编程之UDP编程

    网络编程之UDP编程 UDP协议是一种不可靠的网络协议,它在通信的2端各建立一个Socket,但是这个Socket之间并没有虚拟链路,这2个Socket只是发送和接受数据的对象,Java提供了Data ...

  7. 网络编程之TCP编程

    网络编程之TCP编程 前面已经介绍过关于TCP协议的东西,这里不做赘述.Java对于基于TCP协议的网络通信提供了良好的封装,Java使用socket对象来代表两端的通信窗口,并通过Socket产生I ...

  8. 网络编程之socketserver

    网络编程之socketserver """ socketserver.py 中的5个基础类 +------------+ | BaseServer | +-------- ...

  9. 网络编程之Socket & ServerSocket

    网络编程之Socket & ServerSocket Socket:网络套接字,网络插座,建立网络通信连接至少要一对端口号(socket).socket本质是编程接口(API),对TCP/IP ...

随机推荐

  1. 《Cocos2d-x实战 Lua卷》上线了

    感谢大家一直以来的支持!各大商店均开始销售:京东:http://item.jd.com/11659697.html当当:http://product.dangdang.com/23659810.htm ...

  2. 理解C#系列 / .NET体系结构

    .NET体系结构 索引 前提条件 编程 编程语言 编程语言之一:C# C#依赖.NET平台 .NET平台下的公共语言运行库 .NET平台下的基础类库 C#可以开发什么? 前提条件 [最低配置]知道什么 ...

  3. (转)TeamCity配置笔记

    1.编译sln 2.发布网站 3.重复代码检测 4.代码分析 5.单元测试&覆盖率测试 查看代码覆盖率 7.代码签入时自动触发编译 8.通知 1.在teamcity安装目录中找到TrayNot ...

  4. 14.Apache配置

    环境:                                                      ↗  atl.example.com  (192.168.1.101) ↗ www.e ...

  5. 在linux下查看内核版本、gcc版本、操作系统多少位等参数

    1. 查看linux版本 cat /etc/issue Ubuntu 11.04 \n \l 2. 查看内核版本 1)cat /proc/version Linux version 2.6.38-13 ...

  6. jquery 处理字符串 【转】

    1,去掉空格   var txt=$.trim($("txt1").val()); 2,转为数字   txtNum=Number($.trim(txt)) + 1; var thi ...

  7. win7 IIS 7.5 HTTP 错误 404.3 - Not Found

    HTTP 错误 404.3 - Not Found 由于扩展配置问题而无法提供您请求的页面.如果该页面是脚本,请添加处理程序.如果应下载文件,请添加 MIME 映射. 解决这个问题你只需要,打开控制面 ...

  8. UINavigationController 与 UITabBarController

    http://www.cnblogs.com/YouXianMing/p/3756904.html // index start from 1. UITabBarItem *newsItem = [[ ...

  9. php中each()与list()函数

    <?php $fruit = array('a' => 'apple', 'b' => 'banana', 'c' => 'cranberry');reset($fruit); ...

  10. EcilpsePHP studio 3.0 运行(run)环境配置

    EcilpsePHP studio 3.0的界面与 MyEclipse操作界面基本一样,熟悉后者的对于EcilpsePHP studio 的使用学习就不会太难了. 安装好EPP后,新建项目--> ...