Linux下脚本编写局域网扫描工具

简介: Linux下脚本编写局域网扫描工具

1、要求

获得整个局域网里哪些ip地址在使用,哪些没在用,同时显示在使用的ip地址对应的mac地址。写到文件里:

up.txt 保存正在使用的ip以及对应的mac地址。

down.txt:保存没有正在使用的ip地址。

2、需求分析:

①ping命令

②arp缓存表:记录ip对应的mac地址。

③网段:192.168.2.0/24 2.1~2.254

④for循环。

⑤扩展知识点:

arp -n:查看arp缓存表

arp:地址解析协议:address resolution protocol ,是将ip解析成对应的mac地址。

[root@nginx-kafka01 network-scripts]# arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
192.168.2.1              ether   a4:1a:3a:38:8d:29   C                     ens33
192.168.2.123            ether   04:d3:b0:f6:91:7c   C                     ens33

ping 是测试网络是否畅通的工具

ping 192.168.2.1 -c 4:表示只能发送4个数据包。

-c 发包的次数 count

[-w deadline] 多少时间内必须完成 期限

[-W timeout] 超过多少时间就停止 超时

[-i interval] 包和包之间的时间间隔 间隔

3、代码实现

#基础版的

[root@nginx-kafka01 shell]# cat scan_lan.sh
#!/bin/bash
#清空文件
>up.txt
>down.txt
#循环ping整个局域网里的ip地址
for i in {1..10}
do
 #使用ping命令去测试这个ip地址是否使用,使用多个子进程去执行ping命令,提升并发的效果
#如果能ping通,说明$?返回值为0,写到up.txt 如果不通,就写到down.txt文件里
  if ping -c 1  -W 1  192.168.2.$i  &>/dev/null ;then
    echo "192.168.2.$i is up"
    echo "192.168.2.$i" >>up.txt
  else
    echo "192.168.2.$i is down"
    echo "192.168.2.$i" >>down.txt
  fi
done

测试:

[root@nginx-kafka01 shell]# bash scan_lan_bak.sh 
192.168.2.1 is up
192.168.2.2 is down
192.168.2.3 is down
192.168.2.4 is down
192.168.2.5 is down
......
[root@nginx-kafka01 shell]# cat up.txt
192.168.2.1
[root@nginx-kafka01 shell]# cat down.txt
192.168.2.2
192.168.2.3
192.168.2.4
192.168.2.5
192.168.2.6
.......

脚本优化:

1、速度提升,时间减少

2、资源消耗

串行:顺序执行

并行;同时进行

多进程和多线程

并发:在一段时间内一起执行,例如:1分钟内。

[root@nginx-kafka01 shell]# echo $$  #父进程
8228
[root@nginx-kafka01 shell]# bash scan_lan.sh  #子进程
9516

子进程和父进程和孙子进程的原理:多进程和多线程

扩展知识点:

arping命令可以同时得到ip和对应的mac地址

也可以用来判断某个ip地址是否和其他冲突。

[root@nginx-kafka01 shell]# arping -I ens33 192.168.2.1 -c 1
ARPING 192.168.2.1 from 192.168.2.152 ens33
Unicast reply from 192.168.2.1 [A4:1A:3A:38:8D:29]  7.604ms
Sent 1 probes (1 broadcast(s))
Received 1 response(s)
[root@nginx-kafka01 shell]# arping -I ens33 192.168.2.1 -c 1|egrep Unicast
Unicast reply from 192.168.2.1 [A4:1A:3A:38:8D:29]  6.659ms
[root@nginx-kafka01 shell]# arp -n|grep ether
192.168.2.115            ether   e8:d0:fc:dd:03:19   C                     ens33
192.168.2.108            ether   98:2c:bc:cb:1f:ba   C                     ens33
192.168.2.230            ether   00:0c:29:ea:ac:65   C                     ens33
......
[root@nginx-kafka01 shell]# time bash scan_lan.sh
9700
192.168.0.1 is used
192.168.0.6 is unused
192.168.0.7 is unused
..........
real  0m1.039s
user  0m0.015s
sys 0m0.031s

优化之后的脚本文件:

[root@nginx-kafka01 shell]# cat scan_lan_bak_bak.sh 
#!/bin/bash
#清空文件
>up.txt
>down.txt
#查看当前子bash的pid号
echo $$
num=$(echo $$)
#查看过滤出当前子bash的父进程号
pstree -p |egrep $num
#循环ping整个局域网里的ip地址
for i in {1..254}
do
    #启动多进程去ping,提升效率,启动子进程放到后台去执行
    (if ping -c 1  -W 1  192.168.2.$i  &>/dev/null ;then
        echo "192.168.2.$i is up"
    else
        echo "192.168.2.$i is down"
        echo "192.168.2.$i" >>down.txt
    
    fi)&
