Python - Descobrindo impressoras em uma range de IP
Python - Descobrindo impressoras em uma range de IP | ||
Canal Qb |
Para fazer o discovery de impressoras em rede, você pode utilizar o módulo socket do Python para fazer a varredura em um determinado intervalo de endereços IP e porta de impressão. Aqui está um exemplo de código Python que faz isso:
import socketdef 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 = 9100scan_printers(ip_range, port)
Nesse exemplo, a função scan_printers recebe um intervalo de endereços IP (no caso, "192.168.1.") e uma porta de impressão (no caso, 9100). O loop for percorre todos os endereços IP dentro do intervalo e tenta conectar na porta especificada utilizando o método connect_ex do socket. Se a conexão for bem-sucedida (ou seja, result é igual a zero), a função imprime uma mensagem informando que uma impressora foi encontrada no endereço IP correspondente.
Você pode ajustar o código para utilizar outros intervalos de endereços IP e portas de impressão, conforme necessário.
--*--
Para obter o modelo da impressora, você precisará se conectar à porta da impressora usando o protocolo apropriado para obter informações de identificação da impressora. Aqui está um exemplo de como modificar o código anterior para recuperar o modelo da impressora:
import socketdef get_printer_info(ip, port):sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)sock.settimeout(1)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 modeldef 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 = 9100scan_printers(ip_range, port)
Nesse exemplo, a função get_printer_info se conecta à porta especificada da impressora e envia um comando PJL para obter informações de identificação da impressora. Em seguida, o modelo é extraído da resposta usando uma expressão regular.
A função scan_printers agora chama get_printer_info para cada impressora encontrada e imprime o endereço IP e o modelo da impressora, se disponível. Se o modelo não puder ser recuperado, apenas o endereço IP é impresso.
--*--
Para realizar a descoberta de impressoras em rede, é possível utilizar a biblioteca socket do Python para realizar uma varredura de portas em um determinado intervalo de endereços IP. Para identificar o modelo da impressora, é necessário realizar uma conexão com o dispositivo e obter informações sobre ele.
Segue abaixo um exemplo de script Python que realiza a descoberta de impressoras em rede para os ranges de IP especificados:
import socketip_ranges = ['10.0.1.', '10.0.2.', '10.140.']printer_port = 9100for 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:print("Não foi possível obter informações sobre o modelo")sock.close()
Neste exemplo, a lista ip_ranges contém os ranges de IP que serão varridos em busca de impressoras. O número da porta padrão para impressoras é o 9100, por isso é utilizado o valor printer_port para realizar a conexão com cada IP encontrado.
Ao encontrar um dispositivo na porta especificada, o script envia um comando específico para impressoras que retorna informações sobre o modelo do dispositivo. Em seguida, é feito o tratamento dessas informações e exibido na tela do usuário.
Caso deseje verificar outras faixas de IP, basta adicionar as mesmas à lista ip_ranges. É importante ressaltar que esse tipo de varredura pode ser considerado invasivo em alguns casos, por isso é importante tomar cuidado ao executá-la.
Nenhum comentário
Comente só assim vamos crescer juntos!
Observação: somente um membro deste blog pode postar um comentário.