Bash - 获取端口ID的脚本

时间:2015-03-04 22:29:05

标签: 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。

1 个答案:

答案 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调用中的复杂引用。