Bash 从nmap中提取特定模式
假设我有这样的nmap结果:Bash 从nmap中提取特定模式,bash,awk,sed,grep,cut,Bash,Awk,Sed,Grep,Cut,假设我有这样的nmap结果: # Nmap 6.40 scan initiated Sat Jun 14 10:14:35 2014 as: nmap ... Nmap scan report for x.x.x.x. Host is up (0.21s latency). PORT STATE SERVICE 23/tcp open telnet | telnet-brute: |_ No accounts found Nmap scan report for y.y.y.y Ho
# Nmap 6.40 scan initiated Sat Jun 14 10:14:35 2014 as: nmap ...
Nmap scan report for x.x.x.x.
Host is up (0.21s latency).
PORT STATE SERVICE
23/tcp open telnet
| telnet-brute:
|_ No accounts found
Nmap scan report for y.y.y.y
Host is up (0.24s latency).
PORT STATE SERVICE
23/tcp open telnet
Nmap scan report for z.z.z.z
Host is up (0.22s latency).
PORT STATE SERVICE
23/tcp open telnet
|_telnet-brute: var1 - <blank>
Nmap scan report for w.w.w.w
Host is up (0.36s latency).
PORT STATE SERVICE
23/tcp open telnet
|_telnet-brute: var2 - var3
Nmap scan report for h.h.h.h
Host is up (0.22s latency).
PORT STATE SERVICE
23/tcp open telnet
| telnet-brute:
|_ No accounts found
Nmap scan report for f.f.f.f
Host is up (0.22s latency).
PORT STATE SERVICE
23/tcp open telnet
|_telnet-brute: var4 - <blank>
Nmap scan report for b.b.b.b
Host is up (0.23s latency).
PORT STATE SERVICE
23/tcp open telnet
| telnet-brute:
|_ No accounts found
.
.
.
Nmap scan report for a.a.a.a
Host is up (0.22s latency).
PORT STATE SERVICE
23/tcp open telnet
# Nmap done at Sun Jun 15 10:20:45 2014 -- 262144 IP addresses (91295 hosts up) scanned in 86769.85 seconds
我想知道,如果有,那就不要显示出来。(最好使用sed
)
更新
我尝试的是:
sed -nr '/^Nmap.* /{s///;h};/|_telnet-brute/{n;H;g;s/\n\|\s*/ /;/:/p}' file
谢谢您的数据不一致(您有
|u telnet
和|telnet
),但这可能会给您带来一些:
nmap ..... | awk -v RS="" '{print $5,$18,$20}'
但换言之,在进一步处理之前调整输出。您的数据不一致(您有
|u telnet
和|telnet
),但这可能会给您一些:
nmap ..... | awk -v RS="" '{print $5,$18,$20}'
但也就是说,在进一步处理之前调整输出。以及通过
grep
使用Perl regex
选项的输出
$ grep -oP "\w\.\w\.\w\.\w|(?<=brute:).*" file | paste - -
x.x.x.x var1 - <blank>
y.y.y.y var2 - var3
z.z.z.z
$grep-oP“\w\.\w\.\w\.\w |”(?和通过grep
使用Perl regex
选项
$ grep -oP "\w\.\w\.\w\.\w|(?<=brute:).*" file | paste - -
x.x.x.x var1 - <blank>
y.y.y.y var2 - var3
z.z.z.z
$grep-oP“\w\.\w\.\w\.\w |”(?我会在Perl中这样做:
$ perl -lne '/for (.+)/; $i=$1; (@f = /var./g) && print "$i @f"' file
z.z.z.z var1
w.w.w.w var2 var3
f.f.f.f var4
解释
perl-lne
:-ne
表示“逐行读取输入文件”(-n
),并应用作为-e
”给出的脚本。-l
为每个打印调用添加一个新行(并删除尾随的新行)
/for(+)/;$i=$1;
:匹配单词for
,后跟空格并捕获(括号就是这样做的)行尾的所有内容。捕获的模式($1
)保存为$i
@f=/var./g
:保存数组@f
中出现的所有var
和多个字符。如果var
后面可以有>1个字符,请将其更改为@f=/var\w*/g
&打印“$i@f”
:如果上一次匹配成功,则打印$i
(IP)和@f
的内容
我会用Perl来做这件事:
$ perl -lne '/for (.+)/; $i=$1; (@f = /var./g) && print "$i @f"' file
z.z.z.z var1
w.w.w.w var2 var3
f.f.f.f var4
解释
perl-lne
:-ne
表示“逐行读取输入文件”(-n
),并应用作为-e
”给出的脚本。-l
为每个打印调用添加一个新行(并删除尾随的新行)
/for(+)/;$i=$1;
:匹配单词for
,后跟空格并捕获(括号就是这样做的)行尾的所有内容。捕获的模式($1
)保存为$i
@f=/var./g
:保存数组@f
中出现的所有var
和多个字符。如果var
后面可以有>1个字符,请将其更改为@f=/var\w*/g
&打印“$i@f”
:如果上一次匹配成功,则打印$i
(IP)和@f
的内容
nmap支持不同的处理方式。您可能会发现更适合您的处理方式。谢谢@Gumbo的帮助…但我想用文本编辑器实现这一点…nmap支持不同的处理方式。您可能会发现更适合您的处理方式。谢谢@Gumbo的帮助…但我想用文本编辑器实现这一点…我只使用|u telnet
linesI a我只使用|u telnet
linesHow来拒绝像z.z.z
这样的行?如果您不想使用第三行grep-oP”\w\。\w\。\w\。\w|(?谢谢…但这并没有显示ip…我不知道根据您的示例发布了什么。发布nmap日志文件内容,我将为您尝试。关于ip,您的正则表达式应该是[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}
如何拒绝像z.z.z.z
这样的行?如果你不想要第三行grep-oP“\w\.\w\.\w\.\w |”(?谢谢你…但这不是给我显示ip…我不知道根据你的示例发布了什么。发布nmap日志文件内容,我会为你尝试。关于ip,你的正则表达式应该是[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}
$ perl -lne '/for (.+)/; $i=$1; (@f = /var./g) && print "$i @f"' file
z.z.z.z var1
w.w.w.w var2 var3
f.f.f.f var4