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

news/2024/9/23 6:24:09/

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.ppmy.cn/news/56293.html

相关文章

leetcode-018-四数之和

题目及测试 package pid018; /* 18. 四数之和 给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。 请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] &#xff08;若两个四元组元素一一对应&#xff0c;则认为两个…

【MySQL】数据的家——MySQL的数据目录

1. 数据库和文件系统的关系 InnoDB、MyISAM 等 存储引擎把表存储在磁盘上&#xff0c;操作系统使用文件系统来管理磁盘。所以&#xff0c;InnoDB、MyISAM 等 存储引擎都是把数据存储在文件系统上。 当读取数据时&#xff0c;存储引擎会从文件系统中把数据读出来返回给我们&am…

微服务开发LCM(Life Cycle Model)

02_Project Execution_项目执行1_Order Clarification_订单澄清099-Project approval--099项目批准110-Context diagram--110上下文图121-Process model--121过程模型130-Application description--130应用程序说明131-Architecture diagram--131架构图137-Technical interface…

华为OD机试 - 端口合并(Python)

题目描述 有M个端口组(1<=M<=10), 每个端口组是长度为N的整数数组(1<=N<=100), 如果端口组间存在2个及以上不同端口相同,则认为这2个端口组互相关联,可以合并。 输入描述 第一行输入端口组个数M,再输入M行,每行逗号分割,代表端口组。 备注:端口组内数字…

Python中的异常处理机制可以帮助程序员在程序运行过程中遇到错误时进行处理

Python中的异常处理机制可以帮助程序员在程序运行过程中遇到错误时进行处理&#xff0c;防止程序崩溃或出现不可预测的错误。 Python中的异常处理使用try-except语句。try语句块包含可能会出现异常的代码&#xff0c;而except语句块则定义了出现异常时应该执行的操作。下面是一…

nginx负载均衡+RabbitMq集群及镜像队列(2)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、nginx是什么&#xff1f;二、搭建步骤1.软件和环境2.安装nginx3.负载均衡配置nginx.conf4.应用程序配置 总结 前言 提示&#xff1a;这里可以添加本文要记…

【原创】生成文件MD5图像,类似于GitHub的像素风格头像

前言 我想通过文件的md5生成关于这个md5的图像&#xff0c;类似于GitHub的随机像素头像&#xff0c;用处是让这个md5更加直观&#xff0c;也能用于生成各种用户头像&#xff0c;跟GitHub一样。 网上搜了一下&#xff0c;没有现成的方法&#xff0c;只能有一篇类似的文章可以借…

GeoTools实战指南: 轻松实现GeoTIFF与Shapefile的可视化和叠加

GeoTools实战指南: 轻松实现GeoTIFF与Shapefile的可视化和叠加 介绍 本教程将指导您如何使用GeoTools库渲染栅格数据(GeoTIFF文件)和矢量数据(Shapefile文件),并将它们叠加在地图窗口中显示。下面是基于提供的代码示例的教程。 准备环境 首先,您需要将GeoTools库添加…