sys*_*138 44
如果您出于某种原因不愿进行操作系统指纹识别,则可以进行更有针对性的端口扫描:
nmap -p 9100,515,631 192.168.1.1/24 -oX printers.xml
Run Code Online (Sandbox Code Playgroud)
这将扫描打印机和打印系统的通用端口。
输出为 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//'
nmap -网络扫描。( Nmap.org )
-p 515,631,9100
扫描 TCP 端口 515、631 和 9100。-oG -
使用 grep-able 输出格式。-sU -p 161
扫描 UDP 端口 161。gawk或awk -处理面向列的文本数据。默认情况下,空格将行分隔为列。(维基百科)
gawk '/regexp/'
使用带有 gawk 的 regulair 表达式来过滤掉与此 regulair 表达式匹配的行。gawk '{<code>}'
使用 awk 类似 C 的输入语言来操作输出。gawk '{/open/print $2}'
搜索匹配“open”的行并打印第二列。xarg -从给定的输入构建和执行命令。默认情况下,空格将行分隔为参数。(维基百科)
--delimiter='\n'
每个新行(\n)而不是空格分隔参数。--replace=$ipaddress
对于每一行,将参数存储到$ipaddress 中。snmpget或snmpwalk -使用 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 机器上使用此链来获取这些命令。
最简单的方法是使用以下命令进行扫描nmap -O
:nmap 通常会根据操作系统正确确定机器是否为打印机。
nmap -O 192.168.1.1/24 -oG - | grep printer >> outfile
Run Code Online (Sandbox Code Playgroud)
应该让它每行一个条目并将其转储到一个名为“outfile”的文件中。显然将 ip 范围更改为您正在扫描的任何范围