使用nmap在networking中查找打印机的最佳方法是什么? 是否有可能将打印机的IP保存到一个文件?
如果您因为某种原因不愿意进行操作系统指纹识别,您可以执行更有针对性的端口扫描:
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 – networking扫描。 ( Nmap.org )
-p 515,631,9100
扫描TCP端口-p 515,631,9100
和9100。 -oG -
使用grep-able输出格式。 -sU -p 161
扫描UDP端口161。 gawk或awk – 处理面向列的文本数据。 默认情况下,空格将行分隔成列。 ( 维基百科 )
gawk '/regexp/'
使用regulairexpression式和gawk来过滤符合这个regulairexpression式的行。 gawk '{<code>}'
使用awk类似于C的input语言来操作输出。 gawk '{/open/print $2}'
search匹配“open”的行并打印第二列。 xarg – 从给定的input构build和执行命令。 默认情况下,空格将行分隔为参数。 ( 维基百科 )
--delimiter='\n'
每行换行(\ n)而不是空白。 --replace=$ipaddress
对于每一行,将参数存储到$ ipaddress中 。 snmpget或snmpwalk – 使用SNMP GET请求查询networking实体的信息。 ( net-snmp.org ,更多关于维基百科的 SNMP)
-c public
将社区string设置为public。 -v 1
将SNMP版本设置为1。 -O v
不要打印OID。 system.sysDescr.0
要查询的variables。 该特定variables的描述 : “实体的文本描述,该值应该包括系统硬件types,软件操作系统和networking软件的全名和版本标识,它只能包含可打印的ASCII字符。 “ sed – 分析和转换文本。 ( 维基百科 )
's/day/night/'
查找一行中第一次出现的string,并将其replace为晚上。 's/STRING:\s//'
查找STRING:\ s并将其replace为空白。 这将从input中删除STRING:\ 。 \ s代表一个空格。 有一些UNIX支持的命令。 就我个人而言,我使用Cygwin在Windows机器上完成了这个链接,以获得这些命令。
最简单的方法是使用nmap -O
:nmap进行扫描,通常可以根据操作系统正确地确定机器是否为打印机。
nmap -O 192.168.1.1/24 -oG - | grep printer >> outfile
应该使它每行一个条目,并将其转储到一个名为“outfile”的文件。 显然,将ip范围更改为您正在扫描的任何范围