首页 > 其他分享 >0225-ping 请求报文

0225-ping 请求报文

时间:2024-08-13 16:05:36浏览次数:6  
标签:get 报文 ping 0225 packet println icmp type

环境

  • Time 2022-11-20
  • WSL-Ubuntu 22.04
  • Rust 1.65.0
  • pnet 0.31.0
  • tun-tap 0.1.3

前言

说明

参考:https://docs.rs/pnet/latest/pnet/index.html
RFC 792

目标

查看 ping 请求报文的格式,ping 基于 IP 报文。

ping 命令

ping -I tun0 172.24.49.106

root@jiangbo12490:~# ping  -I tun0  172.24.49.106
PING 172.24.49.106 (172.24.49.106) from 172.24.49.244 tun0: 56(84) bytes of data.
^C
--- 172.24.49.106 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

main.rs

use pnet::packet::icmp::echo_request::EchoRequestPacket;
use pnet::packet::icmp::{IcmpPacket, IcmpTypes};
use pnet::packet::{ip::IpNextHeaderProtocols, ipv4::Ipv4Packet};
use tun_tap::{Iface, Mode};

fn main() -> std::io::Result<()> {
    let iface = Iface::without_packet_info("tun0", Mode::Tun)?;

    let mut buffer = vec![0; 1500];

    loop {
        let size = iface.recv(&mut buffer)?;
        let packet = Ipv4Packet::new(&buffer).unwrap();

        if packet.get_version() == 6 {
            println!("IPv6 packet, continue");
            continue;
        }

        if packet.get_next_level_protocol() != IpNextHeaderProtocols::Icmp {
            println!("not icmp packet, continue");
            continue;
        }

        // 因为头部长度的单位是 4 字节
        let length = packet.get_header_length() as usize * 4;
        let packet = IcmpPacket::new(&buffer[length..]).unwrap();

        // 类型 8  表示 EchoRequest,0 表示回应
        println!("type {:?}", packet.get_icmp_type());
        // ping 程序的请求和响应都为 0
        println!("code {:?}", packet.get_icmp_code());
        // 校验和
        println!("checksum {:?}", packet.get_checksum());

        if packet.get_icmp_type() != IcmpTypes::EchoRequest {
            println!("not icmp request, continue");
        }

        let packet = EchoRequestPacket::new(&buffer[length..]).unwrap();
        // 类型 8  表示 EchoRequest,0 表示回应
        println!("type {:?}", packet.get_icmp_type());
        // 标识符
        println!("identifier {:?}", packet.get_identifier());
        // 序列号
        println!("sequence_number {:?}", packet.get_sequence_number());
        println!("length: {}, {:?}", size, &buffer[..size]);
    }
}

程序输出

type IcmpType(8)
code IcmpCode(0)
checksum 48637
type IcmpType(8)
identifier 24612
sequence_number 1
length: 84, [69, 0, 0, 84, 194, 81, 64, 0, 64, 1, 188, 200, 172, 24, 49, 244, 172, 24, 49, 106, 8, 0, 189, 253, 96, 36, 0, 1, 241, 40, 126, 99, 0, 0, 0, 0, 170, 125, 1, 0, 0, 0, 0, 0, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55]

总结

了解 ping 请求报文的格式,其中包含 type,code,checksum,identifier,sequence_number 等。

附录

标签:get,报文,ping,0225,packet,println,icmp,type
From: https://www.cnblogs.com/jiangbo4444/p/18357144

相关文章

  • 问题 IDEA创建Sping项目只能勾选17和21,却无法使用Java8
    想创建一个springboot项目,本地安装jdk版本为1.8,但是在使用SpringInitializr创建项目时,版本只能选择21或17在JDK为1.8的情况下,无论选择Java17版本或者21版本时,都会报错。Java17和Java8(JDK1.8)的区别版本号:Java17是JavaSE17的版本,而JDK1.8是JavaSE8的版本。发......
  • firewalld: 禁止ping和允许ping
    一,默认情况允许ping[lhdop@blog~]$ping8.14.7.5PING8.14.7.5(8.14.7.5)56(84)bytesofdata.64bytesfrom8.14.7.5:icmp_seq=1ttl=58time=2.69ms64bytesfrom8.14.7.5:icmp_seq=2ttl=58time=2.59ms...二,禁止ping[root@iZ2zejc9t0hf6pnw6sewrxZ~]#fire......
  • 三报文握手经典例题详解
    如图,有如下TCP连接。主机V通过三次握手与主机U建立一个TCP连接1.有三个TCP段(标号为A、B、C) 被传送,请在下面括号中填入各段的SYN标志位、序号(seq)、确认号(ack)段A:  SYN=(  1 ),seq=500段B:  SYN=(  1 ),seq=600,ack=(  501    )段C:  ......
  • BugKu CTF Misc:眼见非实 & 啊哒 & ping & Snowfall
    前言BugKu是一个由乌云知识库(wooyun.org)推出的在线漏洞靶场。乌云知识库是一个致力于收集、整理和分享互联网安全漏洞信息的社区平台。BugKu旨在提供一个实践和学习网络安全的平台,供安全爱好者和渗透测试人员进行挑战和练习。它包含了各种不同类型的漏洞场景,如Web漏洞、系统......
  • 解决Windows系统下cmd中ping命令无法使用的问题
    问题描述:当我配置Java环境变量后,发现ping命令无法使用。 问题分析:可能是环境变量配置上出了问题,还可能是PING.EXE被删除了。解决步骤:①“Win+R”打开运行窗口,输入:C:\Windows\System32 ②点击“确定”后,看是否能够找到PING.EXE(文件名顺序一般按字母顺序)。如果没......
  • Elasticsearch Mapping类型修改
    背景通常数据库进行分库分表后,目前比较常规的作法,是通过将数据异构到Elasticsearch来提供分页列表查询服务;在创建Elasticsearch索引时,基本都是会参考目前的业务需求、关系数据库中的类型以及对数据的相关规划来定义相关字段mapping的类型.在Elasticsearch的mapping中的列(或则......
  • 车载总线的诊断报文格式
    1.Flexray中的诊断报文格式1.1Flexray的诊断报文类型Flexray中的诊断报文帧共共分为以下几种类型:1.起始帧(STF)2. 3.流控帧()1.2 Flexray的诊断报文解析如下表,无论哪种类型的诊断报文,诊断报文中负载区域均由以下几个部分构成:1.接受方ECU地址(C_TA:communicationtarget......
  • [Typescript] Importing and Typing non-code files in Typescript
    Herewe'reattemptingtoimportseveralPNGfilesintoourTypeScriptprogram:importpngUrl1from"./example1.png";//redsquigglylineunder"./example1.png"importpngUrl2from"./example2.png";//redsquigglyline......
  • 一帧CAN报文的收发流程
    一帧CAN报文的收发流程概述介绍总线通讯的文章有很多了,各种平台,CSDN\知乎、电子发烧友等等。扪心自问,你真的懂了吗?还是和大多数人一样,浅尝辄止,仅仅了解了一些分层的概念,就停滞不前了?附赠自动驾驶最全的学习资料和量产经验:链接认识事物的逻辑可不是这样的。autosar实......
  • SAP PO接口报文保存到内表中
    有一个需求,接收PI传数据过来后,除整理数据保存到用户数据表外,在后期还需要把报文加工一下(要求报文内容与原接收报文一致,只是补加少量值),在发送到其它的系统。由于数据接收后已对数据加工到了用户表,已没有原报文内容(比如金额已累计),如从用户数据表中再取出数据整理加入发送出去,一是......