kali系统

概述

实际上它就是一个预安装了很多安全工具的Debian Linxu。

nmap(Network Mapper)扫描

nmap是一个免费开放的网络扫描和嗅探的工具包,也叫网络映射器。

nmap的强大之处在于简单易用。看一下nmap的基本功能:

  1. 探测一组主机是否在线
  2. 扫描主机端口、嗅探所提供的网络服务
  3. 推断出主机所用的操作系统
  4. 丰富的脚本功能

一般来说扫描是攻击的前奏

扫描可以识别目标对象是什么系统,开放了哪些服务

获知具体的服务软件及其版本号,可以使得攻击的成功率大大提升

扫描可以检测潜在的风险,也可以寻找攻击目标、收集信息、找到漏洞

windows下,扫描可以使用xscan / superscan

Linux,扫描可以采用nmap

吾爱破解:吾爱破解 - LCG - LSG|安卓破解|病毒分析|www.52pojie.cn

中国黑客团队论坛:https://www.cnhackteam.org/

俄罗斯论坛:https://rutracker.org/

┌──(kali㉿kali)-[~]
└─$ nmap
# -sT: TCP扫描。
# -sU: 扫描目标的UDP端口。
# -sP:ping扫描
# -A:对目标系统全面分析# 扫描整个网段,哪机器可以ping通
┌──(kali㉿kali)-[~]
└─$ nmap -sP 192.168.88.0/24# 扫描192.168.88.100开放了哪些TCP端口
┌──(kali㉿kali)-[~]
└─$ sudo nmap -sT 192.168.88.100# 扫描192.168.88.100开放了哪些UDP端口。非常耗时!
┌──(kali㉿kali)-[~]
└─$ sudo nmap -sU 192.168.88.100# 全面扫描192.168.88.100系统信息
┌──(kali㉿kali)-[~]
└─$ sudo nmap -A 192.168.88.100

使用脚本扫描

# 通过脚本扫描目标主机的ftp服务
# 在目标主机上安装vsftpd服务
[root@web1 ~]# yum install -y vsftpd
[root@web1 ~]# vim /etc/vsftpd/vsftpd.conf 
12 anonymous_enable=YES                #允许匿名访问
[root@web1 ~]# systemctl enable vsftpd --now# 在kali主机上查看有哪些脚本
┌──(kali㉿kali)-[~]
└─$ ls /usr/share/nmap/scripts/# 扫描ftp服务是否支持匿名访问。ftp控制连接端口号是21
┌──(kali㉿kali)-[~]
└─$ sudo nmap --script=ftp-anon.nse 192.168.88.100 -p 21
21/tcp open  ftp
| ftp-anon: Anonymous FTP login allowed   # 允许匿名访问# 扫描ftp相关信息,如版本号、带宽限制等
┌──(kali㉿kali)-[~]
└─$ sudo nmap --script=ftp-syst.nse 192.168.88.100 -p 21# 扫描ftp后门漏洞
┌──(kali㉿kali)-[~]
└─$ sudo nmap --script=ftp-vsftpd-backdoor 192.168.88.100 -p 21

扫描口令

# 通过ssh协议,使用nmap自带的密码本扫描远程主机的用户名和密码
# 在目标主机上创建名为admin的用户,密码为123456
[root@web1 ~]# useradd admin
[root@web1 ~]# echo 123456 | passwd --stdin admin(或:passwd --stdin admin <<< 123456)# 在kali上扫描弱密码
┌──(kali㉿kali)-[~]
└─$ sudo nmap --script=ssh-brute.nse 192.168.88.100 -p 22# 通过ssh协议,使用nmap以及自己的密码本扫描远程主机的密码
# 1. 创建用户名文件
┌──(kali㉿kali)-[~]
└─$ sudo echo root > /tmp/users.txt
# 2. 生成1990-01-01到2020-12-31之间的所月日期
┌──(kali㉿kali)-[~]
└─$ vim mydate.py
from datetime import datetime, timedeltad1 = datetime(1989, 12, 31)
d2 = datetime(2021, 1, 1)
dt = timedelta(days=1)with open('/tmp/mima.txt', 'w') as f:while d1 < d2:d1 += dtf.write("%s\n" % d1.strftime('%Y%m%d'))┌──(kali㉿kali)-[~]
└─$ python3 mydate.py# 3. 修改web1的密码
[root@web1 ~]# echo 19910101 | passwd --stdin root# 4. 使用自己的密码本破解密码
┌──(kali㉿kali)-[~]
└─$ sudo nmap --script=ssh-brute.nse --script-args userdb=/tmp/users.txt,passdb=/tmp/mima.txt 192.168.88.100 -p 22# 5. 目标主机将会记录所有的登陆事件
[root@web1 ~]# vim /var/log/secure
# 查看最近的登陆失败事件
[root@web1 ~]# lastb
# 查看最近的登陆成功事件
[root@web1 ~]# last

