Sophie

Sophie

distrib > Mageia > 1 > i586 > media > core-updates-src > by-pkgid > 96b9b4f5a54c81378ec39091d5137514 > files > 4

system-config-printer-1.3.1-4.1.mga1.src.rpm

#!/usr/bin/python
import os
import re

def detect_network_printers():
    printers_final = []
    a = open("/proc/net/route")
    b= a.readlines()
    defaultentry = None
    if b[-1].split('\t')[2] != "00000000":
        defaultentry = b[-1].split('\t')

    defaultiface = defaultentry[0]
    # TODO: write in a better way
    addrsline = os.popen("LC_ALL=C /sbin/ifconfig "+defaultiface+" | grep 'inet addr:' | sed 's/:/\\n/g' | grep '[0-9]' | sed 's/[^0-9\.]//g'")
    c = addrsline.readlines()
    ip = c[0].strip()
    bcast = c[1].strip()
    mask = c[2].strip()

    mask=mask.split(".")
    ipsplit=ip.split(".")
    if mask[2]!="255":
        pingres = os.popen("LC_ALL=C ping -b -c 2 "+bcast+ " 2>/dev/null | sed 's/.*bytes from \(.*\):.*/\\1/g' | grep '^[0-9].*[0-9]$' | uniq")
    else:
        pingres = os.popen("for i in $(seq 1 254); do echo "+ipsplit[0]+"."+ipsplit[1]+"."+ipsplit[2]+"."+"$i; done")

    hostlist=""
    for i in pingres.readlines():
        if i.strip() == ip:
            continue
        if not hostlist:
            hostlist = i.strip()
        else:
            hostlist += ("\n"+i.strip())
    nmapresult = os.popen("echo -e '"+hostlist+"' | LC_ALL=C nmap -n -r -vd2 -P0 --max-retries 1 --host_timeout 16000 --initial_rtt_timeout 8000 -p 9100 -d0 -iL - 2>/dev/null | grep -v PORT")
    reg = re.compile(r"Interesting ports on (.*[0-9]):")
    printers = []
    while True:
        try:
            i = nmapresult.next()
        except:
            break

        try:
            try:
                ip = reg.findall(i)[0]
            except:
                continue
            a = nmapresult.next()
            port=a.split()[0]
            state=a.split()[1]
            service=a.split()[2]
            if a.split()[1] == "open":
                printers.append([ip,port,state,service])
        except:
            break

    for printer in printers:
        a = os.popen("/usr/lib/cups/backend/snmp "+printer[0])
        out = a.readlines()
        if out != []:
            print out[0].strip()

detect_network_printers()