Разбор результата аваи-просмотра - PullRequest
1 голос
/ 09 мая 2019

Мне нужно проанализировать результат просмотра avahi для получения некоторой информации в PHP. Я НЕ основываю это на "разборе" просмотра Avahi (-p), так как это кажется более сложным для анализа, чем на разборе, если я не ошибаюсь.

Поскольку я могу ограничить просмотр определенными типами, я думаю, что мне нужно только извлечь IP: порт и имя устройства из строк. Предпочитаю IPV4. В примере нет IPV6, но некоторые поиски есть, но я думаю, что всегда будет IPV4, верно? Возможно, безопасно использовать только IPV4.

+ wlp61s0 IPv6 Canon MG5700 series                           _uscan._tcp          local
+ wlp61s0 IPv4 Canon MG5700 series                           _uscan._tcp          local

= wlp61s0 IPv6 Canon MG5700 series                           _uscan._tcp          local
hostname = [ED122D000000.local]
address = [192.168.0.252]
port = [80]
txt = ["duplex=F" "is=platen" "cs=grayscale,color" "rs=eSCL" "representation=http://ED122D000000.local./icon/printer_icon.png" "vers=2.5" "UUID=00000000-0000-1000-8000-00BBC1ED122D" "adminurl=http://ED122D000000.local./index.html?page=PAGE_AAP" "note=Rich's office" "pdl=image/jpeg,application/pdf" "ty=Canon MG5700 series" "txtvers=1"]
= wlp61s0 IPv4 Canon MG5700 series                           _uscan._tcp          local
hostname = [ED122D000000.local]
address = [192.168.0.252]
port = [80]
txt = ["duplex=F" "is=platen" "cs=grayscale,color" "rs=eSCL" "representation=http://ED122D000000.local./icon/printer_icon.png" "vers=2.5" "UUID=00000000-0000-1000-8000-00BBC1ED122D" "adminurl=http://ED122D000000.local./index.html?page=PAGE_AAP" "note=Rich's office" "pdl=image/jpeg,application/pdf" "ty=Canon MG5700 series" "txtvers=1"]

редактировать -------------------------------- @ Мартн Цетлер: да, это работает в первоначально опубликованной строке, но не в этой. Кроме того, как рекомендовано для другого автора, порядок меняется, поэтому использование формата синтаксического анализа без дескрипторов будет ненадежным.

+   eth0 IPv6 HP LaserJet MFP M130nw (Bonjour)              _uscan._tcp          local
+   eth0 IPv4 HP LaserJet MFP M130nw (Bonjour)              _uscan._tcp          local
=   eth0 IPv6 HP LaserJet MFP M130nw (Bonjour)              _uscan._tcp          local    
hostname = [NPIA9BA52.local]
address = [192.168.1.2]
port = [8080]
txt = ["note=Vallarta" "duplex=F" "is=platen" "cs=color,grayscale" "pdl=application/pdf,image/jpeg" "uuid=564e4234-4430-3737-3739-c8d3ffa9ba52" "rs=eSCL" "representation=http://NPIA9BA52.local/ipp/images/printer.png" "vers=2.5" "usb_MDL=HP LaserJet MFP M129-M134" "usb_MFG=HP" "mdl=LaserJet MFP M129-M134" "mfg=HP" "ty=HP LaserJet MFP M129-M134" "adminurl=http://NPIA9BA52.local." "txtvers=1"]
=   eth0 IPv4 HP LaserJet MFP M130nw (Bonjour)              _uscan._tcp          local
hostname = [NPIA9BA52.local]
address = [192.168.1.2]
port = [8080]
txt = ["note=Vallarta" "duplex=F" "is=platen" "cs=color,grayscale" "pdl=application/pdf,image/jpeg" "uuid=564e4234-4430-3737-3739-c8d3ffa9ba52" "rs=eSCL" "representation=http://NPIA9BA52.local/ipp/images/printer.png" "vers=2.5" "usb_MDL=HP LaserJet MFP M129-M134" "usb_MFG=HP" "mdl=LaserJet MFP M129-M134" "mfg=HP" "ty=HP LaserJet MFP M129-M134" "adminurl=http://NPIA9BA52.local." "txtvers=1"]

1 Ответ

0 голосов
/ 09 мая 2019

Как и шаблон регулярного выражения, он должен работать как резак печенья:

<code>$subject = ...                           
$pattern = '^=\s\w+\sIPv4\s(.*)\s+_uscan\._tcp\s+\w+\nhostname\s=\s\[(.*)\]\naddress\s=\s\[(.*)\]\nport\s=\s\[(.*)\]\ntxt\s=\s\[(.*)\]\n$';
if (preg_match($pattern, $subject, $matches)) {
    die('<pre>'.print_r($matches, true).'
');}

в /etc/avahi/avahi-daemon.conf вы можете отключить IPv6 с помощью use-ipv6=no.

...