done
#等待子进程结束,然后再退出
wait
#将arp缓存表里的记录保存到up.txt
arp -n|awk '/ether/{print $1,$3}' >up.txt

里面加上()&:表示将()里面的内容放在后台去执行。

相关文章
|
22天前
|
Linux Shell
在Linux、CentOS7中设置shell脚本开机自启动服务
以上就是在CentOS 7中设置shell脚本开机自启动服务的全部步骤。希望这个指南能帮助你更好地管理你的Linux系统。
88 25
|
1月前
|
安全 Linux
阿里云linux服务器使用脚本通过安全组屏蔽异常海外访问ip
公网网站可能会遭受黑客攻击导致访问异常,使用此脚本可以屏蔽掉异常IP 恢复访问。也可自行设置定时任务定期检测屏蔽。
153 28
|
2月前
|
自然语言处理 数据库 iOS开发
DBeaver Ultimate Edtion 25.0 Multilingual (macOS, Linux, Windows) - 通用数据库工具
DBeaver Ultimate Edtion 25.0 Multilingual (macOS, Linux, Windows) - 通用数据库工具
140 12
DBeaver Ultimate Edtion 25.0 Multilingual (macOS, Linux, Windows) - 通用数据库工具
|
1月前
|
运维 安全 Linux
试试Linux设备命令行运维工具——Wowkey
WowKey 是一款专为 Linux 设备设计的命令行运维工具,提供自动化、批量化、标准化的运维解决方案。它简单易用、高效集成且无依赖,仅需 WIS 指令剧本文件、APT 账号密码文件和 wowkey 命令即可操作。通过分离鉴权与执行过程,WowKey 让运维人员专注于决策,摆脱繁琐的交互与执行工作,大幅提升运维效率与质量。无论是健康检查、数据采集还是配置更新,WowKey 都能助您轻松应对大规模设备运维挑战。立即从官方资源了解更多信息:https://atsight.top/training。
|
1月前
|
数据采集 运维 安全
Linux设备命令行运维工具WowKey问答
WowKey 是一款用于 Linux 设备运维的工具,可通过命令行手动或自动执行指令剧本,实现批量、标准化操作,如健康检查、数据采集、配置更新等。它简单易用,只需编写 WIS 指令剧本和 APT 帐号密码表文件,学习成本极低。支持不同流派的 Linux 系统,如 RHEL、Debian、SUSE 等,只要使用通用 Shell 命令即可通吃Linux设备。
|
3月前
|
人工智能 Linux iOS开发
Burp Suite Professional 2025.2 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
Burp Suite Professional 2025.2 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
127 12
Burp Suite Professional 2025.2 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
|
3月前
|
Shell Linux
【linux】Shell脚本中basename和dirname的详细用法教程
本文详细介绍了Linux Shell脚本中 `basename`和 `dirname`命令的用法,包括去除路径信息、去除后缀、批量处理文件名和路径等。同时,通过文件备份和日志文件分离的实践应用,展示了这两个命令在实际脚本中的应用场景。希望本文能帮助您更好地理解和应用 `basename`和 `dirname`命令,提高Shell脚本编写的效率和灵活性。
176 32
|
3月前
|
监控 安全 Ubuntu
Linux下如何安装配置Fail2ban防护工具
通过以上步骤,可以在Linux系统中成功安装和配置Fail2ban,从而有效保护服务器免受暴力破解等攻击。Fail2ban通过实时监控日志文件,自动更新防火墙规则,为系统安全提供了一层重要的保护。
437 36
|
3月前
|
存储 Linux 网络安全
linux应急响应检查脚本
通过这个脚本,可以快速收集系统的关键信息,有助于在发生问题时进行及时的应急响应和分析。
155 34
|
3月前
|
Linux API
Linux下载工具wget与curl
`wget` 是一个用于从网络下载文件的命令行工具,支持HTTP、HTTPS和FTP协议。它能自动处理下载中断,并支持递归下载网站内容。基本用法:`wget URL`,可指定文件名(`-O`)、保存目录(`-P`),还支持断点续传(`-c`)、限速(`--limit-rate`)和递归下载(`-r`)。相比之下,`curl` 更侧重于发送各种HTTP请求(如GET、POST),并支持文件上传、自定义请求头和cookie等功能。
98 10