来到第六天Live host identificaction
的环节,主轴在於活的主机,也就是在开机状态,处於活动中的主机侦测,那废话不多说,直接开始今天的主题,但在开始工具介绍之前,可能需要先大概说明一下IP位址以及实体位址的关系。
192.168.1.1
(IPv4)这样组成方式用来表示在网路上的虚拟地址,但IP位址是服务商给你的,或是处於私有网路下私有IP08:00:27:0e:34:8d
就是一个MAC地址,其中前6位08:00:27代表硬体制造商的编号,由IEEE电气与电子工程师协会分配,可以藉由OUI来查询到。另外每张网卡的MAC地址是唯一的。而IP跟MAC之间的关系不是绑定的,可以想像一下当家里的电脑坏掉或是换了张网卡,这时候就使得MAC不一样,但依然能够使用原本电信服务商分配的IP来上网。之所以要提到MAC,也是因为这环节是要收集Live host的资讯,需要透过MAC来判断是否是同一目标主机。
而提到IP与MAC之间的关系,就不得不提到ARP
了,ARP是利用乙太网路的广播功能所设计出来的位址解析协定,它的主要特性是它的位址对应关系是动态的,以查询的方式来获得IP与MAC之间的对应关系。
arp
+ ping
,後者在先前文章就提过了,所以先讲讲arp
,前言有提到ARP本身是一个协定,但Linux也有个同名arp
的命令工具,其作用就是检视目前arp cache里IP跟MAC关系的纪录。观察当前cache
arp -a
删除cache里指定host的纪录
arp -d 192.168.1.1
删除後如果重新ping该host,就能够重新透过ARP协定再次取得该host的IP与MAC的对应关系,如果透过wireshark
抓包工具去观察,甚至能看到ARP询问的过程。
而回到arping
,这个指令能够像目标主机发送arp请求,具体使用方式如下,指定网路介面向目标发送请求
arping -I eth0 10.0.2.2
从结果能看到有回覆并且带有目标主机的MAC资讯
ARPING 10.0.2.2
60 bytes from 52:54:00:12:35:02 (10.0.2.2): index=0 time=252.753 usec
60 bytes from 52:54:00:12:35:02 (10.0.2.2): index=1 time=212.884 usec
60 bytes from 52:54:00:12:35:02 (10.0.2.2): index=2 time=431.741 usec
或是透过shell脚本,去找出区网内的主机,要特别注意因为使用了&
将arping执行的process以背景执行,所以建议给定-w
参数来指定请求的次数,不然arping的预设行为是会不间断的发出请求,脚本就没有结束的时候,而grep是用来筛选我们想看到的内容,因为我关注的只有实际有回覆的主机跟其MAC资讯,而不在意最後ping值的统计,因此只滤出from
字串的结果,而最後的wait
是用来确认所有背景执行的process都结束。
#!/bin/bash
for ip in 192.168.1.{1..254}; do
arping -I eth0 -w 1 -f $ip | grep from &
done
wait
执行结果会像
60 bytes from 52:54:00:12:35:01 (192.168.1.1): index=0 time=252.753 usec
60 bytes from 52:54:00:12:35:02 (192.168.1.12): index=0 time=212.884 usec
常用的用法可以是列举式
fping 192.168.1.1 192.168.1.2
或是测试一整个网段
fping -g 192.168.1.0/24
结果会像是
192.168.1.1 is alive
ICMP Host Unreachable from 192.168.1.70 for ICMP Echo sent to 192.168.1.2
192.168.1.2 is unreachable
或是加入其他参数
-a
只显示alive结果
-r 0
不retry
-q
quiet不显示每次ping的结果
-s
产生最後报表
fping -a -r 0 -q -g 192.168.1.0/24 -s 1 ⨯
192.168.1.1
192.168.1.70
192.168.1.66
254 targets
3 alive
251 unreachable
0 unknown addresses
251 timeouts (waiting for response)
254 ICMP Echos sent
3 ICMP Echo Replies received
128 other ICMP received
0.683 ms (min round trip time)
50.2 ms (avg round trip time)
142 ms (max round trip time)
4.673 sec (elapsed real time)
hping3
有点像是终极加强版的ping,因为他除了可以发常见的ICMP封包之外,可以按需求去发送TCP或是UDP的封包。常用用法-1
来发送ICMP封包,同ping的功用
hping3 -1 192.168.1.1
或是
--traceroute
来追踪中间会经过的站点,等同於使用另一个网路工具traceroute
-V
开启verbose来看到更多过程资讯
hping3 --traceroute -V -1 www.example.com
追踪的结果
using eth0, addr: 10.0.2.15, MTU: 1500
HPING www.example.com (eth0 93.184.216.34): icmp mode set, 28 headers + 0 data bytes
hop=1 TTL 0 during transit from ip=10.0.2.2 name=UNKNOWN
hop=1 hoprtt=7.9 ms
hop=2 TTL 0 during transit from ip=192.168.1.1 name=m.home
hop=2 hoprtt=25.6 ms
针对目标的port从78开始,递增去测3次,所以测试范围就是 78, 79, 80 三个port
hping3 -S www.example.com -p ++78 -c 3
因为目标这个范围内只有开启80 port,所以只有一个回应
1 ⨯
HPING www.example.com (eth0 93.184.216.34): S set, 40 headers + 0 data bytes
len=46 ip=93.184.216.34 ttl=64 id=1512 sport=80 flags=SA seq=2 win=65535 rtt=263.8 ms
也可以透过-8
使用扫描模式
hping3 -8 78-80 -S www.example.com
扫描结果跟上面一样只有80 port有开启
Scanning www.example.com (93.184.216.34), port 78-80
3 ports to scan, use -V to see all the replies
+----+-----------+---------+---+-----+-----+-----+
|port| serv name | flags |ttl| id | win | len |
+----+-----------+---------+---+-----+-----+-----+
80 http : .S..A... 64 59909 65535 46
All replies received. Done.
Not responding ports: (78 ) (79 finger)
hping3实在是太强大了,还有很多进阶功能可以玩,但今天就先探索到这里。
今天体验的工具的用法都满简单暴力的,但背後的原理真的很值得探究,包含了网路七层模型,加上ARP以及ICMP在模型里是以什麽样的流程在不同的层级里发挥他们的作用,感觉都可以再额外延伸好几篇文章来。
<<: [Day6] 自我必备沟通力:Content & Context
我们先来创建一个资料夹来放我们的档案们吧 首先打开我们的VSCode,一样打开终端机(Ctrl + ...
Chap.I 理论基础 Part 2:微积分 1. Rate of Change 速度变化率 imp...
只要再撑过这一天,就只要写结语就可以达成30天的目标了。 本来已经快想不到可以写甚麽了,那就来拿Li...
今天时间不太够,纯粹整理 @minw 助教分享的切版教学里面我自己觉得最最重要的部分,其他可能还需要...
人类的世界有许多的工厂, 将原料送入後就会变成商品, C#的世界里也是, 方法就像一间间的工厂一样,...