Python3实现ICMP远控后门(上)_补充篇

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

原文发布于微信公众号 - 七夜安全博客(qiye_safe)

原文发表时间:2018-05-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏黑白安全

Nginx中如何限制某个IP同一时间段的访问次数

如何设置能限制某个IP某一时间段的访问次数是一个让人头疼的问题,特别面对恶意的ddos攻击的时候。其中CC攻击(Challenge Collapsar)是DDO...

1354
来自专栏令仔很忙

手把手教你----使用Nuget管理自己的项目库

官网上的解释:NuGet is the package manager for the Microsoft development platform in...

1261
来自专栏图形学与OpenGL

实验一 GDI生成像素点

1. 打开VC,新建MFC工程: 从开始->所有程序->Microsoft Visual C++ 6.0菜单中打开VC,也可单...

1361
来自专栏跟着阿笨一起玩NET

Winform登录窗体登录仿asp.net验证成功后进入主界面

一、登录界面验证成功后进入主界面,否则则退出应用程序。 假设登录窗体frmLogin.cs和主界面frmMain.cs在程序的Main入口这样来实现:

1441
来自专栏青玉伏案

Notepad++使用小结

还是那句话“工欲善其事必先利其器”用Notepad++也有一段时间了,也积累了一些东西,写篇博文与大家分享一下使用Notepad++的一些心得。    简单的...

22510
来自专栏Ken的杂谈

ASP.NET Core 入门教程 2、使用ASP.NET Core MVC框架构建Web应用

ASP.NET Core 默认集成了DI。所有官方模块的引入都要使用DI的方式引入。

1062
来自专栏哲学驱动设计

WPF框架的内存泄漏BUG

    用户在使用GIX4某模块的过程中,内存只见加不见减。我们怀疑出现了内存泄漏,所以我花了相当一段时间来进行此问题的排查。     我使用Red Gate公...

2095
来自专栏ml

ijg库的使用的几点注意

ijg库(http://www.ijg.org/)是用于处理jpeg解码和压缩的库,最新版本为2014发布的版本,可以在官网中下载jpegsr9a.zip 使用...

3375
来自专栏欧阳大哥的轮子

Windows窗口消息和消息队列

所有基于事件驱动的操作系统中的GUI程序,都会在主线程中运行一个消息泵来从消息队列中取出消息并执行对应的处理逻辑。消息队列中的消息除了由系统产生外,还提供了对应...

1935
来自专栏walterlv - 吕毅的博客

项目文件中的已知属性(知道了这些,就不会随便在 csproj 中写死常量啦)

发布于 2018-04-12 13:03 更新于 2018-08...

1121

扫码关注云+社区