ping实现

作者: HHFCodeRv | 来源:发表于2016-09-05 14:07 被阅读0次
ping
最近手头有点工作跟这个有段, 就实现一个简单ping. 不需要像源码那么详细. 就实现如图功能就行.

先说下原理:

  1. 使用ICMP协议, 组织ICMP

    socket_id = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
    告诉host我们要使用发送的报文是ICMP, 至于怎么发, 以及TCP通信的就是不是我们这里要关心的了

  2. 组织ICMP标示

p_icmp = (struct icmp *)buffer;
p_icmp->icmp_type = ICMP_ECHO;
p_icmp->icmp_code = 0;
p_icmp->icmp_cksum = 0;
p_icmp->icmp_seq = 12345;
p_icmp->icmp_id = getpid();
p_icmp->icmp_cksum = checkSum((uint16_t*)p_icmp, 64);
这里组织我们需要的ICMP的一些标示

  1. 发送ICMP给host

int send_chars = sendto(socket_id, (char *)buffer, 64, 0, (struct sockaddr*) &to, (socklen_t) sizeof(struct sockaddr_in));
发送ICMP包给你host

  1. 等待hostICMP响应包

int res = select(socket_id+1, &rfds, NULL, NULL, &tv);
receive_bytes = recvfrom(socket_id, packet, 1024, 0, (struct sockaddr *)&from, &fromlen)
等待host的响应

基本上这样一个简单的PING就可以了, 至于TCP之间的如何通信问题, 请查看SOCKET通信的相关资料

详细代码请查看我的github

参考文档:
https://www.cs.utah.edu/~swalton/listings/sockets/programs/part4/chap18/ping.c

相关文章

  • ping实现

    先说下原理: 使用ICMP协议, 组织ICMP包socket_id = socket(AF_INET, SOCK_...

  • Ping实现

    ping是常见的一个网络检测工具,牵涉到的核心协议是ICMP协议和IP头协议,下面橙色背景的字段为需要关心的部分 ...

  • Ping笔记(一)

    Ping的c语言实现 Ping和ICMP Ping简介: ping 命令是用来查看网络上另一个主机系统的网络连接是...

  • 实现PING功能

    一、实验名称 使用GUI实现ping功能 二、实验要求和目的 使用GUI实现ping功能 三、实验步骤和原理 第一...

  • Redis第2️⃣2️⃣课 Cluster故障转移

    一、故障发现 节点间通过ping / pong 消息实现故障发现:不需要sentinel。ping / pong ...

  • 计算机网络第五次作业

    题目:写一个实现ping的gui小程序。 代码: package ping; import java.awt.Fo...

  • ping程序实现

    2017/11/71505060218 软件工程二班 郭浩实现过程:使用tkinter模块实现图形界面;调用win...

  • python 实现ping

    最近想写个脚本来实现网段扫描,判断有哪些ip在用,最简单的就是将子网内的ip ping个遍。网上找了下貌似pyth...

  • 循环脚本简单练习

    使用until和while分别实现192.168.30.0/24 网段内,地址是否能够ping通,弱ping通则输...

  • 在Linux上用C++实现Ping

    首先我们在terminal上使用ping命令并用wireshark软件抓包,看看实现ping命令需要那些协议,以及...

网友评论

    本文标题:ping实现

    本文链接:https://www.haomeiwen.com/subject/wjfkettx.html