扫描windows口令

[root@myhost ~]# cat /tmp/winuser.txt    # windows用户名
administrator
admin
# 通过samba服务扫描密码
[root@myhost ~]# nmap --script=smb-brute.nse --script-args userdb=/tmp/winuser.txt,passdb=/tmp/mima 172.40.0.151

使用john破解密码

在线破解哈希值的网站:md5在线解密破解,md5解密加密

哈希是算法,英文hash的音译,包括md5、sha等

  • 哈希算法是一种单向加密的算法,也就是将原始数据生成一串“乱码”
  • 只能通过原始数据,生成这串“乱码”,但是不能通过“乱码”回推出原始数据
  • 相同的原始数据,生成的乱码是相同的

kali系统提供了一个名为john的工具,可用于密码破解

[root@web1 ~]# echo 123456 | passwd --stdin root
[root@web1 ~]# useradd tom
[root@web1 ~]# echo abc123 | passwd --stdin tom
[root@web1 ~]# useradd jerry
[root@web1 ~]# echo 123123 | passwd --stdin jerry
[root@web1 ~]# scp /etc/shadow kali@192.168.88.40:/home/kali/# 字典暴力破解,密码本是/usr/share/john/password.lst
┌──(kali㉿kali)-[~]
└─$ sudo john shadow  # 直接显示破解的密码,不显示其他额外信息
┌──(kali㉿kali)-[~]
└─$ sudo john --show shadow                
root:123456:18912:0:99999:7:::
tom:abc123:18912:0:99999:7:::
jerry:123123:18912:0:99999:7:::# 字典暴力破解,指定密码本文件
┌──(kali㉿kali)-[~]
└─$ sudo john --wordlist=/tmp/mima.txt shadow

抓包

实施抓包

传输的各种数据,在网络中都是一个个的数据包

NO-GUI的抓包分析工具,运行在命令行下的抓包工具

┌──(kali㉿kali)-[~]
└─$ sudo tcpdump
# -i:指定抓取哪块网卡进入的数据包
# -A:转换为ASCII码,使得可读
# -w:抓包写入文件
# -r:从文件中读取抓包信息
# 抓包时可以过滤要抓哪些包
# 使用host过滤主机,使用net过滤网段,使用port过滤端口... ...# 1. 抓包:抓取eth0上进出的、与192.168.88.100有关的、涉及TCP21端口的数据包。以下命令执行后,打开新终端。
┌──(kali㉿kali)-[~]
└─$ sudo tcpdump -i eth0 -A host 192.168.88.100 and tcp port 21# 2. 在新终端登陆ftp
┌──(kali㉿kali)-[~]
└─$ ftp 192.168.88.100
Connected to 192.168.88.100.
220 (vsFTPd 3.0.2)
Name (192.168.88.11:kali): tom   # 用户名
331 Please specify the password.
Password:abc123   # 此处是tom的密码
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> exit    # 退出
221 Goodbye.# 3.在tcpdump终端可以看到明文的用户名和密码# 保存抓包文件
# 1. 将抓到的包存入文件ftp.cap
┌──(kali㉿kali)-[~]
└─$ sudo tcpdump -i eth0 -A -w ftp.cap host 192.168.88.100 and tcp port 21# 2. 在另一个终端访问ftp
# 在新终端登陆ftp
┌──(kali㉿kali)-[~]
└─$ ftp 192.168.88.100
Connected to 192.168.88.100.
220 (vsFTPd 3.0.2)
Name (192.168.88.11:kali): tom    # 用户名
331 Please specify the password.
Password:abc123                   # 此处是tom的密码
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> exit                         # 退出
221 Goodbye.# 3. 在抓包终端ctrl+c停止
# 4. 读取抓到的包,并过滤
┌──(kali㉿kali)-[~]
└─$ tcpdump -A -r ftp.cap | egrep 'USER|PASS' 

