Web安全:SqlMap工具

一、简介

        sqlmap 是一款开源的渗透测试工具,可以自动化进行SQL注入的检测、利用,并能接管数据库服务器。它具有功能强大的检测引擎,为渗透测试人员提供了许多专业的功能并且可以进行组合,其中包括数据库指纹识别、数据读取和访问底层文件系统,甚至可以通过带外数据连接的方式执行系统命令。

官网下载地址:GitHub - sqlmapproject/sqlmap: Automatic SQL injection and database takeover tool

使用方法:

python sqlmap.py 参数(Windows)

sqlmap 参数(Linux)

sqlmap可以运行在python2.6、2.7和3.x的任何平台上。

官方文档:

Usage · sqlmapproject/sqlmap Wiki (github.com)

二、使用方法

Options模块

1、 -h, --help

显示基础帮助信息。

python sqlmap.py -h

2、 -hh

显示高级帮助信息。

python sqlmap.py -h

3、 --version

显示版本信息。

python sqlmap.py -version

4、 -v VERBOSE

指定的输出信息的内容等级0-6

python sqlmap.py -u "http://ctf/sql_labs/Less-1/?id=1" -v 5

运行结果:

Target模块

1、 -u URL, --url=URL 

需要进行注入检测的目标URL。

python sqlmap.py -u "http://ctf/sql_labs/Less-1/?id=1"

2、 -d DIRECT 

通过字符串直连数据库。

争对不同的数据库有不同的连接字符串方式。

 案例:

python sqlmap.py -d "mysql://root:root@127.0.0.1:3306/testdb"

3、 -l LOGFILE 

从Burp或者WebScarab的代理日志中,解析目标。

        指定一个Burp或WebScarab的代理日志文件,Sqlmap将从日志文件中解析出可能的攻击目标,并逐个尝试进行注入。个人没尝试过!

4、 -m BULKFILE 

扫描文本文件提供的多个目标URL目标。

文本文件中包含多个URL目标,针对多个目标时候使用。

案例: 

python sqlmap.py -m url.txt

5、 -r REQUESTFILE 

从文件中加载HTTP请求。

        将一个HTTP请求保存在文件中,然后使用参数“-r”加载该文件,这样,可以跳过其他一些选项的使用(例如设置Cookie,发布数据等),以该文件中HTTP请求目标为攻击目标进行测试。

 案例:

python sqlmap.py -r a.txt

6、 -g GOOGLRFORK :将谷歌查询结果作为目标URL。

将谷歌搜索的前一百条结果,作为检测注入目标(需要科学上网(翻墙))

值:Google hack语句

实例:

sqlmap -g "inurl:\".php?id=1\""

7、 -c CONFIGFILE :从配置conf文件获取注入目标。

打开配置文件模板,填写需要的参数到模板,使用以下代码进行注入。

python sqlmap.py -c a.conf

Request模块

