如何获取已安装网络打印机的 IP

keb*_*ebs 16 printing ip

我已经在我的 Ubuntu 14.04 机器上使用system-config-printer. 这个 GUI 程序提供了“查找网络打印机”功能,可以探索本地网络。它返回与 IP 地址关联的打印机名称列表。

所以假设我选择一个并成功安装它。

现在过了一会儿,我意识到我安装的打印机是错误的。所以我再次执行该过程,然后……哦等等,有几台相同类型(和名称)的打印机具有不同的 IP 地址!

好的,没问题,让我们检查一下我刚安装的那个的IP,这样我就不会再安装错误的了。所以问题是:如何获取已安装打印机的 IP?

显然,“属性”对话框(下面的示例)不允许访问此信息(不,它没有隐藏在 URI 行中)。

通过使用 CUPS 网络服务器也没有成功http://localhost:631,这似乎基本上是获取相同信息的另一种方式。

编辑:问题与下面的打印机无关,但更笼统:由于操作系统能够在网络探索步骤获取打印机的 IP,我假设信息存储在某处。它存储在哪里以及如何访问它?或者它可能没有存储在任何地方?

打印机属性对话框

tre*_*esf 13

扩展上面@JUH的解决方案......

avahi-browse --all -t -r
Run Code Online (Sandbox Code Playgroud)

是自动发现打印机的正确解决方案。

不幸的是,许多打印机根本不会以任何可用的形式向您(最终用户)公开其 IP 地址。这是设计使然。https://www.cups.org/doc/network.html

大多数网络打印机支持称为 Bonjour 的协议,它是由互联网工程任务组 (IETF) 发布的零配置网络 ( ZeroConf)、多播 DNS ( mDNS) 和 DNS 服务发现 ( DNS-SD) 标准的组合,该组织定义了TCP/IP 和我们今天使用的所有网络

引用 mDNS 页面:

当 mDNS 客户端需要解析主机名时,它会发送一个 IP 多播查询消息,要求具有该名称的主机标识自己。然后该目标机器多播一条包含其 IP 地址的消息。然后该子网中的所有机器都可以使用该信息来更新它们的 mDNS 缓存。任何主机都可以通过发送生存时间 ( TTL) 为零的响应数据包来放弃其对名称的要求。

因此,要正确找到 mDNS 打印机的 IP 地址,您需要一个能够读取缓存的工具。

引用 OP 的评论之一:

谢谢。就我而言,lpoptions确实显示了很多信息,但没有显示 IP。相关字段看起来像device-uri=hp:/net/hp_LaserJet_2420?zc=HP2420ROOMXXX,所以再次与我从 GUI 工具中得到的相同。所以我假设IP没有存储在我的机器中......

这是avahi-browse完成这项工作的最佳工具......(或者,如果您来这里寻找 Mac 实用程序,Apple 提供了一个名为dns-sd

引用 Avahi 页面:

Avahi 是一个通过 mDNS/DNS-SD 协议套件促进本地网络上服务发现的系统。这使您可以将笔记本电脑或计算机连接到网络,并立即能够查看可以与之聊天的其他人、查找要打印的打印机或查找正在共享的文件。在 Apple MacOS X(品牌为“Bonjour”,有时为“Zeroconf”)中发现了兼容技术。

Avahi 主要针对 Linux 系统,并在大多数发行版中默认提供。在这个阶段它没有移植到 Windows,但可以在许多其他类似 BSD 的系统上运行。主要 API 是 D-Bus 并且是大多数 Avahi 使用所必需的,但是可以使用放置在/etc/avahi/services.

另请参阅该nss-mdns项目,该项目允许使用 nsswitch 在所有系统程序中通过 mDNS 查找 *.local 主机名


A.B*_*.B. 11

使用 lpoptions

lpoptions  -p <printer_name> | awk '{for (i=1; i<=NF; i++) {if ($i ~ /device-uri/) {print $i}}}'
Run Code Online (Sandbox Code Playgroud)

例子

$ lpoptions  -p TOSHIBA_e-STUDIO2330C | awk '{for (i=1; i<=NF; i++) {if ($i ~ /device-uri/) {print $i}}}'
device-uri=socket://192.168.20.43
Run Code Online (Sandbox Code Playgroud)

获取概览 lpinfo

例子

$ lpinfo -v | grep -P '://'
network dnssd://HP%20LaserJet%201022n._pdl-datastream._tcp.local/
network dnssd://TOSHIBA%20e-STUDIO2540C-07279076._printer._tcp.local/
network socket://192.168.20.201
network socket://192.168.20.203
network socket://192.168.20.204
network socket://192.168.20.205
network socket://192.168.20.206
network socket://192.168.20.207
network socket://192.168.20.43
Run Code Online (Sandbox Code Playgroud)

或者 nmap

nmap -sT <adress_or_address_range>
Run Code Online (Sandbox Code Playgroud)

并grep服务 printer

例子

$ nmap -sT 192.168.20.43

Starting Nmap 6.47 ( http://nmap.org ) at 2015-07-03 08:38 CEST
Nmap scan report for 192.168.20.43
Host is up (0.0017s latency).
Not shown: 991 closed ports
PORT     STATE SERVICE
21/tcp   open  ftp
25/tcp   open  smtp
80/tcp   open  http
139/tcp  open  netbios-ssn
445/tcp  open  microsoft-ds
515/tcp  open  printer
631/tcp  open  ipp
8080/tcp open  http-proxy
9100/tcp open  jetdirect
Run Code Online (Sandbox Code Playgroud)


chi*_*555 7

根据 HP Laserjet 2400 系列用户指南,IP 地址可在打印机本身的控制面板上找到。

在此处输入图片说明


小智 6

lpstat -s
Run Code Online (Sandbox Code Playgroud)

有时它不必很复杂。

  • 谢谢,但是……不(对我来说)。它仅显示如何访问打印机:协议和 URI,例如“dnssd://HP%20ENVY%205XXXX”。但是,它清楚地表明 IP 未存储以及如何到达设备。 (2认同)

Rid*_*his 5

查看arp-scan命令(类似于ip neigh)。您可能必须安装它:

sudo apt-get install arp-scan
Run Code Online (Sandbox Code Playgroud)

并提供进一步的细节:

sudo arp-scan --interface=eth0 --localnet
Run Code Online (Sandbox Code Playgroud)

其中 eth0 是您的设备(或 wlan0 或 wlp2s0)。您可以使用ifconfig或找到您的设备:

ip -c addr
Run Code Online (Sandbox Code Playgroud)

或者尝试安装nmap( sudo apt-get install nmap) 并键入 nmap192.168.1.0/24替换192.168.1IP 地址的前三部分(使用 查找ip addr)。


小智 5

有点晚了,但这可能会有所帮助。

avahi-browse --all -t -r