qiyesafe.com

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


ICMP后门(上)补充篇

 

前言

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

 

第一节 ICMP协议校验和

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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
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

 

最后

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

 

 

posted @   七夜的故事  阅读(1283)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
历史上的今天:
2017-05-11 从多项式相加看线性结构
qiyesafe.com
点击右上角即可分享
微信分享提示