- 目的:
- 内容:
- 相关知识点:
- 实验分析:
- 实验过程:
- 部署FTP服务
- 1)安装FTP服务
- 2)查看FTP服务
- 3)启动FTP服务
- 4)关闭FTP服务
- 收集MAC地址
- 1)修改主机名
- 2)探测单台主机MAC信息
- 3)筛选探测结果
- 3)创建并编写脚本文件
- 4)执行脚本文件
- 5)查看搜集结果
- 检测FTP服务
- 1)创建并编辑脚本文件
- 2)安装nmap命令工具
- 3)监控单台主机
- 4)监控局域网主机
- 5)运行脚本文件
- 6)查看监控结果
掌握FTP服务器的按照
掌握FTP服务器的配置与管理
掌握shell脚本基本语句的编写
掌握if语句的应用
掌握for语句的应用
掌握重定向输出的应用
掌握脚本语句的执行方式
内容: 使用Shell脚本对局域网中的所有主机进行MAC地址的收集,便于日常的维护管理。同时对局域网中部署FTP服务的主机进行监控,能够快速得知哪台具有FTP的主机在提供服务。下图该局域网的拓扑图。
图 局域网拓扑
实现MAC地址收集和FTP服务监控具体操作内容如下:
1)部署FTP服务器
使用dnf命令安装FTP服务,配置基本的ftp参数,对FTP服务进行启动、重启、关闭操作。
2)收集MAC地址
创建Shell脚本文件,编写如下过程:首先创建MAC地址的存储文件,然后使用arping命令,根据IP地址探测局域网中的主机获取对应的信息记录,应用grep命令、sed命令、awk命令对信息记录进行筛选,最后将筛选后的信息通过重定向命令输出到指定的文件中。
3)检测FTP服务
创建Shell脚本文件,编写如下过程:首先创建端口存储文件,然后使用nmap命令根据IP地址检测21号端口的状态,最后根据状态信息通过重定向名输出到指定的文件中。
· 使用dnf命令安装FTP服务
· 使用systemctl命令管理FTP服务·使用touch命令创建文件
· 使用chmod命令修改文件权限·使用if语句进行条件判断
· 使用for语句进行循环遍历
· 使用重定向命令将数据输出到文件。应用sh命令执行脚本文件
1)部署FTP服务器·使用dnf命令安装FTP
· 使用vim命令对FTP配置文件进行设置·使用systemctl start命令启动FTP服务·使用systemctl stop命令关闭FTP服务
· 使用systemctl status命令查看FTP服务运行状态2)收集MAC地址
· 使用vim、hostname、su命令修改监控机主机名·使用arping命令探测主机MAC
· 使用grep、sed、awk命令筛选探测结果·使用vim命令创建并编写脚本文件
· 使用touch命令创建收集MAC文件
· 使用重定向命令输出筛选信息到收集MAC的文件·使用cat命令查看收集MAC文件的内容
3)检测FTP服务
· 使用vim命令创建并编写脚本文件·使用touch命令创建存储检测结果文件·使用dnf命令安装nmap软件包
· 使用nmap命令对IP的端口扫描·编写对局域网全部主机检测脚本·执行检测脚本
· 使用cat命令查看检测结果文件
FTP服务器需要部署在非监控的主机上,使用dnf命令进行FTP的安装。在Linux中提供FTP服务的是vsftpd软件,命令实现如下:
安装FTP服务指令
dnf install vsftpd2)查看FTP服务
使用systemctl status命令查看FTP服务是否启动,具体的命令如下:
查询FTP服务状态
systemctl status vsftpd
由上述结果“Active: inactive (dead)”显示,当前的FTP服务处于停止状态。
3)启动FTP服务 使用systemctl start命令启动FTP服务,并应用systemctl status命令查看当前状态,命令实现如下:
启动FTP服务并查看状态
systemctl start vsftpd systemctl status vsftpd
命令执行完毕,从上述结果“Active: active (running)”得知,ftp服务启动成功。
4)关闭FTP服务使用systemctl stop命令关闭FTP服务,并使用systemctl status命令查看FTP服务状态,命令实现如下:
关闭FTP服务,并查看状态
systemctl stop vsftpd systemctl status vsftpd
命令执行完毕,从上述结果“Active: inactive (dead)”得知,FTP服务关闭成功,关闭后再次执行启动FTP服务命令保持服务在打开状态。
收集MAC地址 使用脚本收集MAC地址,首先在脚本文件中创建MAC地址的存储文件,然后使用arping命令在局域网中根据IP地址进行探测,接着应用筛选工具对探测的结果进行处理,最后将处理后的结果使用重定向命令输出到MAC地址的存储文件中。
1)修改主机名 为了在实验过程中区别于被测试机器,对监控主机的主机名进行修改,为了能够永久性修改主机名和当前显示为修改后的主机名,要对主机名存放文件“/etc/hostname”进行修改,同时使用hostname命令修改当前显示的主机名。
现使用vim命令修改主机名文件内容为“monitor",命令实现如下:
修改/etc/hostname文件
vim /etc/hostname
输入完毕后,按下“ESC”键退出INSERT模式。输入“:wq”后回车退出编辑并保存文件。
使用hostname命令修改当前的主机名为“monitor",并使用su命令使新主机名生效,命令实现如下:
修改当前主机名,并使其生效
hostname monitor su -
命令执行完毕后,通过返回信息发现系统已经使用新的主机名。
2)探测单台主机MAC信息 为保证后面批量探测的可靠性,先对单台主机进行探测实验。使用arping命令结合参数-c、–w、-l,三个参数的介绍如下:
· -c:发送包的数量;
· -w:最长等待时间,单位为秒;
· -l:指定arping测试的网卡设备。
使用ifconfig命令查看本机IP,IP地址中的第三位代表网段,当第三位为1时,可以对192.168.1.1主机进行测试,命令语句为arping -c 2 -w 1-l eth0 192.168.1.1;如果第三位为2时,可以对192.168.2.1主机进行测试,命令语句为arping -c 2 -w 1 -l eth0 192.168.2.1。
针对局域网中的其他主机进行测试,例如IP为172.16.40.208,命令为:arping -c 2 -w 1 -l ech0 172.16.40.208(以下arping主机探测命令根据实际环境的IP,改用192.168.1.1 或 192.168.2.1即可)
使用ifconfig查看本地IP
arping -c 2 -w 1 -I eth0 172.16.40.210
如果显示,发送两个探测包,接受0个探测包,则表示探测失败,其原因为两台服务器可能不在同─网段,可以使用其他同学的相同网段服务器进行测试(使用ifconfig命令查看本机IP,IP地址中的第三位代表网段,网段地址第三位相同则表示网段)。
我的IP为3段,所以使用192.168.3.235
arping -c 2 -w 1 -I eth0 192.168.3.2353)筛选探测结果
虽然通过arping命令能够将目标主机的MAC信息获取过来,但是这些信息并不是最终需要的结果,最终的结果应是单纯的IP地址和MAC地址的对应。所以,需要对探测的结果信息进行筛选处理。
现在逐步对探测结果进行处理,首先使用grep命令结合“”正则表达式,该“”表示匹配其后的字符串。过滤掉首尾无用信息,只选取具有“Unicast”字符串的行,操作的对象依旧是IP为172.16.40.208的主机,命令实现如下(实际环境中把相应的IP地址进行替换即可)∶
过滤掉首尾无用信息
arping -c 2 -w 1 -I eth0 192.168.3.235 | grep "^Unicast"
命令执行完毕,相对于上次结果,已经过滤掉了首尾的信息,只保留了具有IP和MAC地址的信息行。
现在在现有的结果的基础上做进一步的筛选,使用sed命令结合正则表达式删除结果行中的“[”,命令实现如下(实际环境中把相应的IP地址进行替换即可):
删除结果行中 “[”
arping -c 2 -w 1 -I eth0 192.168.3.235 | grep "^Unicast" | sed -n "s/[//p"
命令语句sed -n "sN[//p"中,用-n参数只显示匹配的行,后面的表达式表示用空字符代替“[”,并输出。
再使用sed命令删除结果行中的“]”,命令实现如下(实际环境中把相应的IP地址进行替换即可):
arping -c 2 -w 1 -I eth0 192.168.3.235 | grep "^Unicast" | sed -n "s/[//p" | sed -n "s/]//p"
命令语句sed -n "s/]//p"中,用-n参数只显示匹配的行,后面的表达式表示用空字符代替“]”,并输出。
结果显示,所有的行都去掉了“[”和“]”。
最后使用awk命令,筛选出只有IP和MAC地址的结果行,命令实现如下(实际环境中把相应的IP地址进行替换即可)∶
筛选出只有IP和MAC地址结果行
arping -c 2 -w 1 -I eth0 192.168.3.235 | grep "^Unicast" | sed -n "s/[//p" | sed -n "s/\]//p" | awk '{print $4,$5}'
命令语句awk '{print $4,$5 }中$4和$5分别表示结果行的第四列和第五列。结果显示,结果行中只有IP和MAC地址。
3)创建并编写脚本文件 现在使用vim命令创建名为getmac.sh的脚本文件,编写脚本内容为:在/usr目录下创建搜集MAC结果的存储文件mac。如果该目录下已有该名称的文件,则先将该文件进行备份为mac.bak,然后再创建mac文件,那么就要用到if条件判断语句判断该mac文件是否存在。命令实现如下:
创建并编辑getmac.sh脚本文件
vim getmac.sh
打开getmac.sh脚本后,点击i进入编辑模式,ctrl+insert为复制内容,shift+insert为粘贴内容,esc键为退出编辑状态,在退出编辑状态中输入“: wq”并回车则保存并退出vim编辑器。
getmac.sh脚本内容
#! /bin/bash if [ ! -f /usr/mac ] then touch /usr/mac else mov /usr/mac /usr/mac.bak touch /usr/mac fi
输入完毕后,按下“ESC”键退出INSERT模式。输入“:wq”后回车退出编辑并保存文件。
接下来需要对局域网中所有的主机进行探测,将探测的结果筛选后重定向输出到mac文件中。对每台探测的主机重复进行前面所做的一系列的筛选操作,就需要用到循环语句。
在本实验中,该局域网中共有254台主机(依据自己实验环境而定),那么对于确定的数目,可以使用for循环语句进行操作,扫描的范围越大所需要的时间越长,此处便于演示,将扫描范围改为1~5,仅演示效果。使用vim命令再次对getmac.sh脚本文件进行编辑,命令实现如下.
在实验环境中,如果自己主机的IP地址的第三位为1,下面脚本文件中用192.168.1替换掉172.16.40;如果第三位为2,则用192.168.2替换掉172.16.40
使用vim打开getmac.sh文件
vim getmac.sh
向getmac.sh脚本文件添加全局域网探测脚本
#! /bin/bash
if [ ! -f /usr/mac ]
then
touch /usr/mac
else
mov /usr/mac /usr/mac.bak
touch /usr/mac
fi
for ((j=1;j<=5;j++))
do arping -c 2 -w 1 -I eth0 192.168.3.$j | grep "^Unicast" | sed -n "s/[//p" | sed -n "s/\]//p" | awk '{print $4,$5}' | uniq >> /usr/mac
done
输入完毕后,按下“ESC”键退出INSERT模式。输入“:wq”后回车退出编辑并保存文件。
上述代码中,语句"uniq > > /usr/mac"表示重复的结果只保留一条,然后重定向输出到mac文件中。
脚本文件的执行可以在脚本文件的所在的目录使用"./"后跟文件名的形式,也可以使用sh命令来执行,但首先需要对脚本文件添加可执行权限,命令实现如下:
为getmac.sh脚本添加执行权限,并查看其权限
chmod a+x getmac.sh ll
现在使用sh命令执行脚本文件,命令如下:
执行脚本文件getmac.sh
sh getmac.sh
没有任何错误提示,表明脚本成功执行。
5)查看搜集结果脚本文件执行完毕,使用cat命令查看mac文件中的结果,命令实现如下:
查看文件mac
cat /usr/mac
结果显示已经把整个局域网中在线的主机的MAC地址搜集到mac文件中了。
检测FTP服务 在局域网中,被监控FTP服务的有效主机,首先是处于在线状态的,对于寻找这些主机可以通过上面搜集MAC地址的实验中获取,因为arping探测的主机,有应答响应的才能获取结果,也同时表明,该应答响应的主机是处于在线的。然后,再通过namp命令对每个IP的端口进行探测筛选,将具有FTP服务的主机(开启了21号端口)的IP信息利用重定向命令输出到监控文件中。
首先创建并编写脚本文件,创建存储监控文件,同样也是要使用if语句判断创建的文件是否存在。
使用vim创建脚本文件getmonitor.sh,并编写脚本实现创建存储监控结果的文件monitor,该文件存储在/usr目录下,命令实现如下:
创建并编辑脚本文件
使用vim创建脚本文件getmonitor.sh,并编写脚本实现创建存储监控结果的文件monitor,该文件存储在/usr目录下,命令实现如下:
使用vim创建并打开getmonitor.sh
vim getmonitor.sh
向打开的getmonitor.sh文件中添加以下内容,按“esc”并输入“:wq”,按回车保存并退出。
#! /bin/bash if [ ! -f /usr/monitor ] then touch /usr/monitor else mv /usr/monitor /usr/monitor.bak touch /usr/monitor fi2)安装nmap命令工具
使用dnf命令安装nmap命令工具,操作命令如下:
安装nmap软件包
dnf install nmap3)监控单台主机
使用nmap命令对单台主机进行FTP检测,使用-sT参数与目标所有端口进行三次握手,尝试建立连接,如果某个端口连接成功,则表示端口开启。
使用ifconfig命令查看本机IP,IP地址中的第三位代表网段,当第三位为1时,可以对192.168.1.1主机进行测试,命令语句为nmap -sT 192.168.1.1;如果第三位为2时,可以对192.168.2.1主机进行测试,命令语句为nmap -sT 192.168.2.1。
针对局域网中的其他主机进行测试,例如IP为172.16.40.208,命令为: nmap -sT 172.16.40.208。(以下arping主机探测命令根据实际环境的IP,改用192.168.1.1或192.168.2.1即可。)
检测IP地址为172.16.40.208的主机
nmap -sT 172.16.40.208
在结果中的PORT STATE SERVICE对应的项中,没有21号端口的信息,表示21号端口没有开启。在实验环境中,在跟监控机的IP同一网络的主机上,即IP地址的第三位一样的主机上安装FTP服务,以便实现测试(如另一台机器网段不同,则可以使用其他同学同一网段服务器进行测试)。
现在将IP地址为172.16.40.208的主机上的FTP服务开启并查看状态,命令实现如下。
开启ftp服务并查看状态
systemctl start vsftpd systemctl status vsftpd
现在使用nmap命令再次进行检测,命令实现如下(实际环境中把相应的IP地址进行替换即可)∶
再次检测IP地址为172.16.40.208的主机
nmap -sT 172.16.40.208
由结果“21/tcp open ftp”得知,21号端口开启,FTP服务运行中。
4)监控局域网主机 对局域网内所有主机进行监控,需要使用循环结构对每台主机进行检测。现在脚本文件中编写脚本实现全局域网检测,并使用重定向命令输出到monitor文件中,命令实现如下:
使用vim打开getmonitor.sh
vim getmonitor.sh
向打开的getmonitor.sh文件中添加以下内容,按“esc”并输入“:wq”,按回车保存并退出。
局域网全部主机检测脚本编写
#! /bin/bash
if [ ! -f /usr/monitor ]
then
touch /usr/monitor
else
mv /usr/monitor /usr/monitor.bak
touch /usr/monitor
fi
ipconnection=`awk'{print $1}' /usr/mac`
for i in $ipconnections
do
echo "$i" >> /usr/monitor | nmap -sT $1 | grep "21" >> /usr/monitor
done
5)运行脚本文件
使用chmod命令修改脚本文件getmonitor.sh具有执行的权限,并查看操作结果,命令执行如下:
增加getmonitor.sh文件的执行权限,并查看
chmod a+x getmonitor.sh ll
使用sh命令运行脚本文件getmonitor.sh,命令实现如下:
执行脚本getmonitor.sh
sh getmonitor.sh
没有任何错误提示,表明脚本成功执行。
6)查看监控结果 使用cat命令查看monitor文件,以获知监控结果,命令实现如下:
查看monitor文件
cat /usr/monitor



