使用 Nmap 查找打印机

Nik*_*asS 33 networking

使用 nmap 在我的网络中查找打印机的最佳方法是什么?是否可以将打印机 ip 保存到文件中?

sys*_*138 44

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

nmap -p 9100,515,631 192.168.1.1/24 -oX printers.xml
Run Code Online (Sandbox Code Playgroud)

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

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

输出为 XML。


小智 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-able 输出格式。
  • -sU -p 161 扫描 UDP 端口 161。

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

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

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

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

snmpgetsnmpwalk -使用 SNMP GET 请求查询有关网络实体的信息。net-snmp.org维基百科上关于 SNMP 的更多信息)

  • -c public 将社区字符串设置为公共。
  • -v 1 将 SNMP 版本设置为 1。
  • -O v 不要打印 OID。
  • system.sysDescr.0要查询的变量。此特定变量的描述“实体的文本描述。该值应包括系统硬件类型、软件操作系统和网络软件的全名和版本标识。必须仅包含可打印的 ASCII 字符。 ”

sed -解析和转换文本。维基百科

  • 's/day/night/' 在一行中找到字符串 day 的第一次出现,并将其替换为 night。
  • 's/STRING:\s//'找到STRING:\s并将其替换为空。这将从输入中删除STRING:\s\s代表空格。

涉及到一些 UNIX 支持的命令。我个人使用 Cygwin 在 Windows 机器上使用此链来获取这些命令。

  • 在 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//'` (3认同)

Sat*_*ppy 5

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

nmap -O 192.168.1.1/24 -oG - | grep printer >> outfile
Run Code Online (Sandbox Code Playgroud)

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