Este blog é um complemento do nosso canal no YouTube. Clique em @CanalQb para seguir e acompanhar nossos vídeos!

Sugestões de pesquisas

Descubra Impressoras em Rede com Python: Scanner de IP e Modelo

#Python; #Impressoras; #Rede
@CanalQb Python - Descobrindo impressoras em uma range de IP
@CanalQb

Descobrindo Impressoras em Rede com Python

Para realizar a descoberta de impressoras em uma rede local, o Python oferece o módulo socket, que permite fazer uma varredura em intervalos de endereços IP e portas específicas usadas por impressoras. O exemplo a seguir mostra um código básico que busca impressoras no intervalo "192.168.1." na porta padrão 9100, que é a porta comum para impressão via protocolo RAW TCP/IP.

import socket

def scan_printers(ip_range, port):
    for i in range(1, 255):
        ip = ip_range + str(i)
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.settimeout(0.5)
        result = sock.connect_ex((ip, port))
        if result == 0:
            print("Printer found at", ip)
        sock.close()

ip_range = "192.168.1."
port = 9100

scan_printers(ip_range, port)

Nesse código, a função scan_printers percorre todos os endereços IP dentro do intervalo especificado e tenta se conectar à porta 9100. Se a conexão for bem-sucedida (resultado zero), significa que uma impressora provavelmente está ativa naquele IP.

Recuperando o Modelo da Impressora

Além de encontrar impressoras, é possível consultar o modelo do dispositivo enviando um comando PJL (Printer Job Language) específico, que retorna informações de identificação da impressora. Veja a seguir como ampliar o script para obter essa informação:

import socket

def get_printer_info(ip, port):
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.settimeout(1)
    try:
        sock.connect((ip, port))
        sock.send(b'\x1B%-12345X@PJL INFO ID\r\n')
        data = sock.recv(1024)
        sock.close()
        for line in data.splitlines():
            line = line.decode('utf-8')
            if line.startswith('@PJL INFO ID'):
                model = line.split(':')[-1].strip()
                return model
    except Exception:
        return None

def scan_printers(ip_range, port):
    for i in range(1, 255):
        ip = ip_range + str(i)
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.settimeout(0.5)
        result = sock.connect_ex((ip, port))
        if result == 0:
            model = get_printer_info(ip, port)
            if model:
                print("Printer found at", ip, "Model:", model)
            else:
                print("Printer found at", ip)
        sock.close()

ip_range = "192.168.1."
port = 9100

scan_printers(ip_range, port)

O comando enviado é o @PJL INFO ID, que muitos modelos de impressoras suportam para fornecer sua identificação. Caso o modelo não possa ser recuperado, o script exibirá apenas o IP da impressora encontrada.

Varredura em Múltiplos Intervalos de IP

Se sua rede for segmentada em diferentes sub-redes, você pode ajustar o script para verificar vários intervalos de IP. O exemplo abaixo mostra como fazer isso para três ranges comuns:

import socket

ip_ranges = ['10.0.1.', '10.0.2.', '10.140.']
printer_port = 9100

for ip_range in ip_ranges:
    for i in range(1, 255):
        ip_address = ip_range + str(i)
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.settimeout(1)
        result = sock.connect_ex((ip_address, printer_port))
        if result == 0:
            print(f"Impressora encontrada no endereço: {ip_address}")
            try:
                sock.sendall(b'\x1b%-12345X@PJL INFO ID\r\n')
                response = sock.recv(1024)
                model = response.decode().split('\n')[2].split(':')[1].strip()
                print(f"Modelo: {model}")
            except Exception:
                print("Não foi possível obter informações sobre o modelo")
        sock.close()

Neste script, cada faixa de IP é verificada em sequência. O comando PJL é enviado para cada dispositivo encontrado para tentar extrair o modelo da impressora.

Importante:

  • Realize varreduras em redes sob sua autorização para evitar problemas legais ou de segurança.
  • Este tipo de script pode ser considerado invasivo em algumas redes; use-o com responsabilidade.

Considerações Finais

Esse método é eficiente para descobrir impressoras ativas em uma rede local e identificar seus modelos, facilitando a administração e o monitoramento de equipamentos. Você pode adaptar o código para incluir logs, integração com bancos de dados ou notificações.

Para mais conteúdo técnico e tutoriais sobre Python e redes, visite o canal oficial do desenvolvedor no @CanalQb.

Este conteúdo é informativo. Ao utilizar scripts para varredura de redes e dispositivos, é fundamental avaliar individualmente os riscos e evitar aplicar o código em ambientes onde não se tem autorização ou conhecimento técnico suficiente.

Postar um comentário

Comente só assim vamos crescer juntos!
CanalQb mais próximo Quer falar com o CanalQb?
Em que posso te ajudar?
Fale comigo