指定http请求的相关参数,感觉可以通过使用-r参数从文件中加载http请求更合适。

  Request:These options can be used to specify how to connect to the target URL--method=METHOD     Force usage of given HTTP method (e.g. PUT)--data=DATA         Data string to be sent through POST (e.g. "id=1")--param-del=PARA..  Character used for splitting parameter values (e.g. &)--cookie=COOKIE     HTTP Cookie header value (e.g. "PHPSESSID=a8d127e..")--cookie-del=COO..  Character used for splitting cookie values (e.g. ;)--live-cookies=L..  Live cookies file used for loading up-to-date values--load-cookies=L..  File containing cookies in Netscape/wget format--drop-set-cookie   Ignore Set-Cookie header from response-A AGENT, --user..  HTTP User-Agent header value--mobile            Imitate smartphone through HTTP User-Agent header--random-agent      Use randomly selected HTTP User-Agent header value--host=HOST         HTTP Host header value--referer=REFERER   HTTP Referer header value--headers=HEADERS   Extra headers (e.g. "Accept-Language: fr\nETag: 123")-H HEADER, --hea..  Extra header (e.g. "X-Forwarded-For: 127.0.0.1")--auth-type=AUTH..  HTTP authentication type (Basic, Digest, Bearer, ...)--auth-cred=AUTH..  HTTP authentication credentials (name:password)--auth-file=AUTH..  HTTP authentication PEM cert/private key file--abort-code=ABO..  Abort on (problematic) HTTP error code(s) (e.g. 401)--ignore-code=IG..  Ignore (problematic) HTTP error code(s) (e.g. 401)--ignore-proxy      Ignore system default proxy settings--ignore-redirects  Ignore redirection attempts--ignore-timeouts   Ignore connection timeouts--proxy=PROXY       Use a proxy to connect to the target URL--proxy-cred=PRO..  Proxy authentication credentials (name:password)--proxy-file=PRO..  Load proxy list from a file--proxy-freq=PRO..  Requests between change of proxy from a given list--tor               Use Tor anonymity network--tor-port=TORPORT  Set Tor proxy port other than default--tor-type=TORTYPE  Set Tor proxy type (HTTP, SOCKS4 or SOCKS5 (default))--check-tor         Check to see if Tor is used properly--delay=DELAY       Delay in seconds between each HTTP request--timeout=TIMEOUT   Seconds to wait before timeout connection (default 30)--retries=RETRIES   Retries when the connection timeouts (default 3)--retry-on=RETRYON  Retry request on regexp matching content (e.g. "drop")--randomize=RPARAM  Randomly change value for given parameter(s)--safe-url=SAFEURL  URL address to visit frequently during testing--safe-post=SAFE..  POST data to send to a safe URL--safe-req=SAFER..  Load safe HTTP request from a file--safe-freq=SAFE..  Regular requests between visits to a safe URL--skip-urlencode    Skip URL encoding of payload data--csrf-token=CSR..  Parameter used to hold anti-CSRF token--csrf-url=CSRFURL  URL address to visit for extraction of anti-CSRF token--csrf-method=CS..  HTTP method to use during anti-CSRF token page visit--csrf-data=CSRF..  POST data to send during anti-CSRF token page visit--csrf-retries=C..  Retries for anti-CSRF token retrieval (default 0)--force-ssl         Force usage of SSL/HTTPS--chunked           Use HTTP chunked transfer encoded (POST) requests--hpp               Use HTTP parameter pollution method--eval=EVALCODE     Evaluate provided Python code before the request (e.g."import hashlib;id2=hashlib.md5(id).hexdigest()")

1、 --method=METHOD 

指定请求的方法。

        指定HTTP请求的方法。一般情况下,会自动检测请求的方法。在某些特定的情况下需要强制指定方法。

案例:

python sqlmap.py -u “https://www.baidu.com/a.php?id=1” --method=put

2、 --data=DATA 

指定POST请求提交的参数

      当我们使用data参数,则HTTP会使用post方法将参数当作HTTP data提交,同时也会检测此参数有没有注入漏洞。

案例:

python sqlmap.py -u “https://www.baidu.com/a.php?id=1” --data="id=1"

3、 -param-del=PARAM 

指定参数分割符。

        一般情况下,网站会用&作为参数的分隔符,这也是SQLMAP默认使用的分隔符,如果有些web application不使用&作为分隔符的话,那么就使用–param-del去告诉sqlmap分隔符是什么。

 案例:

python sqlmap.py -u “http://www.xxxxx.com/a.php?id=1;food=2” --param-del=”;”

4、 cookie相关 

需要指定Cookie的情况:

        1、网站需要Cookie信息

        2、检测并利用cookie注入。(当–level设置为2或者更高的时候,sqlmap会检测cookie是否存在注入漏洞。)

参数解释
--cookie指定cookie的内容
--cookie-del          指定cookie的分割符
--live-cookies从指定的cookie文件中读取当前的cookie信息
--load-cookies   指定以 Netscape/wget 格式存放 cookies 的文件
--drop-set-cookie         忽略 HTTP 响应中的 Set-Cookie 参数

5、 user-agent相关 

