
Я пытаюсь создать скрипт для получения всех IP-адресов беспроводных принтеров в сети. Проблема в том, что я не уверен, с чего начать. Я изучал CUPS, но каждый документ или руководство заходит только до определенной степени с командной строкой, прежде чем перейти к использованию веб-интерфейса, они никогда не упоминают, как найти IP, используя только CLI, есть идеи?
решение1
Согласно этомуТема вопросов и ответов на «Unix & Linux Stack Exchange»список установленных принтеров можно получить только черезlpstat -s
или используя его с sudo
( sudo lpstat -s
), чтобы получить полный путь к устройству. Или, может быть, используяnmap -A
?
Все сказанное, возможно, используяarp
сgrep
иsed
соединенные вместе с помощью труб ( |
), могут работать следующим образом:
arp -a | grep Printer | awk '{ print $2 }' | sed 's/[()]//g'
Эта команда выглядит следующим образом:
arp -a
покажет вам весь ARP-трафик.grep Printer
проанализируетarp -a
вывод на наличие строк, содержащихPrinter
в имени.awk '{ print $2 }'
захватывает IP-адрес, но с круглыми скобками ((
/)
).sed 's/[()]//g'
затем очищает IP-адрес, удаляя скобки.
Тем не менее, у меня нет простого способа проверить эту концепцию на моей локальной установке — поскольку у меня даже нет ни одного Wi-Fi-принтера в моей сети — но я предполагаю, что это сработает. Возможно, аргумент grep
следует скорректировать до «принтеров» или, может быть, «печати»; я не знаю наверняка. Это в основном идеи мозгового штурма, которые, как я надеюсь, помогут вам справиться с этой проблемой или, по крайней мере, направят вас на правильный путь.
решение2
А как насчет lpinfo (нужен установленный CUPS)
(используя Perl здесь, чтобы отфильтровать остальное)
см.здесь
$ sudo lpinfo -l -v | perl -ne 'print if /^Device: uri = socket:/ .. /info/'
Устройство: uri = socket://192.168.0.3
класс = сетевая
информация = Officejet серии J6400
Устройство: uri = socket://192.168.0.5:9100
класс = сетевая
информация = HP Officejet Pro 8610