图形工具:wireshark

[root@myhost ~]# yum install wireshark

安全加固

nginx安全

安装启服务

[root@web1 ~]# yum install -y nginx
[root@web1 ~]# systemctl enable nginx --now

仅显示文档信息

[root@web1 ~]# curl -I http://192.168.88.100/
HTTP/1.1 200 OK
Server: nginx/1.14.1                    # 版本号
Date: Mon, 02 Jan 2023 02:54:45 GMT
Content-Type: text/html
Content-Length: 3429
Last-Modified: Thu, 10 Jun 2021 09:09:03 GMT
Connection: keep-alive
ETag: "60c1d6af-d65"
Accept-Ranges: bytes

隐藏版本信息

[root@web1 ~]# vim /etc/nginx/nginx.conf
... ...17 http {18     server_tokens off;
... ...
[root@web1 ~]# systemctl restart nginx.service 

再次访问,版本号消失

[root@web1 ~]# curl -I http://192.168.88.100/
HTTP/1.1 200 OK
Server: nginx                        # 没有版本号了
Date: Mon, 02 Jan 2023 02:56:26 GMT
Content-Type: text/html
Content-Length: 3429
Last-Modified: Thu, 10 Jun 2021 09:09:03 GMT
Connection: keep-alive
ETag: "60c1d6af-d65"
Accept-Ranges: bytes

防止DOS、DDOS攻击

DDOS:分布式拒绝服务

# 压力测试,每批次发送100个请求给web服务器,一共发200个
[root@myhost ~]# yum install -y httpd-tools
[root@myhost ~]# ab -c 100 -n 200 http://192.168.88.100/ 
... ...
Benchmarking 192.168.88.100 (be patient)
Completed 100 requests
Completed 200 requests
Finished 200 requests         # 发送200个请求完成
... ... 
Complete requests:      200   # 完成了200个请求
Failed requests:        0     # 0个失败
... ...

配置nginx连接共享内存为10M,每秒只接受一个请求,最多有5个请求排队,多余的拒绝

[root@web1 ~]# vim /etc/nginx/nginx.conf17 http {18     limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;   # 添加
... ...40     server {41         listen       80 default_server;42         listen       [::]:80 default_server;43         server_name  _;44         root         /usr/share/nginx/html;45         limit_req zone=one burst=5;                  # 添加
[root@web1 ~]# systemctl restart nginx.service # 再次测试
[root@myhost ~]# ab -c 100 -n 200 http://192.168.88.100/ 
... ...
Benchmarking 192.168.88.100 (be patient)
Completed 100 requests
Completed 200 requests
Finished 200 requests
... ...
Complete requests:      200
Failed requests:        194   # 失败了194个
... ...

limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

这个nginx配置指令用于设置请求速率限制。limit_req_zone 指令用于定义限制请求的参数。$binary_remote_addr 是一个nginx变量,用于表示客户端的IP地址。zone=one:10m 定义了一个名为 one 的共享内存区域,大小为10兆字节。这个共享内存区域用于存储每个IP地址的状态信息以及其对请求限制的访问频率。 rate=1r/s 设置了请求的最大处理速率。这里的 1r/s 表示每秒最多处理1个请求。这意味着nginx会以每秒1个请求的速率来处理来自每个独立IP的请求。

这个配置的作用是限制来自单个IP地址的请求处理速率,以防止恶意请求或者过多的请求对服务器造成影响。

如果共享内存区域的存储空间耗尽,nginx会删除最旧的状态信息,如果删除后仍然无法容纳新记录,nginx将返回503状态码。

limit_req zone=one burst=5;

burst burst参数定义了客户端可以在超过 rate 定义的速率限制的情况下发出的请求数量。如果客户端在上一个请求之后的时间间隔内发送多个请求,nginx会将第二个请求放入队伍中。burst 参数指定了队列的大小,如果队列中的请求数量超过了 burst 参数定义的大小,nginx将返回503状态码。

指令表示对来自单个IP地址的请求进行限制。最大突发量为5.这意味着如果客户端在短时间内发送了超过5个请求,发送的请求将被放入队列,直到队列中的请求数量超过5个,此时nginx将返回503状态码

防止缓冲区溢出

缓冲区溢出定义:程序企图在预分配的缓冲区之外写数据

漏洞危害:用于更改程序执行流,控制函数返回值,执行任意代码

# 配置nginx缓冲区大小,防止缓冲区溢出
[root@web1 ~]# vim /etc/nginx/nginx.conf
... ...17 http {18     client_body_buffer_size     1k;19     client_header_buffer_size   1k;20     client_max_body_size        1k;21     large_client_header_buffers 2 1k;
... ...
[root@web1 ~]# systemctl restart nginx.service 

Linux加固

chage:更改用户密码到期信息

设置tom帐号,有效期为

# 查看tom的账号信息
[root@web1 ~]# chage -l tom 
Last password change                                    : Jan 03, 2024    #最近一次密码修改时间
Password expires                                        : never           #密码过期时间
Password inactive                                       : never           #密码失效时间
Account expires                                         : never           #账户过期时间
Minimum number of days between password change          : 0               #两次改变密码之间相距的最小天数
Maximum number of days between password change          : 99999           #两次改变密码之间相距的最小天数
Number of days of warning before password expires       : 7               #在密码过期之前警告的天数[root@web1 ~]# chage -m1 -M90 -W7 -I15 -E 2025-1-1 tom
[root@web1 ~]# chage -l tom 
Last password change                                    : Jan 03, 2024
Password expires                                        : Apr 02, 2024
Password inactive                                       : Apr 17, 2024
Account expires                                         : Jan 01, 2025
Minimum number of days between password change          : 1
Maximum number of days between password change          : 90
Number of days of warning before password expires       : 7# 设置账号永不过期,注意-E后面是数字-1,不是字母l
[root@web1 ~]# chage -E -1 tom
[root@web1 ~]# chage -l tom 
Last password change                                    : Jan 03, 2024
Password expires                                        : Apr 02, 2024
Password inactive                                       : Apr 17, 2024
Account expires                                         : never
Minimum number of days between password change          : 1
Maximum number of days between password change          : 90
Number of days of warning before password expires       : 7# 设置新建用户的密码策略
[root@web1 ~]# vim /etc/login.defs 
39 PASS_MAX_DAYS   99999    # 密码永不过期,设置最长有效期
40 PASS_MIN_DAYS   0        # 密码最短使用时间,0表示随时可改密码
41 PASS_MIN_LEN    5        # 密码最短长度
42 PASS_WARN_AGE   7        # 密码过期前7天发警告
47 UID_MIN                  1000   # 新建用户最小的UID
48 UID_MAX                 60000   # 新建用户最大的UID

用户安全设置

# 锁定tom账号
[root@web1 ~]# passwd -l tom 
Locking password for user tom.
passwd: Success[root@web1 ~]# passwd -S tom        # 查看状态
tom LK 2024-01-03 1 90 7 15 (Password locked.)# 解锁tom账号
[root@web1 ~]# passwd -u tom 
Unlocking password for user tom.
passwd: Success
[root@web1 ~]# passwd -S tom 
tom PS 2024-01-03 1 90 7 15 (Password set, SHA512 crypt.)

保护文件

# 查看文件的特殊属性
[root@web1 ~]# lsattr /etc/passwd
---------------- /etc/passwd    # 没有特殊属性# 修改属性
chattr +i 文件    # 不允许对文件做任何操作,只能看
chattr -i 文件    # 去除i属性
chattr +a 文件    # 文件只允许追加
chattr -a 文件    # 去除a属性[root@web1 ~]# chattr +i /etc/passwd
[root@web1 ~]# lsattr /etc/passwd
----i----------- /etc/passwd
[root@web1 ~]# useradd zhangsan
useradd:无法打开 /etc/passwd
[root@web1 ~]# rm -f /etc/passwd
rm: 无法删除"/etc/passwd": 不允许的操作
[root@web1 ~]# chattr -i /etc/passwd
[root@web1 ~]# rm -f /etc/passwd   # 可以删除
[root@web1 ~]# ls /etc/passwd
ls: 无法访问/etc/passwd: 没有那个文件或目录# 恢复passwd文件
[root@web1 ~]# cp /etc/passwd- /etc/passwd# 追加
[root@web1 ~]# chattr +a /etc/hosts
[root@web1 ~]# echo 'hello world' >> /etc/hosts
[root@web1 ~]# rm -f /etc/hosts
rm: 无法删除"/etc/hosts": 不允许的操作

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

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

相关文章

YOLOv5独家原创改进:新颖的Shape IoU结合 Inner-IoU,基于辅助边框的IoU损失的同时关注边界框本身的形状和尺度,小目标实现高效涨点

💡💡💡本文改进:一种新的Shape IoU方法结合 Inner-IoU,基于辅助边框的IoU损失的同时,更加关注边界框本身的形状和尺度来计算损失 💡💡💡对小目标检测涨点明显,在VisDrone2019、PASCAL VOC均有涨点 收录 YOLOv5原创自研 https://blog.csdn.net/m0_63774211/ca…

图像处理中的DCT变换

图像处理中的DCT变换 Discrete Cosine Transform&#xff0c;离散余弦变换。 来源及公式推导&#xff0c;可以查看下面链接&#xff0c;介绍的比较详细&#xff0c;这里就不再重复说明了&#xff1a; 详解离散余弦变换&#xff08;DCT&#xff09; - 知乎 (zhihu.com)DCT变换…

关于openssh 9.6 p1 版本ssh-keygen -t rsa报错解决—— 筑梦之路

背景说明 执行命令ssh-keygen -t rsa 提示unknown key type rsa 执行命令ssh-keygen -t dsa 提示unknown key type dsa 从官方文档中看到9.5以后ssh-keygen 默认使用Ed25519加密算法&#xff0c;详情请阅读&#xff1a;OpenSSH: Release Notes 从官方文档中可查&#xff0c;…

Excel如何将单元格设为文本

文章目录 一、打开excel文件二、选中单元格三、右键设置单元格格式四、设置界面选择文本后点确定五、其他问题 在caa开发过程中遇到从CATUnicodeString转成CString时&#xff0c;通过SetItemText写入将ID号写入单元格&#xff0c;无法保存ID号中的数字0&#xff0c;故将单元格格…

03 decision tree(决策树)

一、decision tree&#xff08;决策树&#xff09; 1. classification problems&#xff08;纯度&#xff09; i . entropy &#xff08;熵&#xff09; ​ 作用&#xff1a;衡量一组数据的纯度是否很纯 &#xff0c;当五五开时他的熵都是最高的&#xff0c;当全是或者都不是…

【计算机算法设计与分析】棋盘覆盖问题(C++_分治法)

文章目录 题目描述测试样例算法原理算法实现参考资料 题目描述 在一个 2 k 2 k 2^k \times 2^k 2k2k个方格组成的棋盘中&#xff0c;若恰有一个方格与其他方格不同&#xff0c;则称该方格为一个特殊方格&#xff0c;且称该棋盘为一个特殊棋盘。显然&#xff0c;特殊方格在棋…

机器视觉系统选型-线阵工业相机选型

线阵相机特点&#xff1a; 1.线阵相机使用的线扫描传感器通常只有一行感光单元&#xff08;少数彩色线阵使用三行感光单元的传感器&#xff09; 2.线阵相机每次只采集一行图像&#xff1b; 3.线阵相机每次只输出一行图像&#xff1b; 4.与传统的面阵相机相比&#xff0c;面阵扫…

mysql之CRUD和常见函数和UNION 和 UNION ALL

mysql之CRUD和常见函数和UNION 和 UNION ALL 一.CRUD1.创建&#xff08;Create&#xff09; - 插入数据2.读取&#xff08;Read&#xff09; - 查询数据3.更新&#xff08;Update&#xff09; - 修改数据4.删除&#xff08;Delete&#xff09; - 删除数据 二.函数1.字符串函数&…

并发程序设计--D4GDB调试多进程程序

使用GDB调试此程序 start后 10行进入father进程&#xff0c;接下来会一直在父进程不断执行程序 那么如何进入子进程&#xff1f; 此时杀死此程序进程 重新gdb调试&#xff0c;使用以下命令&#xff0c;再使用n&#xff0c;可进入子进程 那么如何同时调试父进程和子进程 上图可…

210.【2023年华为OD机试真题(C卷)】最多购买宝石数目(贪心算法实现-JavaPythonC++JS实现)

🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目-最多购买宝石数目二.解题思路三.题解代码Pytho…

Linux上创建IntelliJ IDEA的快捷方式

在Linux上创建IntelliJ IDEA的快捷方式可以通过以下步骤完成&#xff1a; 打开终端&#xff0c;进入要创建快捷方式的目录。例如&#xff0c;如果想将快捷方式放在桌面上&#xff0c;可以使用以下命令进入桌面目录&#xff1a; cd ~/Desktop使用文本编辑器创建一个新的.deskt…

年终护眼台灯哪个好用?适合学生备考的台灯推荐

最近临近寒假&#xff0c;就有好多家长们和高校学子们催我推荐护眼台灯&#xff0c;人眼对光是非常敏感的&#xff0c;特别是儿童青少年眼睛还在发育的状态来说&#xff0c;光线是至关重要的&#xff0c;于是这次选择的护眼台灯我都是经过亲自使用测试的。 但由于现在护眼台灯…

【kettle】pdi/data-integration 打开ktr文件报错“Unable to load step info from XML“

一、报错内容&#xff1a; Unable to load step info from XML step nodeorg.pentaho.di.core.exception.KettleXMLException: Unable to load step info from XMLat org.pentaho.commons.launcher.Launcher.main (Launcher.java:92)at java.lang.reflect.Method.invoke (Met…

FA2016AA (MHz范围晶体单元超小型低轮廓贴片) 汽车

随着科技的不断发展&#xff0c;智能汽车逐渐成为人们出行的首选。而其中&#xff0c;频率范围在19.2 MHz ~ 54 MHz的晶体单元超小型低轮廓贴片&#xff08;FA2016AA&#xff09;为汽车打造更智能、更舒适、更安全的出行体验。FA2016AA贴片的外形尺寸为2.0 1.6 0.5 mm&#x…

新手深入浅出理解PyTorch归一化层全解析

目录 torch.nn子模块normal层详解 nn.BatchNorm1d BatchNorm1d 函数简介 函数工作原理 参数详解 使用技巧与注意事项 示例代码 nn.BatchNorm2d BatchNorm2d 函数简介 函数工作原理 参数详解 使用技巧与注意事项 示例代码 nn.BatchNorm3d BatchNorm3d 函数简介 参…

防浪涌TVS:电子设备的保护盾?|深圳比创达电子

在电子设备日益普及的今天&#xff0c;我们经常会听到设备因电压波动或突发浪涌而损坏的情况。那么&#xff0c;有没有一种方式可以保护我们的设备免受这些意外伤害&#xff1f;答案就是“防浪涌TVS(Transient Voltage Suppressor)”。但它是什么&#xff1f;它如何工作&#x…

软件质量全面管理

软件质量全面管理是确保软件开发过程中各个环节都符合高质量标准的一种管理方法。它涉及到从需求分析到设计、编码、测试、发布和维护等各个阶段的质量管理。 以下是一些常见的软件质量全面管理的实践方法&#xff1a; 需求管理&#xff1a;确保需求明确、准确&#xff0c;并与…

华为欧拉安装部署:Oracle11g

一、环境准备 1、下载安装低版本的libaio包&#xff1b;libaio版本太高&#xff0c;会造成编译错误 查看libaio1库版本不能大于0.3.109 [oracles3 install]$ rpm -qa libaio libaio-0.3.110-12.el8.x86_64# 查看欧拉操作系统版本 [oraclelocalhost bin]$ cat /etc/os-release…

mcu与上位机通讯数据传输测速

问题 如何测量mcu与上位机通讯数据传输速度&#xff1f;&#xff08;串口、USB&#xff09; 解决 可以借助Bus Hound 将显示时间戳勾上。 发送一段固定长度的数据&#xff0c;然后除起始和结束的时间差 最后计算即可。

全屏字幕滚动APP:12月份广告总收:84.89元(2023年12月份) 穿山甲SDK接入收益·android广告接入·app变现·广告千展收益·eCPM收益

接入穿山甲SDK app示例&#xff1a; android 数独小游戏 经典数独休闲益智 广告接入示例: Android 个人开发者如何接入广告SDK&#xff0c;实现app流量变现 2023年12月份&#xff0c;总新增用户1242 友盟统计&#xff1a; 12月份&#xff1a;总新增用户1242 2023年12月份…