sqlmap/lib/utils/deps.py

112 lines
4.2 KiB
Python
Raw Normal View History

#!/usr/bin/env python
"""
2018-01-02 02:48:10 +03:00
Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/)
2017-10-11 15:50:46 +03:00
See the file 'LICENSE' for copying permission
"""
from lib.core.data import logger
2012-08-21 13:19:15 +04:00
from lib.core.dicts import DBMS_DICT
from lib.core.enums import DBMS
from lib.core.settings import IS_WIN
2011-06-13 23:00:27 +04:00
def checkDependencies():
missing_libraries = set()
for dbmsName, data in DBMS_DICT.items():
if data[1] is None:
continue
try:
if dbmsName in (DBMS.MSSQL, DBMS.SYBASE):
2016-12-20 01:47:39 +03:00
__import__("_mssql")
2016-12-20 01:47:39 +03:00
import pymssql
if not hasattr(pymssql, "__version__") or pymssql.__version__ < "1.0.2":
warnMsg = "'%s' third-party library must be " % data[1]
warnMsg += "version >= 1.0.2 to work properly. "
warnMsg += "Download from %s" % data[2]
logger.warn(warnMsg)
elif dbmsName == DBMS.MYSQL:
2016-12-20 01:47:39 +03:00
__import__("pymysql")
elif dbmsName == DBMS.PGSQL:
2016-12-20 01:47:39 +03:00
__import__("psycopg2")
elif dbmsName == DBMS.ORACLE:
2016-12-20 01:47:39 +03:00
__import__("cx_Oracle")
elif dbmsName == DBMS.SQLITE:
2016-12-20 01:47:39 +03:00
__import__("sqlite3")
elif dbmsName == DBMS.ACCESS:
2016-12-20 01:47:39 +03:00
__import__("pyodbc")
elif dbmsName == DBMS.FIREBIRD:
2016-12-20 01:47:39 +03:00
__import__("kinterbasdb")
2013-01-17 18:20:34 +04:00
elif dbmsName == DBMS.DB2:
2016-12-20 01:47:39 +03:00
__import__("ibm_db_dbi")
2013-07-01 14:50:03 +04:00
elif dbmsName == DBMS.HSQLDB:
2016-12-20 01:47:39 +03:00
__import__("jaydebeapi")
__import__("jpype")
elif dbmsName == DBMS.INFORMIX:
2016-12-20 01:47:39 +03:00
__import__("ibm_db_dbi")
2017-10-20 11:00:26 +03:00
except:
2012-10-30 14:54:21 +04:00
warnMsg = "sqlmap requires '%s' third-party library " % data[1]
2014-12-05 13:15:33 +03:00
warnMsg += "in order to directly connect to the DBMS "
warnMsg += "'%s'. Download from %s" % (dbmsName, data[2])
logger.warn(warnMsg)
missing_libraries.add(data[1])
continue
debugMsg = "'%s' third-party library is found" % data[1]
logger.debug(debugMsg)
try:
2016-12-20 01:47:39 +03:00
__import__("impacket")
debugMsg = "'python-impacket' third-party library is found"
logger.debug(debugMsg)
except ImportError:
2012-10-30 14:54:21 +04:00
warnMsg = "sqlmap requires 'python-impacket' third-party library for "
warnMsg += "out-of-band takeover feature. Download from "
warnMsg += "http://code.google.com/p/impacket/"
logger.warn(warnMsg)
missing_libraries.add('python-impacket')
try:
2016-12-20 01:47:39 +03:00
__import__("ntlm")
debugMsg = "'python-ntlm' third-party library is found"
logger.debug(debugMsg)
except ImportError:
2015-05-11 12:01:21 +03:00
warnMsg = "sqlmap requires 'python-ntlm' third-party library "
warnMsg += "if you plan to attack a web application behind NTLM "
warnMsg += "authentication. Download from http://code.google.com/p/python-ntlm/"
logger.warn(warnMsg)
missing_libraries.add('python-ntlm')
try:
2016-12-20 01:47:39 +03:00
__import__("websocket.ABNF")
debugMsg = "'python websocket-client' library is found"
logger.debug(debugMsg)
except ImportError:
2015-05-11 12:01:21 +03:00
warnMsg = "sqlmap requires 'websocket-client' third-party library "
warnMsg += "if you plan to attack a web application using WebSocket. "
warnMsg += "Download from https://pypi.python.org/pypi/websocket-client/"
logger.warn(warnMsg)
missing_libraries.add('websocket-client')
if IS_WIN:
try:
2016-12-20 01:47:39 +03:00
__import__("pyreadline")
debugMsg = "'python-pyreadline' third-party library is found"
logger.debug(debugMsg)
except ImportError:
2012-10-30 14:54:21 +04:00
warnMsg = "sqlmap requires 'pyreadline' third-party library to "
warnMsg += "be able to take advantage of the sqlmap TAB "
warnMsg += "completion and history support features in the SQL "
warnMsg += "shell and OS shell. Download from "
warnMsg += "http://ipython.scipy.org/moin/PyReadline/Intro"
logger.warn(warnMsg)
missing_libraries.add('python-pyreadline')
if len(missing_libraries) == 0:
2011-06-13 23:00:27 +04:00
infoMsg = "all dependencies are installed"
logger.info(infoMsg)