头歌:Ping客户端创建原始套接字(底部附全关完整答案)

news2024/11/17 7:18:50

头歌实践教学平台 (educoder.net)

为Ping客户端创建一个原始类型的套接字

原始套接字


套接字(socket)是一个抽象层

网络应用程序可以通过它发送或接收数据,可对其进行像文件一样的打开、读写和关闭等操作。

套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。

网络套接字是IP地址与端口的组合

为了满足不同的通信程序对通信质量和性能的要求,一般的网络系统提供了三种不同类型的套接字,以供用户在设计网络应用程序时根据不同的要求来选择。它们分别是:

(1)流式套接字(SOCK-STREAM。提供一种可靠的、面向连接的双向数据传输服务,实现了数据无差错、无重复的发送。流式套接字内设流量控制,被传输的数据看作是无记录边界的字节流。

TCP/IP协议簇中,使用TCP协议来实现字节流的传输,当用户想要发送大批量的数据或者对数据传输有较高的要求时,可以使用流式套接字。

(2)数据报套接字(SOCK-DGRAM。提供一种无连接、不可靠的双向数据传输服务。数据包以独立的形式被发送,并且保留了记录边界,不提供可靠性保证。数据在传输过程中可能会丢失或重复,并且不能保证在接收端按发送顺序接收数据。

TCP/IP协议簇中,使用UDP协议来实现数据报套接字。在出现差错的可能性较小或允许部分传输出错的应用场合,可以使用数据报套接字进行数据传输,这样通信的效率较高。

(3)原始套接字(SOCK-RAW。该套接字允许对较低层协议(如IPICMP)进行直接访问,常用于网络协议分析,检验新的网络协议实现,也可用于测试新配置或安装的网络设备。

原始套接字网络通信的基本步骤为


(1)创建原始套接字设置套接字选项创建并填充相应协议头

(2)用sendto()函数将组装好的数据发送出去;

(3)使用recvfrom()函数接收数据并解析;

(4)关闭套接字

本实训使用原始套接字类型,通过ICMP协议来实现Ping程序的网络连通性测试功能

在Python中使用套接字编程


需要先引入套接字

import socket

使用socket()函数来创建套接字。其语法如下:

socket(socket_family,socket_type,protocol=0)

socket_family可以是如下参数之一:

  AF_INET IPv4(默认)

   AF_INET6 IPv6

   AF_UNIX 只能够用于单一的Unix系统进程间通信

socket_type可以是如下参数之一:

   SOCK_STREAM  流式socket , for TCP (默认)

   SOCK_DGRAM   数据报式socket , for UDP

   SOCK_RAW 原始套接字

普通的套接字无法处理ICMPIGMP等网络报文,而原始套接字SOCK_RAW可以;

SOCK_RAM用来提供对原始协议的低级访问,在需要执行某些特殊操作时使用,如发送ICMP报文。SOCK_RAM通常仅限于高级用户或管理员运行的程序使用。

protocol参数:0 (默认)与特定的地址家族相关的协议

如果是 0 ,则系统就会根据地址格式和套接类别,自动选择一个合适的协议。也可以使用

getprotobyname()指定要使用的协议名称如“ICMP”、“UDP”等

要创建一个使用IPV4地址族的的原始套接字,并指定使用ICMP协议,可以使用如下语句:

icmp = getprotobyname("icmp")   /*指定ICMP协议
rawsocket=socket(AF_INET, SOCK_RAW, icmp)

完整代码


头歌ICMPPing实现-Ping客户端创建原始套接字-网络基础文档类资源-CSDN文库

头歌ICMPPing实现-封装并发送ICMP报文-网络基础文档类资源-CSDN文库

头哥ICMPPing实现-解析IP包ICMP头信息.txt-网络基础文档类资源-CSDN文库

头歌第1关:Ping服务端创建UDP套接字-网络基础文档类资源-CSDN文库

头歌UDPPing程序实现-接收并转发消息-网络基础文档类资源-CSDN文库

头歌UDPPing程序实现-服务端模拟丢包事件-网络基础文档类资源-CSDN文库

(1条消息) 头歌UDPPing程序实现-客户端创建UDP套接字-网络基础文档类资源-CSDN文库

(1条消息) 头歌UDPPing程序实现-客户端向服务器发送消息并接收消息.txt-网络基础文档类资源-CSDN文库

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/136496.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

<C++>二叉树进阶

文章目录为什么要学这一节1. 二叉搜索树1.1 二叉搜索树概念1.2 二叉搜索树操作1.3 二叉搜索树的实现1.4 二叉搜索树的应用1.5 二叉搜索树的性能分析2. 经典题目2.1 最近公共祖先2.2 从前序与中序遍历序列构造二叉树2.3 二叉树的前序遍历(非递归)为什么要…

计算机组成原理复习:数据的表示和运算

计算机组成原理复习:数据的表示和运算2. 数据的表示和运算2.1 数制与编码2.1.1 数制:进位计数制及其相互转换2.1.2 编码:数值数据的编码与表示2.1.2.1 逻辑型数据2.1.2.2 字符型数据 之 ASCII码2.1.2.3 数值型数据 之 BCD码2.1.3 校验码——奇…

Part类 -- 上传文件

Part类 -- 上传文件一、核心方法1.1 HttpServletRequest 类方法1.2 Part 类方法二、代码示例前端搭配 form 表单:form input type “file”,允许通过浏览器选中一个文件上传给服务器。 Servlet 就支持处理这种上传文件的请求,把这个请求到的文…

安科瑞智能操控无线测温装置在江苏某化工产业园项目的应用

安科瑞 李亚俊 1 概述 江苏富强新材料有限公司是中国企业500强——山东金岭集团在江苏淮安盐化新材料产业园区投资设立的盐化工企业。公司将利用淮安丰富的盐矿资源和优越的发展环境,投资200亿元,建设120万吨/年离子膜烧碱项目、70万吨/年甲烷氯化物项…

vue新春游戏-拼手速抢车票小游戏,学习玩乐两不误,春节小游戏,新年小游戏

ue新春游戏-拼手速抢车票,老规矩,体验地址:http://game.pkec.net/word-ticket/。 写这个主要是前几天群里运营老师说咋没人写抢车票的,再加上我上一篇文章上了掘金一周,听说多上几次有证书,我还没搞到过掘金…

Go语言 函数传递:值传递 和 虚假的 “引用传递”

前言 其实从变量本身来说,go只有值传递,函数内的修改不会影响函数外。但有一种特例是指针,go可以传指针给函数,指针指向申请出来的实际内存,也就是保存元素的内存, 这样在函数内的修改,可以影响…

就算是TOP程序员,也有这些坏习惯

绝大多数程序员在职业生涯中,多多少少都会养成一些坏习惯,今天就来说一说身边最常见的一些坏习惯,也给刚入行的新朋友们提个醒,少走一些弯路。 那么,就让我们开始吧! 1.不注意适当休息 比如日常工作时、…

B端产品-登录功能设计

在项目启动初期,基本大家都是先从账号体系先开始着手设计的,那么B端的登录功能如何设计呢? 一、需求分析 B端的产品的用户基本上可以分为内部员工和客户,如果是客户使用,基本上都会有注册功能;如果是内部员…

C# Console.Read读取回车和换行

C#的Console.Read函数: 读取缓冲区中的数据,读取到一个字符时停止。 C#的Console.ReadLine函数 读取缓冲区中的数据,遇到回车时停止。 Enter键: 将行数据输入缓冲区,并且将回车符和换行符 加入缓冲区。 注意 Consol…

【H5UI库和二维码】一.H5UI库;二.加密技术;三.二维码

目录​​​​​​​ 一.H5UI库 1.使用方法: (1)页面中引入css文件 (2)页面中引入js文件 2.组件的用法 (2)按钮的使用:button。有三种类型(primary、danger、defaul…

MXNet的Faster R-CNN(基于区域提议网络的实时目标检测)《3》

前面了解到Faster R-CNN在实验中的效果很不错,以及对论文做了一个大概的了解,对此有兴趣的伙伴们也可以先浏览前面两篇文章:MXNet的Faster R-CNN(基于区域提议网络的实时目标检测)《1》MXNet的Faster R-CNN(基于区域提议网络的实时目标检测)《…

【Node】Node.js安装与配置(详细步骤)

Node.js安装与配置(详细步骤)一、安装Node.js1.1 下载1.2 安装1.3 环境变量二、验证是否安装成功三、修改模块下载位置3.1 查看npm默认存放位置3.2 在 nodejs 安装目录下,创建 “node_global” 和 “node_cache” 两个文件夹3.3 修改默认文件…

xd卡数据丢失原因和三种数据恢复方法介绍

xd卡适用于富士/奥林巴斯相机品牌,它能配合各式读卡器,方便的与个人电脑连接传输图像视频等。但是xd卡与其他类型的存储卡一样容易因各种原因出现数据丢失。如果您的xd卡出现了数据丢失的问题,不妨了解下这里给大家分析的xd卡数据丢失原因和具…

解决仓库产品管理痛点,选对条码工具至关重要

" 最近我们仓库管理遇到了很多问题,一方面 我们进出库的产品数量非常庞大,目前公司的条码扫描系统识别效率非常低,只能单个产品进行扫描,经常需要加班加点出入库,而且有些产品条码比较特殊,现在的扫描…

【LeetCode每日一题】——507.完美数

文章目录一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【解题思路】七【题目提示】八【时间频度】九【代码实现】十【提交结果】一【题目类别】 数学 二【题目难度】 简单 三【题目编号】 507.完美数 四【题目描述】 对于一个 正整数&…

windows10安装goland

一、安装包 下载以下两个安装包: go语言二进制包: https://golang.google.cn/dl/ goland安装包 https://www.jetbrains.com/go/nextversion/ 二、安装go语言包 双击下载的语言包,直接next,选择安装路径(自己选择&am…

图的遍历(深度DFS与广度BFS)

文章目录图的遍历深度优先遍历思路邻接表邻接矩阵性能分析广度优先遍历思路邻接表邻接矩阵性能分析源代码图的遍历 **对有向图和无向图进行遍历是按照某种次序系统地访问图中的所有顶点, 并且使得每一个顶点只能访问一次. ** 对于图的遍历需要解决掉两个问题: 如果存在回路/环…

实力总结四类Bean注入Spring的方式

xml 方式 注解方式 Configuration Bean Import FactoryBean BDRegistryPostProcessor 源码 实战 一提到Spring,大家最先想到的是啥?是AOP和IOC的两大特性?是Spring中Bean的初始化流程?还是基于Spring的Spring Cloud全家桶呢…

Vue组件之间的通信

1、组件:是vue的重要的特征之一,可以扩展html的功能,也可以封装代码实现重复使用 2、组件的创建 (1)非脚手架方式创建: 1️⃣使用vue.extend创建组件 2️⃣使用vue.component注册组件 3️⃣在html页面…

一个平凡打工人在 CSDN 的 2022 与 2023

平凡又不平凡的一年 2022 年是不平凡的一年,这一年经历了疫情的起起伏伏,随着身边好多同学的毕业离开,手头的工作也愈发的繁重,2022 年也顺理成章的成为了工作3年来最忙碌的一年,但却也是博客产出与自己收获最多的一年…