我正在尝试编写一个bash脚本,它将从nmap命令中获取端口ID,然后使用这些端口使用netcat发送文件。所以我使用这个链接获得了一些基本知识,
和nmap手册页。结果我想出了以下脚本:
#! /bin/bash
FILE="input.txt"
sudo nmap -p1-20000 -sS 192.168.122.35 -oG - | awk '$4=="Status:" && $5=="Up" {cat $FILE | nc $2 $6}'
所以我遇到的问题与6美元有关。它假设是从nmap命令检索的端口号,但它实际上什么都没有。我想知道你们是否能够帮我找回端口ID。
答案 0 :(得分:1)
Awk是一种单独的语言,你只能在外部命令中使用。
一个简单的解决方法是使用Awk的system
函数:
awk -v FILE="$FILE" '$4=="Status:" && $5=="Up" {
system("nc " $2 " " $6 "<\"" FILE "\"")}'
(另请注意避免useless cat
的重构,以及将awk作为变量显示为shell FILE
变量的赋值。)
但也许更有意义的是将它重新转换为一个shell脚本,而awk只是一个简单的帮手:
#! /bin/bash
FILE="input.txt"
sudo nmap -p1-20000 -sS 192.168.122.35 -oG - |
awk '$4=="Status:" && $5=="Up" { print $2, $6 }' |
while read host port; do
nc "$host" "$port" <"$FILE"
done
这也避免了system
调用中的复杂引用。