Linux shell求助
背景介绍:最近有很多主机端口要探测是否开启,然后最近刚好又学了shell语言.想练习一下.我的代码实现思路是用nmap -p port ip命令
然后查看把执行结果的返回值去用awk搜索端口数据,拿到端口检测的那一行数据,然后拼接字符串ip加 哪行端口的返回值写入到文本中
Nmap scan report for 192.168.248.254
Host is up (0.00019s latency).
PORT STATE SERVICE
22/tcp filtered ssh <<<<<<<根据端口号匹配获取这一行数值
MAC Address: 00:50:56:E1:AB:A5 (VMware)
shell代码如下:
#!/bin/bash
while read aaa
do
ip=$(echo $aaa|awk '{print $1}')
port=$(echo $aaa|awk '{print $2}')
ip_arr=$ip
port_arr=$port
done < ret.txt
for((i=0;i<=${#ip_arr[@]};i++))
do
{
port=${port_arr[$i]}
echo "ip 是" ${ip_arr[$i]} "port是" ${port_arr[$i]}
nmap -p ${port_arr[$i]}${ip_arr[$i]}|awk -v port=${port_arr[$i]} '/port/'
} &
done
查看执行过程就是倒数第三行这个-v port数字没有传入到/port/里,想请教下 这个port因为是个数字怎么可以传入进去呢?
或者以上代码要怎么改造呢
学perl吧,学啥shell? xiaomm250 发表于 2022-4-29 13:46
学perl吧,学啥shell?
底层才是最稳的.哈哈 主要平时还可以拿来熟悉命令 #!/bin/bash
OLD_IFS= $IFS
IFS=$'\n'
for raw in $(cat ret.txt)
do
ip=$(echo ${raw} | awk -F ' ' '{print $1}')
port=$(echo ${raw} | awk -F ' ' '{print $2}')
echo "Ip: ${ip} ---- Port: ${port}"
done 你可以参考下这个呢。
# more ret.txt
192.168.102.132 22
192.168.102.132 222
# ./scan.sh
IP: 192.168.102.132 ,port: 22 ,端口检测结果为: open
IP: 192.168.102.132 ,port: 222 ,端口检测结果为: closed
#!/bin/bash
while read line
do
str=$line
array_ret=(${str// / }) #以空格作为分隔符,将str分割成IP和port
ip=${array_ret}
port=${array_ret}
res=$(nmap -p $port $ip) #使用nmap探测端口,将结果返回给res
cont_first=${res#*SERVICE}#取res里面SERVICE字符串的右边内容
cont_second=${cont_first%Nmap*} #取cont_first里面Nmap字符串的左边内容
array_cont=(${cont_second// / }) #以空格作为分隔符,取出端口状态
echo "IP:" $ip ",port:" $port ",端口检测结果为:" ${array_cont}
done < ret.txt
mmaaiiooo 发表于 2022-4-29 17:08
你可以参考下这个呢。
# more ret.txt
192.168.102.132 22
感谢大佬,我研究一下 流月汐志 发表于 2022-4-29 15:15
#!/bin/bash
OLD_IFS= $IFS
我从文本分隔ip 和 port是第一步,然后还要吧他们传入nmap中去的.
而且你这步我已经完成了 xiadongming 发表于 2022-4-29 22:50
再多定义一个变量,,
就是-v变量死活传不进去.哎 sxfxtf 发表于 2022-4-29 20:23
我从文本分隔ip 和 port是第一步,然后还要吧他们传入nmap中去的.
而且你这步我已经完成了
你试试我这个就知道了,能不能传进去
页:
[1]
2