Я пытаюсь создать скрипт для получения всех IP-адресов беспроводных принтеров в сети. Проблема в том, что я не уверен, с чего начать. Я заглянул в CUPS, но каждый документ или учебное пособие только доходит до командной строки, прежде чем перейти к использованию веб-интерфейса, они никогда не упоминают, как найти IP с помощью используя только CLI, есть идеи?
2 ответа
В соответствии с этим потоком вопросов и ответов на «Unix & Linux Stack Exchange» вы можете получить список установленных принтеров только через lpstat -s
или используя его с sudo
(sudo lpstat -s
) для получения полного пути к устройству. Или, может быть, с помощью nmap -A
?
Все, что сказано, возможно использование arp
с grep
и sed
соединенными вместе с pipe (|
), может работать так:
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
должен быть настроен на «printers» или «print»; Я не знаю точно. Это в основном идеи для мозгового штурма, которые, надеюсь, помогут вам решить эту проблему или, по крайней мере, направят вас в правильном направлении.
Как насчет lpinfo (нужно установить CUPS)
(используя Perl здесь, чтобы отфильтровать другие вещи)
смотрите здесь
$ sudo lpinfo -l -v | perl -ne 'print if /^Device: uri = socket:/ .. /info/'
Устройство: uri = socket://192.168.0.3
класс = сеть
информация = серия Officejet J6400
Устройство: uri = сокет://192.168.0.5: 9100
класс = сеть
информация = HP Officejet Pro 8610