Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
sqlmapproject
GitHub Repository: sqlmapproject/sqlmap
Path: blob/master/lib/utils/deps.py
2989 views
1
#!/usr/bin/env python
2
3
"""
4
Copyright (c) 2006-2025 sqlmap developers (https://sqlmap.org)
5
See the file 'LICENSE' for copying permission
6
"""
7
8
from lib.core.data import logger
9
from lib.core.dicts import DBMS_DICT
10
from lib.core.enums import DBMS
11
from lib.core.settings import IS_WIN
12
13
def checkDependencies():
14
missing_libraries = set()
15
16
for dbmsName, data in DBMS_DICT.items():
17
if data[1] is None:
18
continue
19
20
try:
21
if dbmsName in (DBMS.MSSQL, DBMS.SYBASE):
22
__import__("_mssql")
23
24
pymssql = __import__("pymssql")
25
if not hasattr(pymssql, "__version__") or pymssql.__version__ < "1.0.2":
26
warnMsg = "'%s' third-party library must be " % data[1]
27
warnMsg += "version >= 1.0.2 to work properly. "
28
warnMsg += "Download from '%s'" % data[2]
29
logger.warning(warnMsg)
30
elif dbmsName == DBMS.MYSQL:
31
__import__("pymysql")
32
elif dbmsName in (DBMS.PGSQL, DBMS.CRATEDB):
33
__import__("psycopg2")
34
elif dbmsName == DBMS.ORACLE:
35
__import__("oracledb")
36
elif dbmsName == DBMS.SQLITE:
37
__import__("sqlite3")
38
elif dbmsName == DBMS.ACCESS:
39
__import__("pyodbc")
40
elif dbmsName == DBMS.FIREBIRD:
41
__import__("kinterbasdb")
42
elif dbmsName == DBMS.DB2:
43
__import__("ibm_db_dbi")
44
elif dbmsName in (DBMS.HSQLDB, DBMS.CACHE):
45
__import__("jaydebeapi")
46
__import__("jpype")
47
elif dbmsName == DBMS.INFORMIX:
48
__import__("ibm_db_dbi")
49
elif dbmsName == DBMS.MONETDB:
50
__import__("pymonetdb")
51
elif dbmsName == DBMS.DERBY:
52
__import__("drda")
53
elif dbmsName == DBMS.VERTICA:
54
__import__("vertica_python")
55
elif dbmsName == DBMS.PRESTO:
56
__import__("prestodb")
57
elif dbmsName == DBMS.MIMERSQL:
58
__import__("mimerpy")
59
elif dbmsName == DBMS.CUBRID:
60
__import__("CUBRIDdb")
61
elif dbmsName == DBMS.CLICKHOUSE:
62
__import__("clickhouse_connect")
63
except:
64
warnMsg = "sqlmap requires '%s' third-party library " % data[1]
65
warnMsg += "in order to directly connect to the DBMS "
66
warnMsg += "'%s'. Download from '%s'" % (dbmsName, data[2])
67
logger.warning(warnMsg)
68
missing_libraries.add(data[1])
69
70
continue
71
72
debugMsg = "'%s' third-party library is found" % data[1]
73
logger.debug(debugMsg)
74
75
try:
76
__import__("impacket")
77
debugMsg = "'python-impacket' third-party library is found"
78
logger.debug(debugMsg)
79
except ImportError:
80
warnMsg = "sqlmap requires 'python-impacket' third-party library for "
81
warnMsg += "out-of-band takeover feature. Download from "
82
warnMsg += "'https://github.com/coresecurity/impacket'"
83
logger.warning(warnMsg)
84
missing_libraries.add('python-impacket')
85
86
try:
87
__import__("ntlm")
88
debugMsg = "'python-ntlm' third-party library is found"
89
logger.debug(debugMsg)
90
except ImportError:
91
warnMsg = "sqlmap requires 'python-ntlm' third-party library "
92
warnMsg += "if you plan to attack a web application behind NTLM "
93
warnMsg += "authentication. Download from 'https://github.com/mullender/python-ntlm'"
94
logger.warning(warnMsg)
95
missing_libraries.add('python-ntlm')
96
97
try:
98
__import__("httpx")
99
debugMsg = "'httpx[http2]' third-party library is found"
100
logger.debug(debugMsg)
101
except ImportError:
102
warnMsg = "sqlmap requires 'httpx[http2]' third-party library "
103
warnMsg += "if you plan to use HTTP version 2"
104
logger.warning(warnMsg)
105
missing_libraries.add('httpx[http2]')
106
107
try:
108
__import__("websocket._abnf")
109
debugMsg = "'websocket-client' library is found"
110
logger.debug(debugMsg)
111
except ImportError:
112
warnMsg = "sqlmap requires 'websocket-client' third-party library "
113
warnMsg += "if you plan to attack a web application using WebSocket. "
114
warnMsg += "Download from 'https://pypi.python.org/pypi/websocket-client/'"
115
logger.warning(warnMsg)
116
missing_libraries.add('websocket-client')
117
118
try:
119
__import__("tkinter")
120
debugMsg = "'tkinter' library is found"
121
logger.debug(debugMsg)
122
except ImportError:
123
warnMsg = "sqlmap requires 'tkinter' library "
124
warnMsg += "if you plan to run a GUI"
125
logger.warning(warnMsg)
126
missing_libraries.add('tkinter')
127
128
try:
129
__import__("tkinter.ttk")
130
debugMsg = "'tkinter.ttk' library is found"
131
logger.debug(debugMsg)
132
except ImportError:
133
warnMsg = "sqlmap requires 'tkinter.ttk' library "
134
warnMsg += "if you plan to run a GUI"
135
logger.warning(warnMsg)
136
missing_libraries.add('tkinter.ttk')
137
138
if IS_WIN:
139
try:
140
__import__("pyreadline")
141
debugMsg = "'python-pyreadline' third-party library is found"
142
logger.debug(debugMsg)
143
except ImportError:
144
warnMsg = "sqlmap requires 'pyreadline' third-party library to "
145
warnMsg += "be able to take advantage of the sqlmap TAB "
146
warnMsg += "completion and history support features in the SQL "
147
warnMsg += "shell and OS shell. Download from "
148
warnMsg += "'https://pypi.org/project/pyreadline/'"
149
logger.warning(warnMsg)
150
missing_libraries.add('python-pyreadline')
151
152
if len(missing_libraries) == 0:
153
infoMsg = "all dependencies are installed"
154
logger.info(infoMsg)
155
156