Commit b0f6e003 authored by Devon Kearns's avatar Devon Kearns

Imported Upstream version 0.1

parents
K 25
svn:wc:ra_dav:version-url
V 39
/svnroot/blindelephant/!svn/ver/7/trunk
END
README
K 25
svn:wc:ra_dav:version-url
V 46
/svnroot/blindelephant/!svn/ver/2/trunk/README
END
10
dir
7
https://blindelephant.svn.sourceforge.net/svnroot/blindelephant/trunk
https://blindelephant.svn.sourceforge.net/svnroot/blindelephant
2012-09-26T21:34:54.971098Z
7
psthomas
0754ae56-c0de-4889-a8fb-029cb614d0af
tools
dir
doc
dir
src
dir
README
file
2012-11-05T22:46:54.000000Z
dc9f6894a656c6ae39b17eae39167d02
2010-08-02T22:26:09.658516Z
2
psthomas
6442
BlindElephant Web Application Fingerprinter
I. SUMMARY
II. PREREQUISITES
III. INSTALLATION
IV. EXAMPLE USAGE (command line)
V. EXAMPLE USAGE (library)
I. SUMMARY:
-----------------------------------------------------------------
The BlindElephant Web Application Fingerprinter attempts to discover the version
of a (known) web application by comparing static files at known locations against
precomputed hashes for versions of those files in all all available releases.
The technique is fast, low-bandwidth, non-invasive, generic, and highly automatable.
Author: Patrick Thomas (pthomas@qualys.com, pst@coffeetocode.net)
Sites: https://sourceforge.net/projects/blindelephant/
http://www.qualys.com/blindelephant
II. PREREQUISITES:
-----------------------------------------------------------------
Python == 2.6.x (greater than 2.6.x may work, less than probably will not; neither is tested)
III. INSTALLATION (via distutils):
-----------------------------------------------------------------
python setup.py install
IV. EXAMPLE USAGE (command line):
-----------------------------------------------------------------
$ python BlindElephant.py
Error: url and appName are required arguments unless using -l, -u, or -h
Usage: BlindElephant.py [options] url appName
Options:
-h, --help show this help message and exit
-p PLUGINNAME, --pluginName=PLUGINNAME
Fingerprint version of plugin (should apply to web app
given in appname)
-s, --skip Skip fingerprinting webpp, just fingerprint plugin
-n NUMPROBES, --numProbes=NUMPROBES
Number of files to fetch (more may increase accuracy).
Default: 15
-w, --winnow If more than one version are returned, use winnowing
to attempt to narrow it down (up to numProbes
additional requests).
-l, --list List supported webapps and plugins
Use "guess" as app or plugin name to attempt to attempt to
discover which supported apps/plugins are installed.
$ python BlindElephant.py http://laws.qualys.com movabletype
Loaded /usr/local/lib/python2.6/dist-packages/blindelephant/dbs/movabletype.pkl with 96 versions, 2229 differentiating paths, and 209 version groups.
Starting BlindElephant fingerprint for version of movabletype at http://laws.qualys.com
Hit http://laws.qualys.com/mt-static/mt.js
Possible versions based on result: 4.2-en, 4.21-en, 4.21-en, 4.21-en-COM, 4.22-en, 4.22-en, 4.22-en-COM, 4.23-en, 4.23-en, 4.23-en-COM, 4.24-en, 4.24-en, 4.24-en-COM
Hit http://laws.qualys.com/mt-static/js/tc/client.js
Possible versions based on result: 4.2-en, 4.21-en, 4.21-en, 4.21-en-COM, 4.22-en, 4.22-en, 4.22-en-COM, 4.23-en, 4.23-en, 4.23-en-COM, 4.24-en, 4.24-en, 4.24-en-COM
Hit http://laws.qualys.com/mt-static/css/main.css
Possible versions based on result: 4.2-en, 4.21-en, 4.21-en, 4.21-en-COM, 4.22-en, 4.22-en, 4.22-en-COM, 4.23-en, 4.23-en, 4.23-en-COM
Hit http://laws.qualys.com/tools/run-periodic-tasks
File produced no match. Error: Error code: 404 (Not Found)
Hit http://laws.qualys.com/mt-static/js/tc/tagcomplete.js
Possible versions based on result: 4.1-en, 4.1-en-CS, 4.2-en, 4.21-en, 4.21-en, 4.21-en-COM, 4.22-en, 4.22-en, 4.22-en-COM, 4.23-en, 4.23-en, 4.23-en-COM, 4.24-en, 4.24-en, 4.24-en-COM
Hit http://laws.qualys.com/mt-static/js/edit.js
Possible versions based on result: 4.1-en, 4.1-en-CS, 4.2-en, 4.21-en, 4.21-en, 4.21-en-COM, 4.22-en, 4.22-en, 4.22-en-COM, 4.23-en, 4.23-en, 4.23-en-COM, 4.24-en, 4.24-en, 4.24-en-COM
Hit http://laws.qualys.com/mt-static/js/tc/mixer/display.js
Possible versions based on result: 4.2-en, 4.21-en, 4.21-en, 4.21-en-COM, 4.22-en, 4.22-en, 4.22-en-COM, 4.23-en, 4.23-en, 4.23-en-COM, 4.24-en, 4.24-en, 4.24-en-COM
Hit http://laws.qualys.com/mt-static/js/archetype_editor.js
Possible versions based on result: 4.22-en, 4.22-en, 4.22-en-COM, 4.23-en, 4.23-en, 4.23-en-COM, 4.24-en, 4.24-en, 4.24-en-COM
Hit http://laws.qualys.com/mt-static/js/tc/mixer.js
Possible versions based on result: 4.1-en, 4.1-en-CS, 4.2-en, 4.21-en, 4.21-en, 4.21-en-COM, 4.22-en, 4.22-en, 4.22-en-COM, 4.23-en, 4.23-en, 4.23-en-COM, 4.24-en, 4.24-en, 4.24-en-COM
Hit http://laws.qualys.com/mt-static/js/tc/tableselect.js
Possible versions based on result: 4.1-en, 4.1-en-CS, 4.2-en, 4.21-en, 4.21-en, 4.21-en-COM, 4.22-en, 4.22-en, 4.22-en-COM, 4.23-en, 4.23-en, 4.23-en-COM, 4.24-en, 4.24-en, 4.24-en-COM
Hit http://laws.qualys.com/mt-static/js/tc/focus.js
Possible versions based on result: 4.1-en, 4.1-en-CS, 4.2-en, 4.21-en, 4.21-en, 4.21-en-COM, 4.22-en, 4.22-en, 4.22-en-COM, 4.23-en, 4.23-en, 4.23-en-COM, 4.24-en, 4.24-en, 4.24-en-COM
Hit http://laws.qualys.com/mt-static/js/tc.js
Possible versions based on result: 4.1-en, 4.1-en-CS, 4.2-en, 4.21-en, 4.21-en, 4.21-en-COM, 4.22-en, 4.22-en, 4.22-en-COM, 4.23-en, 4.23-en, 4.23-en-COM, 4.24-en, 4.24-en, 4.24-en-COM
Hit http://laws.qualys.com/mt-static/css/simple.css
Possible versions based on result: 4.2-en, 4.21-en, 4.21-en, 4.21-en-COM, 4.22-en, 4.22-en, 4.22-en-COM, 4.23-en, 4.23-en, 4.23-en-COM
Hit http://laws.qualys.com/mt-static/mt_ja.js
Possible versions based on result: 4.2-en, 4.22-en, 4.22-en, 4.22-en-COM, 4.23-en, 4.23-en, 4.23-en-COM, 4.23-en-OS, 4.24-en, 4.24-en, 4.24-en-COM
Hit http://laws.qualys.com/mt-static/js/tc/gestalt.js
Possible versions based on result: 4.1-en, 4.1-en-CS, 4.2-en, 4.21-en, 4.21-en, 4.21-en-COM, 4.22-en, 4.22-en, 4.22-en-COM, 4.23-en, 4.23-en, 4.23-en-COM, 4.24-en, 4.24-en, 4.24-en-COM
Fingerprinting resulted in:
4.22-en
4.22-en-COM
4.23-en
4.23-en-COM
Best Guess: 4.23-en-COM
V. EXAMPLE USAGE (as library):
-----------------------------------------------------------------
$python
>>> from blindelephant.Fingerprinters import WebAppFingerprinter
>>>
>>> #Construct the fingerprinter
>>> #use default logger pointing to console; can pass "logger" arg to change output
>>> fp = WebAppFingerprinter("http://laws.qualys.com", "movabletype")
>>> #do the fingerprint; data becomes available as instance vars
>>> fp.fingerprint()
<snip>(same as above)</snip>
>>> print "Possible versions:", fp.ver_list
Possible versions: [LooseVersion ('4.22-en'), LooseVersion ('4.22-en-COM'), LooseVersion ('4.23-en'), LooseVersion ('4.23-en-COM')]
>>> print "Max possible version: ", fp.best_guess
Max possible version: 4.23-en-COM
BlindElephant Web Application Fingerprinter
I. SUMMARY
II. PREREQUISITES
III. INSTALLATION
IV. EXAMPLE USAGE (command line)
V. EXAMPLE USAGE (library)
I. SUMMARY:
-----------------------------------------------------------------
The BlindElephant Web Application Fingerprinter attempts to discover the version
of a (known) web application by comparing static files at known locations against
precomputed hashes for versions of those files in all all available releases.
The technique is fast, low-bandwidth, non-invasive, generic, and highly automatable.
Author: Patrick Thomas (pthomas@qualys.com, pst@coffeetocode.net)
Sites: https://sourceforge.net/projects/blindelephant/
http://www.qualys.com/blindelephant
II. PREREQUISITES:
-----------------------------------------------------------------
Python == 2.6.x (greater than 2.6.x may work, less than probably will not; neither is tested)
III. INSTALLATION (via distutils):
-----------------------------------------------------------------
python setup.py install
IV. EXAMPLE USAGE (command line):
-----------------------------------------------------------------
$ python BlindElephant.py
Error: url and appName are required arguments unless using -l, -u, or -h
Usage: BlindElephant.py [options] url appName
Options:
-h, --help show this help message and exit
-p PLUGINNAME, --pluginName=PLUGINNAME
Fingerprint version of plugin (should apply to web app
given in appname)
-s, --skip Skip fingerprinting webpp, just fingerprint plugin
-n NUMPROBES, --numProbes=NUMPROBES
Number of files to fetch (more may increase accuracy).
Default: 15
-w, --winnow If more than one version are returned, use winnowing
to attempt to narrow it down (up to numProbes
additional requests).
-l, --list List supported webapps and plugins
Use "guess" as app or plugin name to attempt to attempt to
discover which supported apps/plugins are installed.
$ python BlindElephant.py http://laws.qualys.com movabletype
Loaded /usr/local/lib/python2.6/dist-packages/blindelephant/dbs/movabletype.pkl with 96 versions, 2229 differentiating paths, and 209 version groups.
Starting BlindElephant fingerprint for version of movabletype at http://laws.qualys.com
Hit http://laws.qualys.com/mt-static/mt.js
Possible versions based on result: 4.2-en, 4.21-en, 4.21-en, 4.21-en-COM, 4.22-en, 4.22-en, 4.22-en-COM, 4.23-en, 4.23-en, 4.23-en-COM, 4.24-en, 4.24-en, 4.24-en-COM
Hit http://laws.qualys.com/mt-static/js/tc/client.js
Possible versions based on result: 4.2-en, 4.21-en, 4.21-en, 4.21-en-COM, 4.22-en, 4.22-en, 4.22-en-COM, 4.23-en, 4.23-en, 4.23-en-COM, 4.24-en, 4.24-en, 4.24-en-COM
Hit http://laws.qualys.com/mt-static/css/main.css
Possible versions based on result: 4.2-en, 4.21-en, 4.21-en, 4.21-en-COM, 4.22-en, 4.22-en, 4.22-en-COM, 4.23-en, 4.23-en, 4.23-en-COM
Hit http://laws.qualys.com/tools/run-periodic-tasks
File produced no match. Error: Error code: 404 (Not Found)
Hit http://laws.qualys.com/mt-static/js/tc/tagcomplete.js
Possible versions based on result: 4.1-en, 4.1-en-CS, 4.2-en, 4.21-en, 4.21-en, 4.21-en-COM, 4.22-en, 4.22-en, 4.22-en-COM, 4.23-en, 4.23-en, 4.23-en-COM, 4.24-en, 4.24-en, 4.24-en-COM
Hit http://laws.qualys.com/mt-static/js/edit.js
Possible versions based on result: 4.1-en, 4.1-en-CS, 4.2-en, 4.21-en, 4.21-en, 4.21-en-COM, 4.22-en, 4.22-en, 4.22-en-COM, 4.23-en, 4.23-en, 4.23-en-COM, 4.24-en, 4.24-en, 4.24-en-COM
Hit http://laws.qualys.com/mt-static/js/tc/mixer/display.js
Possible versions based on result: 4.2-en, 4.21-en, 4.21-en, 4.21-en-COM, 4.22-en, 4.22-en, 4.22-en-COM, 4.23-en, 4.23-en, 4.23-en-COM, 4.24-en, 4.24-en, 4.24-en-COM
Hit http://laws.qualys.com/mt-static/js/archetype_editor.js
Possible versions based on result: 4.22-en, 4.22-en, 4.22-en-COM, 4.23-en, 4.23-en, 4.23-en-COM, 4.24-en, 4.24-en, 4.24-en-COM
Hit http://laws.qualys.com/mt-static/js/tc/mixer.js
Possible versions based on result: 4.1-en, 4.1-en-CS, 4.2-en, 4.21-en, 4.21-en, 4.21-en-COM, 4.22-en, 4.22-en, 4.22-en-COM, 4.23-en, 4.23-en, 4.23-en-COM, 4.24-en, 4.24-en, 4.24-en-COM
Hit http://laws.qualys.com/mt-static/js/tc/tableselect.js
Possible versions based on result: 4.1-en, 4.1-en-CS, 4.2-en, 4.21-en, 4.21-en, 4.21-en-COM, 4.22-en, 4.22-en, 4.22-en-COM, 4.23-en, 4.23-en, 4.23-en-COM, 4.24-en, 4.24-en, 4.24-en-COM
Hit http://laws.qualys.com/mt-static/js/tc/focus.js
Possible versions based on result: 4.1-en, 4.1-en-CS, 4.2-en, 4.21-en, 4.21-en, 4.21-en-COM, 4.22-en, 4.22-en, 4.22-en-COM, 4.23-en, 4.23-en, 4.23-en-COM, 4.24-en, 4.24-en, 4.24-en-COM
Hit http://laws.qualys.com/mt-static/js/tc.js
Possible versions based on result: 4.1-en, 4.1-en-CS, 4.2-en, 4.21-en, 4.21-en, 4.21-en-COM, 4.22-en, 4.22-en, 4.22-en-COM, 4.23-en, 4.23-en, 4.23-en-COM, 4.24-en, 4.24-en, 4.24-en-COM
Hit http://laws.qualys.com/mt-static/css/simple.css
Possible versions based on result: 4.2-en, 4.21-en, 4.21-en, 4.21-en-COM, 4.22-en, 4.22-en, 4.22-en-COM, 4.23-en, 4.23-en, 4.23-en-COM
Hit http://laws.qualys.com/mt-static/mt_ja.js
Possible versions based on result: 4.2-en, 4.22-en, 4.22-en, 4.22-en-COM, 4.23-en, 4.23-en, 4.23-en-COM, 4.23-en-OS, 4.24-en, 4.24-en, 4.24-en-COM
Hit http://laws.qualys.com/mt-static/js/tc/gestalt.js
Possible versions based on result: 4.1-en, 4.1-en-CS, 4.2-en, 4.21-en, 4.21-en, 4.21-en-COM, 4.22-en, 4.22-en, 4.22-en-COM, 4.23-en, 4.23-en, 4.23-en-COM, 4.24-en, 4.24-en, 4.24-en-COM
Fingerprinting resulted in:
4.22-en
4.22-en-COM
4.23-en
4.23-en-COM
Best Guess: 4.23-en-COM
V. EXAMPLE USAGE (as library):
-----------------------------------------------------------------
$python
>>> from blindelephant.Fingerprinters import WebAppFingerprinter
>>>
>>> #Construct the fingerprinter
>>> #use default logger pointing to console; can pass "logger" arg to change output
>>> fp = WebAppFingerprinter("http://laws.qualys.com", "movabletype")
>>> #do the fingerprint; data becomes available as instance vars
>>> fp.fingerprint()
<snip>(same as above)</snip>
>>> print "Possible versions:", fp.ver_list
Possible versions: [LooseVersion ('4.22-en'), LooseVersion ('4.22-en-COM'), LooseVersion ('4.23-en'), LooseVersion ('4.23-en-COM')]
>>> print "Max possible version: ", fp.best_guess
Max possible version: 4.23-en-COM
K 25
svn:wc:ra_dav:version-url
V 43
/svnroot/blindelephant/!svn/ver/3/trunk/doc
END
Blind Elephant - BlackHat 2010.pdf
K 25
svn:wc:ra_dav:version-url
V 86
/svnroot/blindelephant/!svn/ver/1/trunk/doc/Blind%20Elephant%20-%20BlackHat%202010.pdf
END
README-Adding_Support_For_New_Apps.txt
K 25
svn:wc:ra_dav:version-url
V 82
/svnroot/blindelephant/!svn/ver/3/trunk/doc/README-Adding_Support_For_New_Apps.txt
END
10
dir
7
https://blindelephant.svn.sourceforge.net/svnroot/blindelephant/trunk/doc
https://blindelephant.svn.sourceforge.net/svnroot/blindelephant
2010-09-01T21:01:12.619941Z
3
psthomas
0754ae56-c0de-4889-a8fb-029cb614d0af
Blind Elephant - BlackHat 2010.pdf
file
2012-11-05T22:46:45.000000Z
237e6066c88a975e9b11fb6809360930
2010-07-28T17:45:25.097266Z
1
psthomas
5215960
README-Adding_Support_For_New_Apps.txt
file
2012-11-05T22:46:45.000000Z
9015fc318a3b5fe03432af572265a3b5
2010-09-01T21:01:12.619941Z
3
psthomas
3341
ADDING NEW WEB APPLICATIONS TO BLIND ELEPHANT.
-----------------------------------------------------
Currently supported apps and plugins can be listed with ./BlindElephant.py -l
If an app you're interested in isn't supported please consider diving in and making it happen. With most apps it should take only an hour or so.
I use some simple scripts to fetch new versions of all supported apps nightly, but won't be releasing them since we don't need a thousand people abusing the various mirrors. Contact me (pst@coffeetocode.net) if you wish to support a new app and I'll see if I can save you some time. If you choose to follow the conventions here I can probably add the app to the nightly build and save you a *lot* of time.
For the steps below I'll be using TWiki as example.
1) Add keys to the end of APP_CONFIG in Configuration.py
2) Create directory structure to hold all the app versions. I use ~/webAppSources (if you choose something different, change APPS_PATH in Configuration.py accordingly)
cd ~/webAppSources
mkdir twiki
cd twiki
mkdir downloads
3) Get all versions of the app you can find (say, TWiki-*.zip) and dump them in ~webAppSources/<appname>/downloads
(LatestVersionFetcher provides example functions that may help automate this. Otherwise there's always DownThemAll on Firefox ;)
4) Examine the file structure of the zips and create a bash script to unpack them. The goal is to have ~/webAppSources/<appname> be filled with dirs that contain easily extractable versions. Something like:
~/webAppSources/movabletype$ ls
downloads MT-4.261-en MTCS-4.05-en-CS MTOS-4.25-en
movabletype.sh MT-4.26-en MTCS-4.121-en MTOS-4.25-en-OS
MT-3.31 MT-4.2-en MTCS-4.121-en-CS MTOS-4.261-en
MT-3.32 MT-4.31-en MTCS-4.131-en MTOS-4.261-en-OS
MT-3.33 MT-4.32-en MTCS-4.131-en-CS MTOS-4.26-en
MT-3.34-en MT-4.33-en MTCS-4.141-en MTOS-4.26-en-OS
... <etc>
Unpacker scripts live in tools/ (for version control purposes), but get copied into webAppSources/<appname>/ before invocation.
cd webAppSources/twiki
touch twiki.sh
chmod +x
(read twiki.sh or others for the general idea)
5) Run the unpacker script
cd ~/webAppSources/twiki
./twiki.sh
5) Update APP_CONFIG key with any files or directories to exclude, eg .php, .pl, bin/, install/ (see existing entries for formatting).
6) Update/create fingerprint datafiles
python LatestVersionFetcher.py --updateDBs twiki
7) Choose indicator files (this step is a holdover from a previous more manual method that we hope to get away from. In the future this will probably be done automatically at runtime unless overridden)
cd src/blindelephant/
python
import DifferencesTables as dt
import FingerprintUtils as fu
import Configuration as c
pathNodes, versionNodes, allVersions = dt.loadTables(c.getDbPath("twiki"), printStats=True, useCaching=False)
fu.pick_indicator_files(versionNodes, allVersions)
['/pub/TWiki/TWikiDocGraphics/sitemap.gif', '/pub/TWiki/TinyMCEPlugin/tinymce/docs/index.html', '/COPYING', '/pub/TWiki/JSCalendarContrib/lang/calendar-fi.js', '/pub/TWiki/TWikiDocGraphics/mail.gif', '/LICENSE']
Paste the result into the indicatorFiles key of the webapp config entry.
8) Try it out!
python BlindElephant.py http://example.com/twiki/ twiki
ADDING NEW WEB APPLICATIONS TO BLIND ELEPHANT.
-----------------------------------------------------
Currently supported apps and plugins can be listed with ./BlindElephant.py -l
If an app you're interested in isn't supported please consider diving in and making it happen. With most apps it should take only an hour or so.
I use some simple scripts to fetch new versions of all supported apps nightly, but won't be releasing them since we don't need a thousand people abusing the various mirrors. Contact me (pst@coffeetocode.net) if you wish to support a new app and I'll see if I can save you some time. If you choose to follow the conventions here I can probably add the app to the nightly build and save you a *lot* of time.
For the steps below I'll be using TWiki as example.
1) Add keys to the end of APP_CONFIG in Configuration.py
2) Create directory structure to hold all the app versions. I use ~/webAppSources (if you choose something different, change APPS_PATH in Configuration.py accordingly)
cd ~/webAppSources
mkdir twiki
cd twiki
mkdir downloads
3) Get all versions of the app you can find (say, TWiki-*.zip) and dump them in ~webAppSources/<appname>/downloads
(LatestVersionFetcher provides example functions that may help automate this. Otherwise there's always DownThemAll on Firefox ;)
4) Examine the file structure of the zips and create a bash script to unpack them. The goal is to have ~/webAppSources/<appname> be filled with dirs that contain easily extractable versions. Something like:
~/webAppSources/movabletype$ ls
downloads MT-4.261-en MTCS-4.05-en-CS MTOS-4.25-en
movabletype.sh MT-4.26-en MTCS-4.121-en MTOS-4.25-en-OS
MT-3.31 MT-4.2-en MTCS-4.121-en-CS MTOS-4.261-en
MT-3.32 MT-4.31-en MTCS-4.131-en MTOS-4.261-en-OS
MT-3.33 MT-4.32-en MTCS-4.131-en-CS MTOS-4.26-en
MT-3.34-en MT-4.33-en MTCS-4.141-en MTOS-4.26-en-OS
... <etc>
Unpacker scripts live in tools/ (for version control purposes), but get copied into webAppSources/<appname>/ before invocation.
cd webAppSources/twiki
touch twiki.sh
chmod +x
(read twiki.sh or others for the general idea)
5) Run the unpacker script
cd ~/webAppSources/twiki
./twiki.sh
5) Update APP_CONFIG key with any files or directories to exclude, eg .php, .pl, bin/, install/ (see existing entries for formatting).
6) Update/create fingerprint datafiles
python LatestVersionFetcher.py --updateDBs twiki
7) Choose indicator files (this step is a holdover from a previous more manual method that we hope to get away from. In the future this will probably be done automatically at runtime unless overridden)
cd src/blindelephant/
python
import DifferencesTables as dt
import FingerprintUtils as fu
import Configuration as c
pathNodes, versionNodes, allVersions = dt.loadTables(c.getDbPath("twiki"), printStats=True, useCaching=False)
fu.pick_indicator_files(versionNodes, allVersions)
['/pub/TWiki/TWikiDocGraphics/sitemap.gif', '/pub/TWiki/TinyMCEPlugin/tinymce/docs/index.html', '/COPYING', '/pub/TWiki/JSCalendarContrib/lang/calendar-fi.js', '/pub/TWiki/TWikiDocGraphics/mail.gif', '/LICENSE']
Paste the result into the indicatorFiles key of the webapp config entry.
8) Try it out!
python BlindElephant.py http://example.com/twiki/ twiki
K 25
svn:wc:ra_dav:version-url
V 43
/svnroot/blindelephant/!svn/ver/7/trunk/src
END
setup.py
K 25
svn:wc:ra_dav:version-url
V 52
/svnroot/blindelephant/!svn/ver/6/trunk/src/setup.py
END
LatestVersionFetcher.py
K 25
svn:wc:ra_dav:version-url
V 67
/svnroot/blindelephant/!svn/ver/3/trunk/src/LatestVersionFetcher.py
END
10
dir
7
https://blindelephant.svn.sourceforge.net/svnroot/blindelephant/trunk/src
https://blindelephant.svn.sourceforge.net/svnroot/blindelephant
2012-09-26T21:34:54.971098Z
7
psthomas