Подтвердить что ты не робот

Как получить "имя модели" для сетевого устройства (возможно, используя Bonjour)?

Apple Finder.app может последовательно определять точную модель каждого физического компьютера, использующего bonjour (о чем свидетельствуют уникальные значки для каждого типа отдельных устройств: iMac, MacPro, MBP и т.д.). Как они это делают и какие API-интерфейсы они используют?

В бонусной заметке Bonjour предоставляет имя, тип сервиса, домен и порт для всех служб в сети, но я не смог найти информацию о том, как найти модель устройства.

4b9b3361

Ответ 1

Я считаю, что это использует _device-info._tcp. mDNS для IP-адреса. Вы можете это увидеть сами. В терминале вы можете использовать dig @224.0.0.251 -p5353 для выполнения запросов mDNS. Вы можете использовать dig @224.0.0.251 -p5353 Foo.local. для разрешения IP-адреса компьютера Foo.local. Возьмите этот IP-адрес и вставьте его обратно в dig @224.0.0.251 -p5353 -x $IP, и вы увидите следующее:

> dig @224.0.0.251 -p5353 -x 10.0.1.1
; <<>> DiG 9.6.0-APPLE-P2 <<>> @224.0.0.251 -p5353 -x 10.0.1.1
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22887
;; flags: qr aa; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; QUESTION SECTION:
;1.0.0.10.in-addr.arpa.     IN  PTR

;; ANSWER SECTION:
1.0.0.10.in-addr.arpa.  10  IN  PTR Foo.local.

;; ADDITIONAL SECTION:
Foo._device-info._tcp.local. 10 IN TXT  "model=MacBookPro5,3"

;; Query time: 4 msec
;; SERVER: 10.0.0.1#5353(224.0.0.251)
;; WHEN: Mon Nov 29 18:00:23 2010
;; MSG SIZE  rcvd: 131

Обратите внимание на ДОПОЛНИТЕЛЬНУЮ СЕКЦИЮ.

К сожалению, я не знаю, как получить эту информацию с помощью API Bonjour.

Изменить. Вы также можете получить эту информацию в одном запросе с помощью dig @224.0.0.251 -p5353 Foo._device-info._tcp.local. TXT.

Ответ 2

OSX передает эту информацию, если на этом компьютере запущены определенные сетевые службы. Насколько мне известно, это _afpovertcp, _rfb и _airport (только для маршрутизатора в аэропорту). Вы ищете услугу bonjour под названием _device-info._tcp. Проблема в том, что она не появляется через простой

[someNSNetServiceBrowserInstance searchForServicesOfType:@"_services._dns-sd._udp." inDomain:@""];

Вместо этого вам нужно начать мониторинг определенного хоста, который, по вашему мнению, может транслировать _device-info._tcp.

NSNetService *aNetService = [[NSNetService alloc]initWithDomain:@"" type:@"_device-info._tcp." name:@"MyFancyIMacWithAFPOn"];
    [aNetService setDelegate:self];
    [aNetService startMonitoring];

Внедрить обратный вызов

- (void)netService:(NSNetService *)sender didUpdateTXTRecordData:(NSData *)data

Что даст вам строку deviceModel.