设置用户代理

        默认情况下,sqlmap使用的User-Agent是sqlmap/1.0-dev-xxxxxxx (http://sqlmap.org) 。(当 --level设置为3或者更高时,sqlmap会自动检测user-agent是否存在注入漏洞)

参数解释
-A  AGENT自定义User-Agent
--random-agent    从sqlmap自带的文本文件中随机选择一个user-agent。这个文件是 ./txt/user-agents.txt
--mobile模拟手机发送请求

6、 header相关 

参数解释
--host=HOST指定HTTP请求的HOST字段
--referer=REFERER指定HTTP请求的REFERER字段
--headers=HEADERS添加额外的HTTP请求字段信息

 案例:

python sqlmap.py -u “http://www.xxx.com/a.php?id=1” --headers=”X-A : A \nX-B : B”

7、 --auth相关 

    --auth-type=AUTH..  HTTP authentication type (Basic, Digest, Bearer, ...)
    --auth-cred=AUTH..  HTTP authentication credentials (name:password)
    --auth-file=AUTH..  HTTP authentication PEM cert/private key file

后端 Web 服务器实现的 HTTP 协议认证时,所有向目标程序发起 HTTP 请求都需要有效凭据来访问。这种情况可以通过使用以下选项来指定有效凭证信息。

参数解释
--auth-type=AUTHHTTP请求认证类型(Basic,Digest,Bearer)
--auth-cred=AUTHHTTP请求认证证书,格式:name:password
--auth-file=AUTHHTTP请求认证文件PEM格式

案例: 

python sqlmap.py -u "http://192.168.136.131/sqlmap/mysql/basic/get_int.php?id\
=1" --auth-type=Basic --auth-cred="testuser:testpass"

8、 --igore相关 

    --abort-code=ABO..  Abort on (problematic) HTTP error code(s) (e.g. 401)
    --ignore-code=IG..  Ignore (problematic) HTTP error code(s) (e.g. 401)
    --ignore-proxy      Ignore system default proxy settings
    --ignore-redirects  Ignore redirection attempts
    --ignore-timeouts   Ignore connection timeouts

参数解释
--abort-code=ABO遇到指定HTTP错误码中断注入
--ignore-code=IG忽略指定的HTTP错误码
--ignore-proxy忽略系统默认代理设置
--ignore-redirects忽略重定向请求
--ignore-timeouts忽略连接超时

9、 --proxy相关 

    --proxy=PROXY       Use a proxy to connect to the target URL
    --proxy-cred=PRO..  Proxy authentication credentials (name:password)
    --proxy-file=PRO..  Load proxy list from a file
    --proxy-freq=PRO..  Requests between change of proxy from a given list

参数解释
--proxy=PROXY使用代理连接目标URL
--proxy-cred=PRO指定代理认证证书
--proxy-file=PRO

指定一个包含有代理列表的文件,在连接时,会依次使用文件里面的代理

当代理无效时,会自动调到下一个代理

--proxy-freq=PRO指定请求代理的频率

10、 --tor相关 

        假如因为相关原因需要保持匿名,可以根据 Tor 安装指南配置一个 Tor 客户端和 Privoxy(或类似的)进行代理,而不是使用单个预定义的 HTTP(S) 代理服务器。接着就可以使用开关 --tor 来让 sqlmap 尝试自动设置 Tor 代理连接。

        如果你想手动设置 Tor 代理的类型和端口,可以使用选项 --tor-type --tor-port(例如:--tor-type=SOCKS5 --tor-port=9050)。

        强烈建议偶尔使用 --check-tor 来确保一切设置正确。有些情况下 Tor 包(例如:Vidalia(译者注:Vidalia 是 Tor 的图形界面管理工具,官方已经移除对它的支持))配置错误(或重置了以前的配置)会使你以为已经成功匿名。使用这个开关,sqlmap 将在对任何目标发起请求之前发送一个请求到你正在使用 Tor?这个官方页面检查一切配置是否正常。如果检查失败,sqlmap 将警告你并直接退出。

    --tor                                     Use Tor anonymity network
    --tor-port=TORPORT          Set Tor proxy port other than default
    --tor-type=TORTYPE          Set Tor proxy type (HTTP, SOCKS4 or SOCKS5 (default))
    --check-tor                          Check to see if Tor is used properly

参数解释
--tor自动设置Tor代理连接
--tor-port指定端口
--tor-type指定类型
--check-tor检查Tor设置是否正确

11、 连接时间相关 

    --delay=DELAY       Delay in seconds between each HTTP request
    --timeout=TIMEOUT   Seconds to wait before timeout connection (default 30)
    --retries=RETRIES   Retries when the connection timeouts (default 3)
    --retry-on=RETRYON  Retry request on regexp matching content (e.g. "drop")

参数解释
--delay=DELAY每次HTTP请求间隔多少秒
--timeout=TIMEOUT指定超时连接的等待时间,默认30s
--retries=RETRIES指定超时连接的重连次数
--retry-on=RETRYON指定正则匹配的字符串,匹配成功,进行重连

案例:

sqlmap -u "http://example.com/vulnerable.php?id=1" --risk=3 --level=5 --retry-on="timeout,error" --threads=5

12、 --randomize=RPARAM 

        随机更改参数。可以指定请求参数名称,这些参数在请求期间根据原始长度和类型随机更改。这个命令会随机改变 id 参数的值,以便在测试时模拟不同的输入。

案例:

python sqlmap.py -u "http://example.com/vulnerable.php?id=1&name=test" --randomize=id

13、 --safe相关 

        Sqlmap的盲注测试会产生大量错误请求。为了避免被限制,我们可以每隔一段时间来访问正确的url。使用以下参数,sqlmap将会每隔一段时间访问一个正确的URL,并且不会对其进行任何注入。

    --safe-url=SAFEURL  URL address to visit frequently during testing
    --safe-post=SAFE..  POST data to send to a safe URL
    --safe-req=SAFER..  Load safe HTTP request from a file
    --safe-freq=SAFE..  Regular requests between visits to a safe URL

参数解释
--safe-url=SAFEURL指定安全链接URL
--safe-post=SAFE指定安全连接端口
--safe-req=SAFER从文件加载安全请求
--safe-freq=SAFE指定访问安全链接的频率

14、 --skip-urlencode 

        根据参数的位置(例如:GET),其值可能会被默认进行 URL 编码。在某些情况下,后端 Web 服务器不遵循 RFC 标准,并要求以原始非编码形式发送参数值。在这种情况下可以使用 --skip-urlencode

案例:

python sqlmap.py -u "http://example.com/vulnerable.php?id=1" --skip-urlencode

15、 --csrf相关 

        许多站点有使用 token 的反 CSRF 防护,在每个页面的响应随机设置隐藏字段值。sqlmap 将自动尝试识别并绕过这种防护,同时支持 --csrf-token--csrf-url 等选项用来做进一步调整。

        选项 --csrf-token 用于设置包含随机 token 的隐藏字段的名称。这在网站对这些字段使用非标准名称的情况下是非常有用的。选项 --csrf-url 用于从任意有效的 URL 地址获取 token 值。这在目标网址在初始地不包含必需的 token 值,而需要从其他地方提取时是非常有用的。


    --csrf-token=CSR..           Parameter used to hold anti-CSRF token
    --csrf-url=CSRFURL        URL address to visit for extraction of anti-CSRF token
    --csrf-method=CS..          HTTP method to use during anti-CSRF token page visit
    --csrf-data=CSRF..           POST data to send during anti-CSRF token page visit
    --csrf-retries=C..               Retries for anti-CSRF token retrieval (default 0)
 

参数解释
--csrf-token=CSR指定包含token的参数
--csrf-url=CSRFURL指定URL
--csrf-method=CS指定请求方法
--csrf-data=CSRF指定POST方法请求的数据
--csrf-retries=C指定重试次数

16、 杂项 

  --force-ssl                          Force usage of SSL/HTTPS
  --chunked                          Use HTTP chunked transfer encoded (POST) requests
  --hpp                                  Use HTTP parameter pollution method
  --eval=EVALCODE            Evaluate provided Python code before the request (e.g.  "import                                                 hashlib;id2=hashlib.md5(id).hexdigest()")  

参数解释
--force-ssl强制SSL连接
--chunked使用分块传输编码请求
--hpp使用参数混淆
--eval=EVALCODE在请求之前执行一段Python代码

案例:使用当前 GET 请求中的 id 参数值重新计算出对应的 MD5 哈希值,从而替换掉原来的 hash 参数值。

python sqlmap.py -u "http://www.target.com/vuln.php?id=1&hash=c4ca4238a0b9238\
20dcc509a6f75849b" --eval="import hashlib;hash=hashlib.md5(id).hexdigest()"

Enumeration模块

该模块用于导出数据库的信息。

 Enumeration:These options can be used to enumerate the back-end databasemanagement system information, structure and data contained in thetables-a, --all           Retrieve everything-b, --banner        Retrieve DBMS banner--current-user      Retrieve DBMS current user--current-db        Retrieve DBMS current database--hostname          Retrieve DBMS server hostname--is-dba            Detect if the DBMS current user is DBA--users             Enumerate DBMS users--passwords         Enumerate DBMS users password hashes--privileges        Enumerate DBMS users privileges--roles             Enumerate DBMS users roles--dbs               Enumerate DBMS databases--tables            Enumerate DBMS database tables--columns           Enumerate DBMS database table columns--schema            Enumerate DBMS schema--count             Retrieve number of entries for table(s)--dump              Dump DBMS database table entries--dump-all          Dump all DBMS databases tables entries--search            Search column(s), table(s) and/or database name(s)--comments          Check for DBMS comments during enumeration--statements        Retrieve SQL statements being run on DBMS-D DB               DBMS database to enumerate-T TBL              DBMS database table(s) to enumerate-C COL              DBMS database table column(s) to enumerate-X EXCLUDE          DBMS database identifier(s) to not enumerate-U USER             DBMS user to enumerate--exclude-sysdbs    Exclude DBMS system databases when enumerating tables--pivot-column=P..  Pivot column name--where=DUMPWHERE   Use WHERE condition while table dumping--start=LIMITSTART  First dump table entry to retrieve--stop=LIMITSTOP    Last dump table entry to retrieve--first=FIRSTCHAR   First query output word character to retrieve--last=LASTCHAR     Last query output word character to retrieve--sql-query=SQLQ..  SQL statement to be executed--sql-shell         Prompt for an interactive SQL shell--sql-file=SQLFILE  Execute SQL statements from given file(s)

1、 -a, --all 获取所有数据  

python sqlmap.py -u "http://ctf/sql_labs/Less-1/?id=1"  -a
python sqlmap.py -u "http://ctf/sql_labs/Less-1/?id=1"  --all

2、 -b, --banner 获取数据库,服务器和中间件版本号  

python sqlmap.py -u "http://ctf/sql_labs/Less-1/?id=1"  -b

3、 获取注入页面数据库管理员信息 

    --current-user      Retrieve DBMS current user
    --current-db        Retrieve DBMS current database
    --hostname          Retrieve DBMS server hostname
    --is-dba            Detect if the DBMS current user is DBA 

参数解释
--current-user获得网页DBMS的当前用户
--current-db获得网页DBMS的使用数据库
--hostname获得网页主机名
--is-dba检查当前用户是否是数据库管理员

4、 列出数据库的指定信息 

        指定要列出的信息,可根据-U、-T、-D指定列出数据的条件,也可根据  --exclude-sysdbs   来忽略一些系统表。

    --users                         Enumerate DBMS users
    --passwords                 Enumerate DBMS users password hashes
    --privileges                   Enumerate DBMS users privileges
    --roles                          Enumerate DBMS users roles
    --dbs                            Enumerate DBMS databases
    --tables                        Enumerate DBMS database tables
    --columns                    Enumerate DBMS database table columns
    --schema                     Enumerate DBMS schema

参数解释
--users

列出所有DBMS用户

--passwords

列出所有DBMS用户密码的哈希值

-U 选项来指定要枚举出角色的用户

--privileges

列出所有DBMS用户权限

-U 选项来指定要枚举出角色的用户

--roles

列出所有DBMS用户角色

-U 选项来指定要枚举出角色的用户

--dbs列出 DBMS 所有数据库
--tables列出 DBMS 所有数据表
--columns列出 DBMS 所有列
--schema列出DBMS 所有模式

 

5、 --count 获取表的条目数 

 --count             Retrieve number of entries for table(s)

6、 拖库处理 


    --dump              Dump DBMS database table entries
    --dump-all          Dump all DBMS databases tables entries

    --exclude-sysdbs    Exclude DBMS system databases when enumerating tables

7、 --search 搜索列、表和数据库 

8、 自定义SQL 

    --sql-query=SQLQ..  SQL statement to be executed
    --sql-shell         Prompt for an interactive SQL shell
    --sql-file=SQLFILE  Execute SQL statements from given file(s)
 

9、 设置转储条件 

  --pivot-column=P..  Pivot column name
    --where=DUMPWHERE   Use WHERE condition while table dumping
    --start=LIMITSTART  First dump table entry to retrieve
    --stop=LIMITSTOP    Last dump table entry to retrieve
    --first=FIRSTCHAR   First query output word character to retrieve
    --last=LASTCHAR     Last query output word character to retrieve

10、 指定参数 

    -D DB                      DBMS database to enumerate
    -T TBL                     DBMS database table(s) to enumerate
    -C COL                    DBMS database table column(s) to enumerate
    -X EXCLUDE          DBMS database identifier(s) to not enumerate
    -U USER                 DBMS user to enumerate


参考资料:

sqlmap 用户手册 (highlight.ink)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/402680.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

柔性超级电容器咋储能?生物聚合物在其中起啥作用?有啥挑战?

*本文只作阅读笔记分享* 一、引言 随着对化石燃料影响的日益关注,开发用于先进电化学能量存储设备的绿色和可再生材料变得至关重要。超级电容器因其出色的寿命、安全性和宽温度操作范围等优势而成为有前途的储能候选者。柔性超级电容器特别适合为轻质可穿戴电子设…

我常用的几个傻瓜式爬虫工具,收藏!

爬虫类工具主要两种,一种是编程语言第三方库,比如Python的scrapy、selenium等,需要有一定的代码基础,一种是图形化的web或桌面应用,比如Web Scraper、后羿采集器、八爪鱼采集器、WebHarvy等,接近于傻瓜式操…

qt生成一幅纯马赛克图像

由于项目需要&#xff0c;需生成一幅纯马赛克的图像作为背景&#xff0c;经过多次测试成功&#xff0c;记录下来。 方法一&#xff1a;未优化方法 1、代码&#xff1a; #include <QImage> #include <QDebug> #include <QElapsedTimer>QImage generateMosa…

MyBatis全解

目录 一&#xff0c; MyBatis 概述 1.1-介绍 MyBatis 的历史和发展 1.2-MyBatis 的特点和优势 1.3-MyBatis 与 JDBC 的对比 1.4-MyBatis 与其他 ORM 框架的对比 二&#xff0c; 快速入门 2.1-环境搭建 2.2-第一个 MyBatis 应用程序 2.3-配置文件详解 (mybatis-config.…

Pikachu-XSS漏洞之cookie值获取、钓鱼结果和键盘记录实战记录

目录 Pikachu-XSS漏洞之cookie值获取、钓鱼结果和键盘记录实战记录 一、XSS&#xff08;get型&#xff09;之cookie值获取&#xff1a; 二、xss&#xff08;post型&#xff09;之cookie值获取 三、Xss之钓鱼攻击 四、XSS获取键盘记 Pikachu-XSS漏洞之cookie值获取、钓鱼结果…

坐牢第二十七天(聊天室)

基于UDP的网络聊天室 一.项目需求&#xff1a; 1.如果有用户登录&#xff0c;其他用户可以收到这个人的登录信息 2.如果有人发送信息&#xff0c;其他用户可以收到这个人的群聊信息 3.如果有人下线&#xff0c;其他用户可以收到这个人的下线信息 4.服务器可以发送系统信息…

算法工程师第四十天(647. 回文子串 516.最长回文子序列 动态规划总结篇 )

参考文献 代码随想录 一、回文子串 给你一个字符串 s &#xff0c;请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串 是字符串中的由连续字符组成的一个序列。 示例 1&#xff1a; 输入&#xff1a;s "abc"…

【stm32项目】多功能智能家居室内灯光控制系统设计与实现(完整工程资料源码)

多功能智能家居室内灯光控制系统设计与实现 目录&#xff1a; 目录&#xff1a; 前言&#xff1a; 一、项目背景与目标 二、国内外研究现状&#xff1a; 2.1 国内研究现状&#xff1a; 2.2 国外研究现状&#xff1a; 2.3 发展趋势 三、硬件电路设计 3.1 总体概述 3.2 硬件连接总…

图像压缩算法

8.1 JPEG压缩 (JPEG Compression) 介绍 JPEG&#xff08;Joint Photographic Experts Group&#xff09;压缩是最常用的有损图像压缩算法之一。它通过减少图像中的冗余数据来实现高效压缩&#xff0c;特别适用于自然图像。 原理 JPEG压缩的基本步骤包括颜色空间转换、离散余…

WPF篇(18)-DataGrid数据表格控件+ComboBox下拉框控件

DataGrid数据表格控件 DataGrid是一个可以多选的数据表格控件。所以&#xff0c;它继承一个支持多选的父类——MultiSelector。 public abstract class MultiSelector : Selector {protected MultiSelector();public IList SelectedItems { get; }protected bool CanSelectMu…

Python学习day16-类与对象

这里写目录标题 类示例 成员方法self关键字 类与对象构造方法其他类内置方法&#xff08;魔术方法&#xff09;_str_符号_Lt_符号le小于等于比较eq比较运算小结 类 在Python中&#xff0c;class&#xff08;类&#xff09;是一种用于创建对象的模板或蓝图。它封装了数据&#…

基于Django的停车场车辆出入管理系统,可识别车牌图片

研究背景 随着城市化进程的加快&#xff0c;车辆数量不断增加&#xff0c;停车场的管理成为一个日益重要的课题。传统的停车场管理系统依赖人工登记和监控&#xff0c;不仅效率低下&#xff0c;而且容易出现疏漏和错误&#xff0c;难以满足现代社会对停车场管理智能化、高效化…

STM32标准库学习笔记-3.外部中断

参考教程&#xff1a;【STM32入门教程-2023版 细致讲解 中文字幕】 中断 中断含义&#xff1a;在计算机执行主程序运行过程中&#xff0c;出现了特定的中断触发条件&#xff08;中断源&#xff09;&#xff0c;使得CPU暂停当前正在运行的程序&#xff0c;转而去处理中断程序&…

2024 国内自闭症学校排名榜:突破边界,创造无限可能

在 2024 年&#xff0c;当家长们面对国内自闭症学校的排名榜时&#xff0c;心中或许充满了期待与困惑。然而&#xff0c;这些排名榜虽然能提供一定的参考&#xff0c;但绝不能成为选择学校的唯一依据。家长们更需要深入了解每所学校的真实情况&#xff0c;通过线下考察&#xf…

python及pycharm安装配置

PS&#xff1a;这篇是对于初学者的python以及pycharm配置教程&#xff0c;配置完成后可以直接看我的python学习笔记来进行python全套学习&#xff0c;现在已更新第一部分。 Python学习笔记&#xff08;一&#xff09;-CSDN博客 目录 一、python以及pycharm的安装配置 1.1 py…

Nuxt3:构建的时候报错Search string not found: “for (const existingRoot of buildInfoVersionMap.roots)

我们完成初步页面开发后&#xff0c;需要构建下项目生成我们需要的页面&#xff0c;在执行构建的时候报错&#xff1a; 找了很多资料&#xff0c;这个问题是由于 vue-tsc v1 版本引起&#xff0c;只需要将 vue-tsc 升级到v2 即可 我们在执行删除的时候&#xff0c;结果发现它…

【MySQL】数据库约束

系列文章目录 第一章 数据库基础 第二章 数据库基本操作 文章目录 系列文章目录前言约束关键字一览NOT NULLUNIQUEDEFAULTPRIMARY KEY自增主键 FOREIGN KEY总结 前言 在学习了数据库的增删改查操作之后&#xff0c;接下来就需要进阶的学习关键字来完善SQL语句的条件。学习数据…

数据结构----链表

一丶概念 链表又称单链表、链式存储结构&#xff0c;用于存储逻辑关系为“一对一”的数据。 和顺序表不同同&#xff0c;使用链表存储数据&#xff0c;不强制要求数据在内存中集中存储&#xff0c;各个元素可以分散存储在内存中。 二丶特点 特点&#xff1a;内存不连…

DolphinScheduler集群部署问题(趟坑)总结

目录 官方文档 官方项目地址 问题解决 官方文档 DolphinScheduler | 文档中心 (apache.org) 官方项目地址 部署及使用过程中的问题可以参见项目Issue:Issues apache/dolphinscheduler GitHub GitHub - apache/dolphinscheduler at 3.2.2-release 问题解决 1、JVM在运…

Simple RPC - 05 从零开始设计一个客户端(下)_ 依赖倒置和SPI

文章目录 Pre概述依赖倒置原则与解耦设计与实现1. 定义接口来隔离调用方与实现类2. 实现类DynamicStubFactory3. 调用方与实现类的解耦 依赖注入与SPI的解耦依赖注入SPI&#xff08;Service Provider Interface&#xff09; 总结 Pre Simple RPC - 01 框架原理及总体架构初探 …