ICMP后门(上)补充篇

前言

在上一篇文章Python3实现ICMP远控后门(上)中,我简要讲解了ICMP协议,以及实现了一个简单的ping功能,在文章发表之后,后台很多朋友留言,说对校验和的计算不是很了解,实现的ping功能仅实现了发送,接收没有实现,一个完整ping如何实现等等。本来对于ICMP后门写三篇文章的,但是对大家的疑惑临时开辟了一个补充篇,对ICMP协议校验方式,以及实现一个完整功能的ping给大家进行详细的讲解。

第一节 ICMP协议校验和

对于校验和的计算,我对写校验和的代码进行了如下注释,注意看注释就会明白校验的整个流程。

def checksum(packet):

    """

    校验

    """

   #packet为icmp头部和data的字节流,其中icmp校验和字段初始化为0    

    sum =0

   #countTo:记录packet是有多少个16位,因为对每两个字节进行校验

    countTo = (len(packet)//2)*2 

    count =0

    while count <countTo:

        #将每两个字节中的第二个字节作为高位,第一个字节作为低位组成16位的值

        sum += ((packet[count+1] << 8) | packet[count])

        count += 2

    #packet并不一定都是偶数字节,可能是奇数,把最后一个字节加到sum中

    if countTo<len(packet):

        sum += packet[len(packet) - 1]

        sum = sum & 0xffffffff

    #sum中超过16位的高位加到低位

    sum = (sum >> 16)  +  (sum & 0xffff)

    sum = sum + (sum >> 16)

    #对sum取反

    answer = ~sum

    #到这应该就结束了,但是字节序有问题,下面是将主机字节序转为网络字节序

    #即高位转低位,低位转高位

    answer = answer & 0xffff

    answer = answer >> 8 | (answer << 8 & 0xff00)

    return answer

  

第二节 ICMP报文的标识符与序列号

ICMP回送消息(Type = 8),被请求主机回送响应消息(Type = 0),基本格式如下:

回送消息[ECHO]

回送响应消息[ECHO REPLY]

  • Code = 0,

  • CheckSum为校验和,重点注意从ICMP的头部到data结束(即到整个数据包结束)

  • Identifier为标识符,由主机设定,一般设置为进程号,回送响应消息与回送消息中identifier保持一致

  • Sequence Number为序列号,由主机设定,一般设为由0递增的序列,回送响应消息与回送消息中Sequence Number保持一致

  • data为数据,由主机设定,回送响应消息与回送消息中data保持一致

第三节 ping实现

在上篇中,我们讲解了如何发送icmp请求,接下来我们实现如何接受响应,并计算响应时间,效果类似下图:

接收ping响应的代码如下:

ping的超时机制是通过select模型实现的。对于Identifier设置为进程号,如下图所示。

测试ping效果

注意使用管理员权限运行Python脚本,直接ping www.baidu.com

最后

如果觉得本文还可以,一定记得推荐哟。欢迎关注我的公众号。

Python3实现ICMP远控后门(上)_补充篇的更多相关文章

  1. Python3实现ICMP远控后门(上)

    这几天一直在研究远控木马的一些通信协议,比如TCP,UDP,ICMP,DNS,HTTP等等,对于TCP,UDP这两种就不讲解了,因为太常见了. 大家可能对采用ICMP,DNS的木马不是很熟悉,其实这两 ...

  2. Python3实现ICMP远控后门(中)之“嗅探”黑科技

    ICMP后门 前言 第一篇:Python3实现ICMP远控后门(上) 第二篇:Python3实现ICMP远控后门(上)_补充篇 在上两篇文章中,详细讲解了ICMP协议,同时实现了一个具备完整功能的pi ...

  3. Python3实现ICMP远控后门(下)之“Boss”出场

    ICMP后门 前言 第一篇:Python3实现ICMP远控后门(上) 第二篇:Python3实现ICMP远控后门(上)_补充篇 第三篇:Python3实现ICMP远控后门(中)之"嗅探&qu ...

  4. 用nc+简单bat/vbs脚本+winrar制作迷你远控后门

    前言 某大佬某天和我聊起了nc,并且提到了nc正反向shell这个概念. 我对nc之前的了解程度仅局限于:可以侦听TCP/UDP端口,发起对应的连接. 真正的远控还没实践过,所以决定写个小后门试一试. ...

  5. 设计模式之代理模式(Proxy Pattern)_补充篇

    写在前面: 代理模式的内部原理,作用及远程代理的实现在上一篇博文中都做了详细解释,本文只是对其内容的补充,介绍其它代理 一.虚拟代理 首先,明确虚拟代理的作用:在巨大对象被真正创建出来之前,用虚拟代理 ...

  6. 【原创】利用Office宏实现powershell payload远控

    本文将演示使用Veil-Evasion生成远控所需要的payload以及监听器,然后使用MacroShop生成payload 相关的VBA代码,最后演示将VBA代码写入.doc文本文档的宏中. 环境: ...

  7. 2019-9-11:渗透测试,Kill远控软件,初接触

     初步使用Kill远控软件,使win7靶机被远控 该文章仅供学习,利用方法来自网络文章,仅供参考   1,打开运行Kill,选择系统设置,设置监听端口,通讯密码,点击保存设置 2,点击服务生成,上线参 ...

  8. 利用kage把msf变成可视化远控平台

    项目下载https://github.com/WayzDev/Kage/releases 这里用kali系统演示 1,先下载kage: 2,右击给予执行权限 3,启动msf msfconsole -q ...

  9. 使用kali生成远控payload

    kali linux中的metasploit框架是优秀的渗透框架之一,今天记载一下使用kali生成windows远控木马的过程 生成payload使用的工具是MSFVenom,我们输入msfvenom ...

随机推荐

  1. UNIX环境高级编程——进程环境

    一.main函数 C程序总是从main函数开始.当内核执行C程序时,在调用main前先调用一个特殊的启动例程.可执行程序文件将此启动例程指定为程序的起始地址--这是由连接编译器设置的,而连接编译器则由 ...

  2. Linux nohup 命令

    Linux nohup 命令 如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令.该命令可以在你退出帐户之后继续运行相应的进程.nohup就是不挂起的意思(no ...

  3. iOS开发的10个知识点

    1.关于关键字volatile 一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了.精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这 ...

  4. Css3盒子模型-css学习之旅(5)

    主要内容: 盒子模型内边距,外边距,边框,外边距合并 主要包括:margin(外边距)padding(内边距) border(边框)centent(内容) 内边距:padding,paddinglef ...

  5. 《java入门第一季》之面向对象综合小案例

    需求: /*     教练和运动员案例         乒乓球运动员和篮球运动员.         乒乓球教练和篮球教练.         跟乒乓球相关的人员都需要学习英语.         分析,这 ...

  6. 如何让你的传输更安全--基于SSL协议的通信模式

    之前发表在另一个平台的文章http://www.jointforce.com/jfperiodical/article/1218,现在发表到自己的博客上. 对于SSL/TLS协议,如果要每个开发者都自 ...

  7. AngularJS进阶(二十二)实现时间选择插件

    JS实现时间选择插件 引导语 在项目开发过程中,需要实现根据以日期为筛选条件之一,故需要实现时间选择插件.对于未接触的新事物,自己总是感觉不明觉厉.其实,有些实现可以使用很简单的方法即可.以此为例,偶 ...

  8. 使用API获取(默认付款条件和到期日)

    1. 目的:使用API取到应收事务处理的付款条件(实现标准功能的付款条件和到期日)2. 实现方法:调用 ARP_TRX_DEFAULTS_3.get_term_default获得付款条件 3.实现代码 ...

  9. mongodb系列之--分片的原理与配置

    1.分片的原理概述 分片就是把数据分成块,再把块存储到不同的服务器上,mongodb的分片是自动分片的,当用户发送读写数据请求的时候,先经过mongos这个路由层,mongos路由层去配置服务器请求分 ...

  10. 操作系统 - Linux进程实现的内部结构

    在进程描述符中进入几个字段来表示进程之间的父子关系和兄弟关系. 图3-4显示了一组进程间的亲属关系. 表3-4:建立非亲属关系的进程描述符字段 在某些情况下,内核必须能从进程的PID到处对应的进程描述 ...