linux - Bash - 获取端口 ID 的脚本

标签 linux bash awk

我正在尝试编写一个 bash 脚本,它将获取我从 nmap 命令检索到的端口 ID,然后使用这些端口使用 netcat 发送文件。所以我使用此链接获得了一些基本知识,

https://superuser.com/questions/590038/how-can-i-use-a-bash-script-to-run-nmap-and-capture-both-ip-and-hostname

和 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/

相关文章:

java - 在linux中执行dos2unix命令后执行jar文件抛出错误

linux - 如何将两次查找的结果用于单个 xargs

linux - 执行 awk 时出现意外的换行错误

linux - 将 shell 变量传递给系统用户

regex - 通过 bash/sed/awk 快速递归搜索和替换大量文件 - 这可能吗?

bash - 正则表达式解析字符串以提取shell脚本中的数字

linux - 标记音频和 ogg

linux - 如何使用 GCC/LD 设置 RPATH 和 RUNPATH?

bash - bash脚本中比较运算符设置的退出状态

linux - 基于两列在awk中增加变量