如何以编程方式从iOS应用程序获取Airprint打印机的序列号或Mac地址

时间:2015-12-16 22:22:17

标签: ios printing airprint

我在iOS应用中实现了打印功能。我的iPad在同一个Wi-Fi上连接到AirPrint打印机。在给出打印命令之前,是否可以在iOS应用程序中获取打印机的序列号或Mac地址?

1 个答案:

答案 0 :(得分:0)

您可以使用两阶段方法:

  1. 使用标准的Bonjour方法查询打印机的IP地址。
  2. 使用arp
  3. 查找打印机的MAC地址

    我无法为您提供代码...但命令行实用程序dns-sd将用于演示第一步。

    无论此命令行可以返回给您什么信息,dns-sd库API也可以这样做。有关详情,请参阅 /usr/include/dns_sd.h ....

    以下概述了第一阶段要遵循的步骤。

    1a上。

    假设您要查找域dns-sd.org.中所有支持AirPrint的设备的实例名称...

    然后你会使用:

    dns-sd  -B  _ipp._tcp.,_universal dns-sd.org.
    
      Browsing for _ipp._tcp.,_universal.dns-sd.org.
      DATE: ---Sat 02 Jul 2016---
      14:20:07.190  ...STARTING...
      Timestamp     A/R  Flags if Domain       Service Type  Instance Name
      14:20:07.626  Add      2  0 dns-sd.org.  _ipp._tcp.    Stuart's Home AirPrint Printer
      ^C
    

    (请注意,_universal后缀[请求AirPrint子集]到_ipp._tcp.的标准查询,该查询请求所有支持IPP的通用打印设备的列表......)

    您现在找到了一个名为“Stuart's Home AirPrint Printer”的实例。

    1b中。

    您现在可以查询托管服务实例的网络节点的主机名“Stuart的Home AirPrint打印机”

    dns-sd  -L  "Stuart's Home AirPrint Printer"  _ipp._tcp.  dns-sd.org.
    
      Lookup Stuart's Home AirPrint Printer._ipp._tcp..dns-sd.org.
      DATE: ---Sat 02 Jul 2016---
      14:37:44.436  ...STARTING...
      14:37:44.813  Stuart's\032Home\032AirPrint\032Printer._ipp._tcp.dns-sd.org. can be reached at airprint.dns-sd.org.:631 (interface 0)
         txtvers=1                                             \
         qtotal=1                                              \
         pdl=application/postscript,application/vnd.hp-PCL,application/vnd.hp-PCLXL,application/pdf,image/urf \
         rp=ipp/printer                                        \
         URF=CP99,W8,OB10,PQ3-4-5,ADOBERGB24,DEVRGB24,DEVW8,SRGB24,IS1-2-4,MT1-2-3-5-12,MT1-2-3-5-12,RS600 \
         ty=HP\ LaserJet\ 400\ color\ M451nw                   \
         product=\(HP\ LaserJet\ 400\ color\ M451nw\)          \
         priority=10                                           \
         adminurl=http://www.dns-sd.org/ServerStaticSetup.html \
         note=At\ Stuart\'s\ house                             \
         Color=T                                               \
         Duplex=F                                              \
         Scan=F
      ^C
    

    注意“......行可以通过airprint.dns-sd.org.:631”联系到。这将为您提供所需的主机名。

    1c上。

    您现在可以要求托管此AirPrint实例的IP地址(IPv4和IPv6):

    dns-sd -Gv4v6 airprint.dns-sd.org. 
    
      DATE: ---Sat 02 Jul 2016---
      14:19:12.040  ...STARTING...
      Timestamp     A/R Flags if Hostname               Address                                   TTL
      14:19:12.426  Add     2  0 airprint.dns-sd.org.   50.197.138.101                            75
      14:19:12.544  Add     2  0 airprint.dns-sd.org.   0000:0000:0000:0000:0000:0000:0000:0000%  77   No Such Record
      ^C
    

    所以这个AirPrinter确实有一个IPv4( 50.197.138.101 )但没有IPv6地址。

    2

    要查找相应的MAC地址,只需使用ARP。