发送ICMP报文时,必须程序自己计算校验和,将它填入ICMP头部对应的域中。...校验和的计算方法: 将数据以字为单位累加到一个双字中,如果数据长度为奇数,最后一个字节将被扩展到字,累加的结果是一个双字,最后将这个双字的高16位,低16位相加后取反,便得到了校验和。...下面是checksum的计算校验和的代码: USHORT checksum(USHORT* buff, int size) { unsigned long cksum = 0; while...下面是Ping的执行步骤: 1 创建协议类型为IPPROTO_ICMP的原始套接字 2 创建并初始化ICMP封包 3 调用sendto函数向远程主机发送ICMP请求 4 调用recvfrom函数接收ICMP...short icmp_checksum; // 校验和 // 下面是回显头 unsigned short icmp_id; // 用来惟一标识此请求的ID号,通常设置为进程
,超时之后即便接收到了PONG包也不会转发给内部机器在部分对安全性要求更高的场景下,还会有以下一些限制:PING包与PONG包长度必须一致更短的超时时间(秒级)因此,ICMP隧道没法实现完美的双向通信,...0x02 实现ICMP隧道的一些关键点连接管理ICMP协议与UDP协议类似,是不保证可靠传输的,需要上层逻辑进行连接的管理。...如果这两个包时间非常接近,则前面发送的包其实是没有必要的。可以通过延时确认机制,保证在这种情况下不会产生多余的数据包。其实现原理基本与TCP的延时确认机制是一致的。...包如果客户端连续30秒都没有收到对方发送过来的数据包,则认为连接已断开;服务端也是类似的逻辑可以看出,这里基本实现了类似TCP的逻辑,只是实现上简化了很多;并针对ICMP穿越NAT的特点做了适配。...ID0x04 总结详细实现代码可以看:https://github.com/drunkdream/turbo-tunnel/blob/master/turbo_tunnel/icmp.py。
完整代码在文末 什么是ICMP SMURF攻击 ICMP SMURF攻击是一种DDoS攻击,利用了Internet Control Message Protocol (ICMP) 的功能和网络的特性,目的是通过大量伪造的...开发者可以使用Libnet库将构建好的数据包发送到网络中的目标主机,或者将数据包注入到本地网络设备上。这使得开发者能够直接与网络进行交互,并实现各种网络应用和工具。...此外,Libnet库还提供了对数据链路层(如以太网帧)的访问,使得开发者能够更底层地操作网络数据。 跨平台支持:Libnet库可在多个操作系统和平台上使用,包括Linux、Unix、Windows等。...这使得开发者能够在不同的环境中进行网络编程,并实现跨平台的网络应用程序。...下载libnet sudo apt install libnet-dev 在C语言中使用libnet #include Libnet实现ICMP SMURF攻击 初始化Libnet
我的上一篇文章《Linux编程之PING的实现》里使用ICMP协议实现了PING的程序,ICMP除了实现这么一个PING程序,还有哪些不为人知或者好玩的用途?...要实现ICMP的洪水攻击,需要以下三项的知识储备: DOS攻击原理 ICMP的深入理解 原始套接字的编程技巧 一、ICMP洪水攻击原理 ICMP洪水攻击是在ping的基础上形成的,但是ping程序很少能造成目的及宕机的问题...,这是因为ping的发送包的速率太慢了,像我实现的PING程序里ping包发送速率限定在1秒1发,这个速率目的主机处理ping包还是绰绰有余的。...二、ICMP洪水攻击程序设计 这里我想实现一个ICMP洪水攻击的例子,这里我想采用方式二来进行设计。...虽说方式三的“借刀杀人”更为巧妙,其实也是由方式二的伪装方式进一步延伸的,实现起来也是大同小异。 首先给出攻击的模型图: ?
前言:昨天有个同学碰到发送udp包时收到destination unreachable的icmp包问题,本文简单介绍一下linux5.9中icmp包的处理流程。...icmp包结构如下。 ? 收到icmp包的处理流程 我们从收到ip包开始分析。...所以会执行icmp对应的handler。那么对应的是哪个函数呢?我们看看inet_protos是什么。...下面我们看看icmp的函数集。...我看看icmp_pointers的定义。
发起同步的设备产生一个时间戳,然后利用ICMP消息体和协议规则,将时间戳发送给接收设备,这就是一个timestamp request消息。...我们看看timestamp消息的结构: ? 它其实是我们上次实现ping应用的翻版,只不过多加了几个数据项。...我们看看消息组成的数据格式: ? 在实践上,即使有这样的协议,不同设备之间的同频依然难以实现。...因为ICMP基于IP之上,而IP协议本质上是不可靠的,因此发出去的消息很可能会遗失,抵达不了目的设备,因此如此简单的交换两个设备的时间戳根本保障不了不同设备之间的同步,于是有更强大的协议用于保障时间同步...由于该协议与前面我们实现的ping协议非常相近,因此我们可以在上一节的基础上进行修改就可以完成。
/usr/bin/env python #coding:utf-8 import os, sys, socket, struct, select, time # From /usr/include/linux.../icmp.h; your milage may vary....ICMP_ECHO_REQUEST = 8 # Seems to be the same on Solaris. def checksum(source_string): """ I'm not too...= socket.getprotobyname("icmp") try: my_socket = socket.socket(socket.AF_INET, socket.SOCK_RAW, icmp...select 模块: Python中的select模块专注于I/O多路复用,提供了select poll epoll三个方法(其中后两个在Linux中可用,windows仅支持select),另外也提供了
背景: 想实现一个在没外网的时候就自动重启路由器的功能。 又不想用ping命令,因为在代码里调用system("ping"); 可能会比较耗时,得单开线程。于是找了个实现ICMP协议的代码。...icmp*)sendpacket; icmp->icmp_type=ICMP_ECHO; //回显请求 icmp->icmp_code=0; icmp->icmp_cksum...->icmp_id:%d\n",ips,icmp->icmp_type,icmp->icmp_id); // 判断Ping回复包的状态 if (icmp->icmp_type...\n"); } return 0; } 实际效果: 补充说明: 0)直接用参考链接上的代码时编译不过,不知道是不是因为我用的是cpp,没太深究。...1)实际使用的时候需要加上sudo,不然在创建套接字那个地方会报错。我还没想好怎么在代码里用sudo,(因为实际项目运行起来是不需要加sudo的)。
UserParameter=ping.storage,/bin/bash /etc/zabbix/zabbix_agentd.d/pingstorage.sh 标题:zabbix agent 隔离网络ICMP...监控实现 作者:cuijianzhe 地址:https://solo.cjzshilong.cn/articles/2023/11/19/1700395999304.html
ping命令底层使用的是ICMP,ICMP报文封装在ip包里。它是一个对IP协议的补充协议,允许主机或路由器报告差错情况和异常状况。 ICMP报文格式和各个字段的含义 ICMP报文由首部和数据段组成。...回送请求的具体报文: 回送应答的具体报文: ICMP报头格式: ICMP报文包含在IP数据报中,IP报头在ICMP报文的最前面。...更多说明可以参考:https://tools.ietf.org/html/rfc792 ping程序的实现 ping程序使用ICMP协议的强制回显请求数据报以使主机或网关发送一份 ICMP 的回显应答。...= 0) { sum = (sum & 0xffff) + (sum >> 16); } return (uint16_t)~sum; } 有效的校验和实现对于良好的性能至关重要...写这篇文章主要的目标是熟悉原始套接字编程的基本流程,理解ping程序的实现机制,理解ICMP协议。
ICMP 是干啥用的 它到底是用来干啥的呢?为啥叫控制报文协议,控制的是什么? ICMP 分为查询报文和差错报文两大类。...ICMP 协议说明 虽然工作在网络层,看上去和 IP 协议是并列的,但是 ICMP 报文要附加 IP 头,一般被 IP 层或者更高层的协议(例如TCP或UDP)使用。...下面这张图是 ICMP 的分类,包括查询报文和差错报文,需要原始 Excel 的同学可以回复 ICMP获取源文件。...查询报文 将 ICMP 用作查询报文的场景比较少,用作查询报文的意思就像是使用 ARP 协议或者 TCP 协议这种,是我们主动发起的,只不过选了 ICMP 协议。...总结 1、 ICMP 在网络层,但要加上 IP 首部; 2、ICMP 分为查询报文和差错报文,主要用到的还是差错报文; 3、ICMP 的差错报文就好像一个只通知坏消息的信息,当数据报在网络中出现问题的时候
第21章 TCP的超时与重传 21.10 ICMP的差错 让我们来看一下 T C P是怎样处理一个给定的连接返回的 I C M P的差错。...当前基于伯克利的实现对这些错误的处理是: • 一个接收到的源站抑制引起拥塞窗口 c w n d被置为1个报文段大小来发起慢启动,但是慢启动门限s s t h re s h没有变化,所以窗口将打开直至它或者开放了所有的通路...当前基于伯克利的实现记录发生的 I C M P差错,如果连接超时, I C M P差错被转换为一个更合适的的差错码而不是“连接超时”。...早期的B S D实现在任何时候收到一个主机不可达或网络不可达的I C M P差错时会不正确的放弃连接。...然而,我们所观察到的现象是 s o c k程序在最终放弃时打印出来的差错信息:“没有到达主机的路由”。这与U n i x的I C M P主机不可达的差错类似(图 6 - 1 2)。
大家好,又见面了,我是你们的朋友全栈君。...http://blog.chinaunix.net/uid-20644632-id-4115863.html 使用snmptrap发送SNMP trap 2014-02-21 13:55:33 分类: LINUX...等工具可以实现trap的发送和接收,下面是具体做法。...为了简单,我们没有指定收到trap后对应的处理程序。...查看snmptrapd的log信息,可以看到我们发送的trap: 2014-01-14 17:08:13 localhost [UDP: [127.0.0.1]:59609->[127.0.0.1]
本次就以ICMP协议进行分析,并使用Python开发出一个ICMP远控后门,在写这篇文章的之前,我感觉大家对ICMP协议肯定不会很了解,因此将ICMP后门的实现分成几篇进行讲解,循序渐进。...本篇就讲解一下ICMP协议的内容,并使用Python实现一个简单的ping。 ? 第一节 ICMP协议是什么鬼? 不知道大家有没有ping过百度,用来测试自己的网络是不是畅通,如下图所示。...ping命令使用的就是ICMP协议,在ping百度的过程中,咱们使用wireshark抓一下包,这样比较直观。...第三节 ping实现 在上面我们简单讲解了ICMP的报文格式,接下来我们使用Python3根据报文格式简单实现一下ping功能,主要用到了raw socket技术,即原始套接字,使用struct pack...代码实现如下所示: ?
图2 linux系统下,ping默认传输的是48bytes,前8bytes随时间变化,后面的固定不变,内容为!”#$%&’()+,-./01234567,如图3所示: ?...linux系统下ping默认传输的内容,去掉开头可变的8bytes后是:!”...的大小固定,windows下为32bytes,linux下为48bytes; 数据包中payload的内容固定,windows下为abcdefghijklmnopqrstuvwabcdefghi,linux...Spark Streaming 是Spark核心API的一个扩展,可以实现高吞吐量、具备容错机制的实时流数据处理。...5.2 正样本检测效果 目前测试过程中使用的已知正样本有以下几种: 正常Ping数据包,Ping命令产生的数据包,平台包括linux/win/mac/solaris/android/ios,payload
下面是几种常见的ICMP报文: 1.响应请求 我们日常使用最多的ping,就是响应请求(Type=8)和应答(Code=0),一台主机向一个节点发送一个Type=8的ICMP报文,如果途中没有异常(...例如被路由器丢弃、目标不回应ICMP或传输失败),则目标返回Type=0的ICMP报文,说明这台主机存在,更详细的tracert通过计算ICMP报文通过的节点来确定主机与目标之间的网络距离。...——————————–种类————————————- ICMP报文格式 ICMP虽然是网络层的协议,但要将ICMP报文放入IP中发送。...ICMP报文的公共头标由1字节的类型(type)、1字节的 代码(code)和2字节的校验和(checksum)组成。 类型域和代码域用来标识各种ICMP报文。...类型域表示ICMP报文的类型,目前已定义了14 种,从类型值来看ICMP报文可分为二大类。
,5--ICMP_REDIRECT,11--ICMP_TIME_EXCEEDED,12--ICMP_PARAMETERPROB时,ICMPv4可以内嵌IPv4+UDP/TCP/ICMPv4,来指示导致差错产生的原始报文...4--ICMP6_PARAM_PROB时,也可以内嵌IPv6+UDP/TCP/ICMPv6,来指示导致差错产生的原始头部信息ICMP攻击ICMPv6 Floodalert icmp any any ->...Smurf ScanSmurf方式把源IP设置为受害者IP,然后向多台服务器发送ICMP报文(通常是ECHO请求),这些接收报文的服务器被报文欺骗,向受害者返回ECHO应答(Type=0),导致垃圾阻塞受害者的门口...如果目某主机A支持ICMP重定向,那么主机B发一个IMCP重定向给它,以后它发出的所有到指定地址的报文都会转发主机B,这样B就可以达到窃听目的了或者该主机按照黑客的要求来修改路由表。...misc-activity; sid:2100436; rev:7; metadata:created_at 2010_09_23, updated_at 2010_09_23;)Suricata涉及到匹配的Optionitype
6.2 ICMP报文的类型 各种类型的I C M P报文如图6 - 3所示,不同类型由报文中的类型字段和代码字段来共同决定。图中的最后两列表明 I C M P报文是一份查询报文还是一份差错报文。...当发送一份I C M P差错报文时,报文始终包含 I P的首部和产生I C M P差错报文的I P数据报的前8个字节。...这样,接收 I C M P差错报文的模块就会把它与某个特定的协议(根据 I P数据报首部中的协议字段来判断)和用户进程(根据包含在 I P数据报前8个字节中的T C P或U D P报文首部中的T C P...下面各种情况都不会导致产生 I C M P差错报文: ICMP差错报文(但是,I C M P查询报文可能会产生I C M P差错报文)。...目的地址是广播地址(见图 3 - 9)或多播地址(D类地址,见图1 - 5)的I P数据报。 作为链路层广播的数据报。 不是I P分片的第一片(将在11 . 5节介绍分片)。
sig_key: E4:A1:B6:8F:46:8A:CA:5C:22:84:50:53:18:FD:9D:AD:72:4B:13:03 sig_hashalgo: sha256 在 linux...2.2 写一个 ICMP 的调用函数 为了测试上面的程序,我们写一个简单的 ICMP echo 程序。...我们会使用 tun 设备,然后给 tunX 接口发送一个 ping 包,程序简单响应这个包,完成 ICMP 的 request 和 reply 的功能。...再看 tcpdump 抓包终端,成功显示 ICMP 的 request 包和 reply 包。...使用 tap/tun 设备需要包含头文件 #include ,以下是完整代码。
关于ICMP-TransferTools ICMP-TransferTools是一款功能强大的文件传输工具,可以帮助广大研究人员在受限网络环境中通过ICMP与Windows主机之间传输文件。...ICMP-TransferTools由四个不同的脚本文件组成,即一个Python服务器和针对不同传输方向(下载和上传)的PowerShell客户端。...clone https://github.com/icyguider/ICMP-TransferTools.git 工具使用 通过ICMP下载文件 在使用该功能的时候,需要用到ICMP-SendFile.py...Python服务器必须要提前运行才可以实现文件下载,脚本的使用方法请参见下列帮助信息: usage: ICMP-SendFile.py [-h] [-v] [-b 1000] source destination...Python服务器必须要提前运行才可以实现文件上传,脚本的使用方法请参见下列帮助信息: usage: ICMP-ReceiveFile.py [-h] src file ICYGUIDER'S
领取专属 10元无门槛券
手把手带您无忧上云