timeoutsocket module help

jepler at unpythonic.net jepler at unpythonic.net
Tue Sep 17 22:37:29 EDT 2002


You won't have a lot of luck using timeoutsocket to influence the timeout
of name lookups -- those are done in C code, not at the level where
timeoutsocket can be useful.

Investigate a pure python DNS setup, like pydns
(http://pydns.sourceforge.net/).

Jeff
PS following for your enjoyment, an inefficient program that attempts to
look up a host in many different RBLs, using threads for parallelism and
the aforementioned pydns for lookups with a defined timeout:

RBL_LIST = (
    'bl.redhatgate.com', 'blackholes.intersil.net', 'dews.qmail.org',
    'dssl.imrss.org', 'mr-out.imrss.org', '3y.spam.mrs.kithrup.com',
    'blackhole.com', 'pu.net', 'blackholes.2mbit.com',
    'blackholes.five-ten-sg.com', 'blackholes.mail-abuse.org',
    'blackholes.wirehub.net', 'blacklist.spambag.org',
    'block.blars.org', 'blocktest.relays.osirusoft.com', 'dev.null.dk',
    'dialup.blacklist.jippg.org', 'dialups.mail-abuse.org',
    'dialups.relays.osirusoft.com', 'dnsbl.njabl.org', 'list.dsbl.org',
    'multihop.dsbl.org', 'unconfirmed.dsbl.org', 'dul.maps.vix.com',
    'dul.orca.bc.ca', 'dynablock.wirehub.net', 'flowgoaway.com',
    'formmail.relays.monkeys.com', 'http.opm.blitzed.org',
    'inputs.relays.osirusoft.com', 'ipwhois.rfc-ignorant.org',
    'opm.blitzed.org', 'orbs.dorkslayers.com', 'outputs.orbz.org',
    'relays.ordb.org', 'pm0-no-more.com', 'pu.net',
    'proxies.relays.monkeys.com', 'rbl-plus.mail-abuse.org',
    'rbl.maps.vix.com', 'rbl.spam.org.tr', 'relays.dorkslayers.com',
    'relays.mail-abuse.org', 'relays.osirusoft.com',
    'relays.radparker.com', 'relays.visi.com',
    'sbl.spamhaus.org', 'socks.opm.blitzed.org',
    'socks.relays.osirusoft.com', 'bl.spamcop.net',
    'spamguard.leadmon.net', 'spamhaus.relays.osirusoft.com',
    'spammers.v6net.org', 'spamsites.relays.osirusoft.com',
    'spamsources.fabel.dkspews.relays.osirusoft.com',
    'wingate.opm.blitzed.org', 'xbl.selwerd.cx', 'ztl.dorkslayers.com',
    'or.orbl.org', 'spamips.rbl.shub-inter.net',
)

import sys, socket, threading, DNS

DNS.DiscoverNameServers()

def check_one(i, j):
    dns = DNS.Request(timeout=5)
    k = "%s.%s" % (i, j)
    try:
	res = dns.req(k)
    except DNS.DNSError, reason:
	l = reason
    else:
	status = res.header['status']
	if status == 'NOERROR' and res.answers:
	    l = res.answers[0]['data']
	elif status == 'NOERROR':
	    l = "NOERROR but no answer?"
	elif status == 'NXDOMAIN':
	    return
	else:
	    l = status
    print "%-50s %s" % (k, l)
	
for i in sys.argv[1:]:
    i = socket.gethostbyname(i).split(".")
    i.reverse()
    i = ".".join(i)
    tl = []
    for j in RBL_LIST:
	t = threading.Thread(target=check_one, args=(i, j))
	t.start()
	tl.append(t)

    while tl:
	tl.pop().join()





More information about the Python-list mailing list