ICMP协议
互联网控制消息协议(英语:Internet Control Message Protocol,缩写:ICMP)是互联网协议族的核心协议之一。它用于网际协议(IP)中发送控制消息,提供可能发生在通信环境中的各种问题反馈。通过这些信息,使管理者可以对所发生的问题作出诊断,然后采取适当的措施解决。
Type
ICMP的类型
- 0 回显请求 Echo Request
- 8 回显应答 Echo Reply
- 3 目标不可达 Destination Unreachable
- 11 超时消息 Time Exceeded
- 5 重定向消息 Redirect
ICMP扫描
利用ICMP协议来判断存活的主机
原理
对需要扫描的ip发送icmp回显请求Echo Request
,如果收到回显应答Echo Reply
则判断该ip处于活动状态,简单来说就是ping别人,以是否ping得通来判断是否存活
数据包分析
ping网关
# ping 网关 -c 1
可以看到封装为Ether/IP/ICMP
,ICMP的类型为8
(Echo Request)
答复的数据包ICMP类型为0
(Echo Reply)
>>> ls(ICMP)
type : ByteEnumField = (8) #ICMP类型
code : MultiEnumField (Depends on type) = (0)
chksum : XShortField = (None)
id : XShortField (Cond) = (0)
seq : XShortField (Cond) = (0)
[...]
编写脚本
1.Scapy中ICMP的请求和答复
>>> packet =Ether()/IP(src='192.168.1.113',dst='192.168.1.1')/ICMP()
>>> packet.show()
###[ Ethernet ]###
dst= 88:25:93:d2:6e:fa
src= 00:0c:29:62:44:de
type= 0x800
###[ IP ]###
version= 4
ihl= None
tos= 0x0
len= None
id= 1
flags=
frag= 0
ttl= 64
proto= icmp
chksum= None
src= 192.168.1.113
dst