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

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

相关文章
|
1月前
|
Linux 网络安全 数据安全/隐私保护
Linux 超级强大的十六进制 dump 工具:XXD 命令,我教你应该如何使用!
在 Linux 系统中,xxd 命令是一个强大的十六进制 dump 工具,可以将文件或数据以十六进制和 ASCII 字符形式显示,帮助用户深入了解和分析数据。本文详细介绍了 xxd 命令的基本用法、高级功能及实际应用案例,包括查看文件内容、指定输出格式、写入文件、数据比较、数据提取、数据转换和数据加密解密等。通过掌握这些技巧,用户可以更高效地处理各种数据问题。
110 8
|
3天前
|
消息中间件 Java Kafka
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
本文介绍了Kafka集群的搭建过程,涵盖从虚拟机安装到集群测试的详细步骤。首先规划了集群架构,包括三台Kafka Broker节点,并说明了分布式环境下的服务进程配置。接着,通过VMware导入模板机并克隆出三台虚拟机(kafka-broker1、kafka-broker2、kafka-broker3),分别设置IP地址和主机名。随后,依次安装JDK、ZooKeeper和Kafka,并配置相应的环境变量与启动脚本,确保各组件能正常运行。最后,通过编写启停脚本简化集群的操作流程,并对集群进行测试,验证其功能完整性。整个过程强调了自动化脚本的应用,提高了部署效率。
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
|
2月前
|
监控 Java Linux
Linux系统之安装Ward服务器监控工具
【10月更文挑战第17天】Linux系统之安装Ward服务器监控工具
68 5
Linux系统之安装Ward服务器监控工具
|
2月前
|
JSON JavaScript Linux
Linux系统之安装cook菜谱工具
【10月更文挑战第15天】Linux系统之安装cook菜谱工具
46 2
Linux系统之安装cook菜谱工具
|
1月前
|
Ubuntu Linux Shell
Linux 系统中的代码类型或脚本类型内容
在 Linux 系统中,代码类型多样,包括 Shell 脚本、配置文件、网络配置、命令行工具和 Cron 定时任务。这些代码类型广泛应用于系统管理、自动化操作、网络配置和定期任务,掌握它们能显著提高系统管理和开发的效率。
|
1月前
|
缓存 监控 Linux
Linux性能分析利器:全面掌握perf工具
【10月更文挑战第18天】 在Linux系统中,性能分析是确保软件运行效率的关键步骤。`perf`工具,作为Linux内核自带的性能分析工具,为开发者提供了强大的性能监控和分析能力。本文将全面介绍`perf`工具的使用,帮助你成为性能优化的高手。
157 1
|
1月前
|
缓存 监控 Linux
掌握Linux性能分析:深入探索perf工具
【10月更文挑战第26天】
71 1
|
1月前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
2月前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
81 1
|
2月前
|
网络协议 安全 Linux
Linux中无法连接互联网或局域网
【10月更文挑战第5天】
362 3