blocklist update -tarka
This commit is contained in:
parent
b22a0111ca
commit
a74d64080f
|
@ -26,14 +26,15 @@ def enable(core, interface):
|
||||||
|
|
||||||
import urllib, deluge.common, deluge.pref
|
import urllib, deluge.common, deluge.pref
|
||||||
from peerguardian import PGReader, PGException
|
from peerguardian import PGReader, PGException
|
||||||
from text import TextReader, GZMuleReader
|
from text import TextReader, GZMuleReader, PGZip
|
||||||
from ui import GTKConfig, GTKProgress
|
from ui import GTKConfig, GTKProgress
|
||||||
|
|
||||||
# List of formats supported. This is used to generate the UI list and
|
# List of formats supported. This is used to generate the UI list and
|
||||||
# specify the reader class
|
# specify the reader class
|
||||||
readers = {'p2bgz':("PeerGuardian P2B (GZip)", PGReader),
|
readers = {'p2bgz':("PeerGuardian P2B (GZip)", PGReader),
|
||||||
'pgtext':("PeerGuardian Text (Uncompressed)", TextReader),
|
'pgtext':("PeerGuardian Text (Uncompressed)", TextReader),
|
||||||
'gzmule':("Emule IP list (GZip)", GZMuleReader)}
|
'gzmule':("Emule IP list (GZip)", GZMuleReader),
|
||||||
|
'spzip':("SafePeer Text (Zipped)", PGZip)}
|
||||||
|
|
||||||
class BlocklistImport:
|
class BlocklistImport:
|
||||||
|
|
||||||
|
@ -96,15 +97,23 @@ class BlocklistImport:
|
||||||
print "Starting import"
|
print "Starting import"
|
||||||
ips = reader.next()
|
ips = reader.next()
|
||||||
curr = 0
|
curr = 0
|
||||||
while ips and not self.cancelled:
|
try:
|
||||||
self.core.add_range_to_ip_filter(*ips)
|
while ips and not self.cancelled:
|
||||||
ips = reader.next()
|
self.core.add_range_to_ip_filter(*ips)
|
||||||
curr += 1
|
ips = reader.next()
|
||||||
if curr % 100 == 0:
|
curr += 1
|
||||||
self.gtkprog.import_prog(text="Imported %s IPs"%curr)
|
if curr % 100 == 0:
|
||||||
else:
|
self.gtkprog.import_prog(text="Imported %s IPs"%curr)
|
||||||
|
else:
|
||||||
self.gtkprog.import_prog()
|
self.gtkprog.import_prog()
|
||||||
|
|
||||||
|
except FormatException, (ex):
|
||||||
|
err = ui.GTKError("Format error in blocklist: %s"%ex)
|
||||||
|
self.gtkprog.stop()
|
||||||
|
reader.close()
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
reader.close()
|
reader.close()
|
||||||
self.gtkprog.end_import()
|
self.gtkprog.end_import()
|
||||||
print "Import complete"
|
print "Import complete"
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Bogon,:0.0.0.0-3.255.255.255
|
|
@ -0,0 +1 @@
|
||||||
|
Bogon,:1.1.1.1-3.255.255.255
|
|
@ -37,16 +37,6 @@ class PGReader:
|
||||||
raise PGException("Invalid version %d" % ver)
|
raise PGException("Invalid version %d" % ver)
|
||||||
|
|
||||||
|
|
||||||
def numentries(self):
|
|
||||||
save = self.fd.tell()
|
|
||||||
self.fd.seek(8)
|
|
||||||
count = 0
|
|
||||||
while self.next():
|
|
||||||
count += 1
|
|
||||||
self.fd.seek(save)
|
|
||||||
return count
|
|
||||||
|
|
||||||
|
|
||||||
def next(self):
|
def next(self):
|
||||||
|
|
||||||
# Skip over the string
|
# Skip over the string
|
||||||
|
|
|
@ -1,4 +1,2 @@
|
||||||
Bogon,:0.0.0.0-3.255.255.255
|
Bogon,:0.0.0.0-3.255.255.255
|
||||||
|
|
||||||
s0-0.c:4.0.25.146-4.0.25.148
|
s0-0.c:4.0.25.146-4.0.25.148
|
||||||
|
|
||||||
|
|
|
@ -1,20 +1,34 @@
|
||||||
import unittest
|
import unittest
|
||||||
from text import TextReader, GZMuleReader
|
from text import TextReader, GZMuleReader, PGZip
|
||||||
|
|
||||||
|
|
||||||
class ImportTests(unittest.TestCase):
|
class ImportTests(unittest.TestCase):
|
||||||
|
|
||||||
def testpgtext(self):
|
def testpgtext(self):
|
||||||
tr = TextReader("pg.txt")
|
fr = TextReader("pg.txt")
|
||||||
ips = tr.next()
|
ips = fr.next()
|
||||||
self.assertEqual("3.0.0.0", ips[0])
|
self.assertEqual("3.0.0.0", ips[0])
|
||||||
self.assertEqual("3.255.255.255", ips[1])
|
self.assertEqual("3.255.255.255", ips[1])
|
||||||
|
|
||||||
def testMule(self):
|
def testMule(self):
|
||||||
mr = GZMuleReader("nipfilter.dat.gz")
|
fr = GZMuleReader("nipfilter.dat.gz")
|
||||||
ips = mr.next()
|
ips = fr.next()
|
||||||
self.assertEqual("0.0.0.0", ips[0])
|
self.assertEqual("0.0.0.0", ips[0])
|
||||||
self.assertEqual("3.255.255.255", ips[1])
|
self.assertEqual("3.255.255.255", ips[1])
|
||||||
|
|
||||||
|
def testZip(self):
|
||||||
|
fr = PGZip("splist.zip")
|
||||||
|
ips = fr.next()
|
||||||
|
print "wibble wibble",ips
|
||||||
|
self.assertEqual("1.1.1.1", ips[0])
|
||||||
|
self.assertEqual("3.255.255.255", ips[1])
|
||||||
|
|
||||||
|
ips = fr.next()
|
||||||
|
self.assertEqual("0.0.0.0", ips[0])
|
||||||
|
self.assertEqual("3.255.255.255", ips[1])
|
||||||
|
|
||||||
|
ips = fr.next()
|
||||||
|
self.assertEqual(ips, False)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|
|
@ -5,9 +5,10 @@
|
||||||
|
|
||||||
|
|
||||||
from exceptions import Exception
|
from exceptions import Exception
|
||||||
import re, gzip
|
import re, gzip, os
|
||||||
from socket import inet_aton
|
from socket import inet_aton
|
||||||
from struct import unpack
|
from struct import unpack
|
||||||
|
from zipfile import ZipFile
|
||||||
|
|
||||||
|
|
||||||
class TextException(Exception):
|
class TextException(Exception):
|
||||||
|
@ -24,16 +25,6 @@ class TextBase:
|
||||||
self.fd = fd
|
self.fd = fd
|
||||||
self.re = re.compile(regexp)
|
self.re = re.compile(regexp)
|
||||||
|
|
||||||
def numentries(self):
|
|
||||||
print "Scanning"
|
|
||||||
save = self.fd.tell()
|
|
||||||
self.fd.seek(0)
|
|
||||||
count = 0
|
|
||||||
for l in self.fd:
|
|
||||||
count += 1
|
|
||||||
self.fd.seek(save)
|
|
||||||
return count
|
|
||||||
|
|
||||||
def next(self):
|
def next(self):
|
||||||
self.count += 1
|
self.count += 1
|
||||||
|
|
||||||
|
@ -43,7 +34,7 @@ class TextBase:
|
||||||
|
|
||||||
match = self.re.search(txt)
|
match = self.re.search(txt)
|
||||||
if not match:
|
if not match:
|
||||||
raise FormatException("Couldn't match on line %d: %s (%s)"%(self.count,txt,self.re.pattern))
|
raise FormatException("Couldn't match on line %d: %s (%s)"%(self.count,txt,txt))
|
||||||
|
|
||||||
g = match.groups()
|
g = match.groups()
|
||||||
start = ".".join(g[0:4])
|
start = ".".join(g[0:4])
|
||||||
|
@ -87,3 +78,49 @@ class GZMuleReader(MuleReader):
|
||||||
MuleReader.__init__(self, gzip.open(filename, "r"))
|
MuleReader.__init__(self, gzip.open(filename, "r"))
|
||||||
|
|
||||||
|
|
||||||
|
# Reads zip files from SafePeer style files
|
||||||
|
class PGZip(TextBase):
|
||||||
|
|
||||||
|
def __init__(self, filename):
|
||||||
|
# Open zip and extract first file
|
||||||
|
self.zfd = ZipFile(filename, 'r')
|
||||||
|
self.files = self.zfd.namelist()
|
||||||
|
|
||||||
|
self.opennext()
|
||||||
|
|
||||||
|
def opennext(self):
|
||||||
|
self.tmp = os.tmpfile()
|
||||||
|
f = self.files.pop()
|
||||||
|
print "Loading file",f
|
||||||
|
self.tmp.write(self.zfd.read(f))
|
||||||
|
self.tmp.seek(0)
|
||||||
|
self.reader = PGTextReader(self.tmp)
|
||||||
|
|
||||||
|
def next(self):
|
||||||
|
try:
|
||||||
|
ret = self.reader.next()
|
||||||
|
if ret == False:
|
||||||
|
# This bit is repeated below and could be moved into a
|
||||||
|
# new procedure. However I'm not clear on how this
|
||||||
|
# would effect tail recursion, so it remains
|
||||||
|
# broken-out for now.
|
||||||
|
if len(self.files) > 0:
|
||||||
|
self.opennext()
|
||||||
|
return self.next()
|
||||||
|
else:
|
||||||
|
# End of zip
|
||||||
|
return False
|
||||||
|
return ret
|
||||||
|
|
||||||
|
except FormatException, (e):
|
||||||
|
print "Got format exception for zipfile:",e
|
||||||
|
# Just skip
|
||||||
|
if len(self.files) > 0:
|
||||||
|
self.opennext()
|
||||||
|
return self.next()
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
|
def close(self):
|
||||||
|
self.zfd.close()
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue