使用Nmap查找打印机


Answers:


37

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

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

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

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

输出为XML。


您的回答非常有帮助!
瑞安·特尼

这对我没有用。
Martin Thoma 2014年

9

此答复直接回答您的第一个问题。对于第二个问题,了解该命令将使您还将打印机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//'

进度解析

  1. 它扫描网络以搜索在默认打印机端口上监听的网络实体。
  2. 使用上一步的结果,它将检查这些设备上的SNMP支持。
  3. 对于具有SNMP支持的每个设备,它都会向网络实体查询设备说明。

命令细目

NMAP - 网络扫描。Nmap.org

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

GAWKAWK - 过程面向列的文本数据。默认情况下,空格将行分成几列。维基百科

  • gawk '/regexp/' 将regulair表达式与gawk一起使用以过滤出匹配此regulair表达式的行。
  • gawk '{<code>}' 使用类似awk C的输入语言来操纵输出。
  • gawk '{/open/print $2}' 搜索与“ open”匹配的行并打印第二列。

xarg - 建立,并给定输入执行命令。默认情况下,空格将行分隔为参数。维基百科

  • --delimiter='\n' 每新行(\ n)分开一个参数,而不是空格。
  • --replace=$ipaddress对于每一行,将参数存储到$ ipaddress中

SNMPGETsnmpwalk的 - 使用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机器上使此链工作,以获取这些命令。


2
在Linux中,我使用以下变体来显示IP和SNMP系统字符串。'--replace = $ ipaddress'在我的环境中不起作用: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//'
NoelProf

@NoelProf的版本在CentOS 6中可以很好地工作。可以改进的一件事是UDP扫描部分。我尝试了整个过程,但是有些打印机没有发现。特别是当他们在VPN后面时。我认为这是因为如果它们在UDP端口161上应答,我们只会测试一次。但是UDP可能会在途中丢失。最好多次检查它。
masgo

5

最简单的方法是nmap -O:使用nmap 进行扫描通常可以根据操作系统正确确定机器是否是打印机。

nmap -O 192.168.1.1/24 -oG - | grep printer >> outfile

应该将其设为每行一个条目,并将其转储到名为“ outfile”的文件中。显然将ip范围更改为要扫描的任何范围

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.