如何显示主机上运行的所有服务和版本?

如何显示主机上运行的所有服务和版本?

我正在尝试显示使用端口 1 到 1023 的主机上运行的所有服务及其版本,方式如下:

ssh, OpenSSH 5.9p1 Debian 5ubuntu1 (protocol 2.0)
smtp, Postfix smtpd
http, Apache httpd 2.2.22 ((Ubuntu))
rpcbind
imap, Courier Imapd (released 2011)
ssl/imap, Courier Imapd (released 2011)

我知道如何显示它们但不知道如何按照上述格式显示:

nmap -p 1-1023 -sV 主机

后续编辑:

我设法只显示服务而没有任何多余的无用文本:

nmap -p 1-1023 -sV host | head -n -5 | tail -n +7

输出:

8/tcp   open  http       BitTornado tracker T-0.3.18
21/tcp  open  ftp        vsftpd 2.3.5
22/tcp  open  ssh        OpenSSH 5.9p1 Debian 5ubuntu1 (protocol 2.0)
23/tcp  open  telnet     Linux telnetd
25/tcp  open  smtp       Postfix smtpd
80/tcp  open  http       Apache httpd 2.2.22 ((Ubuntu))
111/tcp open  rpcbind
143/tcp open  imap       Courier Imapd (released 2011)
158/tcp open  ssh        OpenSSH 5.9p1 Debian 5ubuntu1.1 (protocol 2.0)
165/tcp open  ssh        OpenSSH 5.9p1 Debian 5ubuntu1.1 (protocol 2.0)
177/tcp open  ftp        vsftpd 2.3.5
210/tcp open  ssh        OpenSSH 5.9p1 Debian 5ubuntu1.1 (protocol 2.0)
993/tcp open  ssl/imaps?

现在我真的很好奇如何才能摆脱前两列。

答案1

这个肯定有效,刚刚测试过,它正是你想要的:

nmap -p 1-1023 -sV host | head -n -5 | tail -n +7 | awk '{print substr($0, index($0, $3))}'

index找到第 3 列并返回其位置,substring然后在整行中标记该位置$0。然后将所有这些发送到print显示它的位置。awk 中的默认字段分隔符是空格(空格、TAB、换行符),因此无需使用 -F 开关。

相关内容