Zum Inhalt springen

Ethernet Printer - Test Program V2.0 Download

if not result["port_9100"]: result["errors"].append("Port 9100 closed") return result

def throughput_test(ip, size_kb=1024): """Send 1 MB of dummy data, measure speed.""" data = b'U' * (size_kb * 1024) try: with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.settimeout(TIMEOUT) s.connect((ip, RAW_PORT)) start = time.time() s.sendall(data) elapsed = time.time() - start speed_kbps = (size_kb * 8) / elapsed # kilobits per second return round(speed_kbps, 2) except: return None

# Print test success, msg = raw_print(ip, TEST_PAGE) result["raw_print"] = success if not success: result["errors"].append(f"Print failed: msg")

print(f"[*] Scanning base.start_octet-end_octet for printers...") for last in range(start_octet, end_octet + 1): ip = f"base.last" if test_port(ip, RAW_PORT): printers.append(ip) print(f"[+] Printer found at ip") return printers def main(): print("Ethernet Printer Test Program v2.0") print("==================================") ethernet printer test program v2.0 download

if not printers: print("No printers found.") return

#!/usr/bin/env python3 """ Ethernet Printer Test Program v2.0 Supports: RAW TCP on port 9100, LPD on port 515, optional SNMP. """ import socket import time import json import sys import threading from concurrent.futures import ThreadPoolExecutor from datetime import datetime try: from pysnmp.hlapi import * SNMP_AVAILABLE = True except ImportError: SNMP_AVAILABLE = False ========== CONFIGURATION ========== TEST_PAGE = b"\x1b%-12345X@PJL JOB\r\n@PJL ENTER LANGUAGE=PCL\r\n\x1bEPrinter Test Page v2.0 - Ethernet Test\x1b&l0o0\x1bE\x1b%-12345X@PJL EOJ\r\n" RAW_PORT = 9100 LPD_PORT = 515 TIMEOUT = 5 THREADS = 5 ========== CORE FUNCTIONS ========== def test_port(ip, port): """Test if a TCP port is open.""" try: with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.settimeout(TIMEOUT) s.connect((ip, port)) return True except: return False

return result def discover_printers(ip_range_start, ip_range_end): """Discover printers by scanning IP range for open port 9100.""" base = '.'.join(ip_range_start.split('.')[:3]) start_octet = int(ip_range_start.split('.')[-1]) end_octet = int(ip_range_end.split('.')[-1]) printers = [] if not result["port_9100"]: result["errors"]

# Throughput test speed = throughput_test(ip) if speed: result["throughput_kbps"] = speed

def get_snmp_toner(ip, community='public'): """Get toner level (OID for black toner).""" if not SNMP_AVAILABLE: return None oid = ObjectIdentity('1.3.6.1.2.1.43.11.1.1.9.1.1') errorIndication, errorStatus, errorIndex, varBinds = next( getCmd(SnmpEngine(), CommunityData(community), UdpTransportTarget((ip, 161)), ContextData(), ObjectType(oid)) ) if errorIndication or errorStatus: return None return int(varBinds[0][1])

def raw_print(ip, data): """Send raw data to printer on port 9100.""" try: with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.settimeout(TIMEOUT) s.connect((ip, RAW_PORT)) s.sendall(data) return True, "OK" except Exception as e: return False, str(e) msg = raw_print(ip

pip install pyinstaller pyinstaller --onefile ethernet_printer_tester_v2.py The .exe will be in the dist folder.

# SNMP toner toner = get_snmp_toner(ip) if toner is not None: result["toner_level"] = toner

def test_single_printer(ip, name="Unknown"): """Run all tests on one printer.""" result = "ip": ip, "name": name, "timestamp": datetime.now().isoformat(), "port_9100": test_port(ip, RAW_PORT), "port_515": test_port(ip, LPD_PORT), "raw_print": None, "throughput_kbps": None, "toner_level": None, "errors": []

# Option 1: Single IP ip = input("Enter printer IP (or range e.g., 192.168.1.10-20): ").strip()