29 de noviembre de 2009

Script para obtener versión de WP

Haciendo uso de lo explicado en el articulo "Saca la versión de Wordpress gracias a Gears" he decidido crear un pequeño script en Python que nos diga la versión de WP que se está usando.


La manera más simple para obtener este dato de la versión es buscar el valor del campo "generator" en los metadatos del sitio:


<meta name="generator" content="WordPress 2.8.6" />

Dependiendo del tema que tengamos este dato de meta puede o no estar.


'''
@copyright: GPL v.3
@author: ehooo
@contact: <vvillahoz|at|malwareint|dot|com>
'''

from HTMLParser import HTMLParser
from httplib import HTTPException
import httplib, os, string

class ParseMetaGen(HTMLParser):
'''
Parser para obtener el metadato "generator"
'''

def __init__(self):
HTMLParser.__init__(self)
self.generator = False

def handle_startendtag(self, tag, attrs):
if tag == 'meta':
if len(attrs) == 2 and attrs[0][0] == 'name' and attrs[0][1] == 'generator':
self.generator = attrs[1][1]

def error(msg=""):
print "ERROR"+str(msg)
exit(1)

if __name__ == '__main__':
site = None

try:
opts, args = getopt.getopt(sys.argv[1:], "s", ["site="])
except getopt.error, msg:
print msg
error(": Use -s URL or --site=URL")

for o, a in opts:
if o in ("-s","--site"):
site = string.replace(a,"http://","")
else:
error(": Unhandled Option")

if site is not None:
path = site.find("/")
if path != -1:
host = site[:path]
path = site[path:]
else:
path = "/"
headers = {"Host": host, "Accept": "*/*", "User-Agent":"Spider/WP-version"}

try:
conn = httplib.HTTPConnection(host)
conn.request("GET", path, headers=headers)
respuesta = conn.getresponse()
if respuesta.status == httplib.OK:
pmg = ParseMetaGen()
pmg.feed(respuesta.read())
version = pmg.generator
if not version:#Si no obtenemos el generador buscamos en el Gears
conn.request("GET", path+"/wp-admin/gears-manifest.php", headers=headers)
respuesta = conn.getresponse()
if respuesta.status == httplib.OK:
data = respuesta.read()
if data.find("ae52efa2f066ffc235840dc615f051d7"):
version = "Wordpress 2.8.1-2.8.6"
elif data.find("068d0a4281fb2a342ba6fd73b6b93982"):
version = "Wordpress 2.8.0"
elif data.find("thickbox.js?ver=3.1-20080430"):
version = "Wordpress 2.7.0"
elif data.find("thickbox.js?ver=3.1-20090123"):
version = "Wordpress 2.7.1"
elif data.find("_20080710a"):
version = "Wordpress 2.6.0"
elif data.find("wp-admin.css?ver=2.6.1"):
version = "Wordpress 2.6.1"
elif data.find("wp-admin.css?ver=2.6.2"):
version = "Wordpress 2.6.2"
elif data.find("wp-admin.css?ver=2.6.3"):
version = "Wordpress 2.6.3"
elif data.find("wp-admin.css?ver=2.6.4"):
version = "Wordpress 2.6.4"
elif data.find("wp-admin.css?ver=2.6.5"):
version = "Wordpress 2.6.5"
else:
version = "Not Found"
elif respuesta.status == httplib.NOT_FOUND:
print "Gears Not Supported"
print "Version: "+version
except HTTPException:
error('Conection probles')
else:
error()

Para evitar que nuestro wordpress muestre la versión en los metadatos de nuestro sitio, podemos crear un simple plugin que nos eliminará este metadato, o añadir la siguiente linea a un plugin cualquiera.


remove_action('wp_head', 'wp_generator');

No hay comentarios:

Publicar un comentario