使用SOCK_DGRAM类型的socket实现的ping程序

news/2024/5/18 16:37:27 标签: udp, 网络编程, ICMP, ping, Linux

SOCK_DGRAM类型的socket常用于UDP通信,本文将尝试把这种socket用于ICMP协议,并完成一个简单的ping程序。使用ping去测试某个主机是否可用可能是一件很平常的事,尽管ping非常普通,但是编写一个实现ping功能的程序却并不是那么简单,因为ping使用的ICMP协议并不是一个应用层协议,在网上看到的实现ping的例子大多使用raw socket去实现,不仅增加了解析IP报头的麻烦,而且还需要有root权限才能运行,本文简要介绍ICMP协议,并给出一个使用普通的常用于UDP通信的socket实现ping的实例,本文将提供完整的源程序,本文的程序在 Ubuntu 20.04 下测试通过,gcc 版本号 9.4.0;阅读本文需要熟悉socket编程,对初学者而言,本文有一定的难度。

1. 前言

  • ICMP协议和UDP一样,都是面向无连接的;

  • 发送一个ICMP数据包和发送一个UDP数据包非常类似,对UDP而言是构建一个UDP报头然后和数据一起发出去,对ICMP而言就是构建一个ICMP报头然后和数据一起发出去;

  • 创建一个socket时,常用的socket类型有三种:SOCK_STREAM、SOCK_DGRAM和SOCK_RAW,SOCK_STREAM常用于TCP通信,SOCK_DGRAM常用于UDP通信,SOCK_RAW用于接收和发送原始数据包;

  • 其实socket的种类也不止这三种,这些socket类型定义在头文件<bits/socket_type.h>中,但除了常用的这三个外,


http://www.niftyadmin.cn/n/271623.html

相关文章

Java学习15(IO基础知识)

1、IO流简介&#xff1f; IO 即 Input/Output&#xff0c;输入和输出。数据输入到计算机内存的过程即输入&#xff0c;反之**输出到外部存储&#xff08;比如数据库&#xff0c;文件&#xff0c;远程主机&#xff09;**的过程即输出。数据传输过程类似于水流&#xff0c;因此称…

【英语】2023 全国大学生英语竞赛NECCS相关准备

文章目录 1、比赛基本信息2、大赛题型和分值3、如何准备4、2023年全国大学生英语竞赛样题(C级)&#xff0c;满分150Part1. 听力&#xff08;30分钟&#xff0c;30分&#xff0c;1题1分&#xff09;Part2/3. 词语|语法&#xff0c;完型填空&#xff08;20分钟&#xff0c;25分&a…

一篇文章解决Mysql8

基于尚硅谷的Mysql8.0视频&#xff0c;修修改改。提取了一些精炼的内容。 首先需要在数据库内引入一张表。链接地址如下。 链接&#xff1a;https://pan.baidu.com/s/1DD83on3J1a2INI7vrqPe4A 提取码&#xff1a;68jy 会进行持续更新。。 1. Mysql目录结构 Mysql的目录结构…

LeetCode_字符串_中等_165.比较版本号

目录 1.题目2.思路3.代码实现&#xff08;Java&#xff09; 1.题目 给你两个版本号 version1 和 version2 &#xff0c;请你比较它们。 版本号由一个或多个修订号组成&#xff0c;各修订号由一个 ‘.’ 连接。每个修订号由 多位数字 组成&#xff0c;可能包含 前导零 。每个版…

商城订单模块实战 - 分库分表实战及海量数据处理

商城订单服务的实现 数据量 在设计系统&#xff0c;我们预估订单的数量每个月订单2000W&#xff0c;一年的订单数可达2.4亿。而每条订单的大小大致为1KB&#xff0c;按照我们在MySQL中学习到的知识&#xff0c;为了让B树的高度控制在一定范围&#xff0c;保证查询的性能&…

Spring 属性填充源码分析(简单实用版)

属性填充 属性填充只有 3 种方式 根据名称填充 根据类型填充 思考什么时候会出现呢&#xff1f;&#xff1f;&#xff1f; 多见于第三方框架与 Spring集成&#xff0c;举例&#xff1a;Mybatis 与 Spring集成&#xff0c;把 Mapper 接口注册为 BeanDefinition 时候就指定了自…

【centos】【Redis】【systemd】Redis进程守护

Centos7中将redis服务写入systemctl CentOS 7.x开始,CentOS开始使用systemd服务来代替daemon,比起原来的service和config两套命令&#xff0c;systemd整合了service和config的功能。Systemctl是一个systemd工具&#xff0c;主要负责控制systemd系统和服务管理器。先安装一下red…

前后端分离的人力资源管理系统,采用SpringBoot+Vue开发

一、开源项目简介 一个前后端分离的人力资源管理系统&#xff0c;项目采用 SpringBootVue/ElementUI 开发&#xff0c;项目加入常见的企业级应用所涉及到的技术点&#xff0c;例如Spring Security、MyBatis、Redis、RabbitMQ、WebSocket等。 二、功能概述 包含员工资料、人事…