Answers:
如果出于某种原因不愿进行操作系统指纹识别,则可以进行更有针对性的端口扫描:
nmap -p 9100,515,631 192.168.1.1/24 -oX printers.xml
它将扫描打印机和打印系统通用的端口。
输出为XML。
此答复直接回答您的第一个问题。对于第二个问题,了解该命令将使您还将打印机IP地址放入文件中。所以我们开始:
nmap -p 515,631,9100 -oG - 10.81.129.0/24 | gawk '/open/{print $2}' | xargs --delimiter='\n' nmap -sU -p 161 -oG - | gawk '/open/{print $2}' | xargs --replace=$ipaddress snmpget -v 1 -O v -c public $ipaddress system.sysDescr.0 | sed 's/STRING:\s//'
NMAP - 网络扫描。(Nmap.org)
-p 515,631,9100
扫描以查找TCP端口515、631和9100。-oG -
使用可grep输出格式。-sU -p 161
扫描UDP端口161。GAWK或AWK - 过程面向列的文本数据。默认情况下,空格将行分成几列。(维基百科)
gawk '/regexp/'
将regulair表达式与gawk一起使用以过滤出匹配此regulair表达式的行。gawk '{<code>}'
使用类似awk C的输入语言来操纵输出。gawk '{/open/print $2}'
搜索与“ open”匹配的行并打印第二列。xarg - 建立,并给定输入执行命令。默认情况下,空格将行分隔为参数。(维基百科)
--delimiter='\n'
每新行(\ n)分开一个参数,而不是空格。--replace=$ipaddress
对于每一行,将参数存储到$ ipaddress中。SNMPGET或snmpwalk的 - 使用SNMP GET请求查询的网络实体的信息。(net-snmp.org,有关Wikipedia上 SNMP的更多信息)
-c public
将社区字符串设置为public。-v 1
将SNMP版本设置为1。-O v
不要打印OID。system.sysDescr.0
要查询的变量。这个特定变量的描述:“实体的文本描述。该值应包括系统硬件类型,软件操作系统和网络软件的全名和版本标识。必须仅包含可打印的ASCII字符。 ”sed的 - 解析和转换文本。(维基百科)
's/day/night/'
查找一行中第一个出现的字符串日,并将其替换为夜。's/STRING:\s//'
找到STRING:\ s,然后将其替换为任何内容。这将从输入中删除STRING:\ s。\ s代表空格。涉及一些UNIX支持的命令。我个人使用Cygwin在Windows机器上使此链工作,以获取这些命令。
nmap -p 515,631,9100 -oG - 192.168.100.0/24 | gawk '/open/{print $2}' | xargs --delimiter='\n' nmap -sU -p 161 -oG - | gawk '/open/{print $2}' | xargs -I{} sh -c 'echo {} ; snmpget -v 1 -O v -c public {} system.sysDescr.0' | sed 's/STRING:\s//'