sxfxtf 发表于 2022-4-29 13:00

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因为是个数字怎么可以传入进去呢?
或者以上代码要怎么改造呢

xiaomm250 发表于 2022-4-29 13:46

学perl吧,学啥shell?

sxfxtf 发表于 2022-4-29 14:51

xiaomm250 发表于 2022-4-29 13:46
学perl吧,学啥shell?

底层才是最稳的.哈哈 主要平时还可以拿来熟悉命令

流月汐志 发表于 2022-4-29 15:15

#!/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

mmaaiiooo 发表于 2022-4-29 17:08

你可以参考下这个呢。
# 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

sxfxtf 发表于 2022-4-29 20:22

mmaaiiooo 发表于 2022-4-29 17:08
你可以参考下这个呢。
# more ret.txt
192.168.102.132 22


感谢大佬,我研究一下

sxfxtf 发表于 2022-4-29 20:23

流月汐志 发表于 2022-4-29 15:15
#!/bin/bash

OLD_IFS= $IFS


我从文本分隔ip 和 port是第一步,然后还要吧他们传入nmap中去的.
而且你这步我已经完成了

xiadongming 发表于 2022-4-29 22:50

sxfxtf 发表于 2022-4-29 23:01

xiadongming 发表于 2022-4-29 22:50
再多定义一个变量,,

就是-v变量死活传不进去.哎

流月汐志 发表于 2022-4-30 19:45

sxfxtf 发表于 2022-4-29 20:23
我从文本分隔ip 和 port是第一步,然后还要吧他们传入nmap中去的.
而且你这步我已经完成了

你试试我这个就知道了,能不能传进去
页: [1] 2
查看完整版本: Linux shell求助