使用Nmap查找打印机

使用nmap在networking中查找打印机的最佳方法是什么? 是否有可能将打印机的IP保存到一个文件?

如果您因为某种原因不愿意进行操作系统指纹识别,您可以执行更有针对性的端口扫描:

nmap -p 9100,515,631 192.168.1.1/24 -oX printers.xml 

这将扫描打印机和打印系统的通用端口。

  • 9100 =大多数打印机的RAW端口,也称为直接IP端口
  • 515 = LPR / LPD端口,适用于大多数打印机以及较旧的打印服务器
  • 631 =大多数现代打印机的IPP端口和基于CUPS的打印服务器

输出是以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//'

stream程说明

  1. 它会扫描networkingsearch正在默认打印机端口上侦听的networking实体。
  2. 使用上一步的结果,它将检查这些设备上的SNMP支持。
  3. 对于具有SNMP支持的每个设备,它向networking实体查询设备描述。

命令分解

nmapnetworking扫描。 ( Nmap.org )

  • -p 515,631,9100扫描TCP端口-p 515,631,9100和9100。
  • -oG -使用grep-able输出格式。
  • -sU -p 161扫描UDP端口161。

gawkawk处理面向列的文本数据。 默认情况下,空格将行分隔成列。 ( 维基百科 )

  • 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中

snmpgetsnmpwalk使用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范围更改为您正在扫描的任何范围