我正在尝试编写一个 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。
最佳答案
Awk 是一种独立的语言,您不能直接输入外部命令。
一个简单的解决方法是使用 Awk 的 system
函数:
awk -v FILE="$FILE" '$4=="Status:" && $5=="Up" {
system("nc " $2 " " $6 "<\"" FILE "\"")}'
(还要注意避免 useless cat
的重构,以及使 shell 的 FILE
变量作为变量对 Awk 可见的赋值)。
但也许将其重新滚动到 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
调用中的复杂引用。
关于linux - Bash - 获取端口 ID 的脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28866361/