Linux 命令(11)—— tcpdump
文章目录
- 一、命令简介
- 二、使用方法
- 三、命令选项
- 四、基本语法和使用方法
- 1. 显示 ASCII 字符串
- 2. 抓取特定协议的数据
- 3. 抓取特定主机的数据
- 4. 将抓取的数据写入文件
- 5. 行缓冲模式
- 五、理解tcpdump的输出
- 六、过滤表达式
- 1. Host 过滤
- 2. Network 过滤
- 3. Proto 过滤
- 4. Port 过滤
- 5. 使用逻辑运算符
- 七、举例
- 1. 原始数据输出
- 2. 来自特定的IP,发往特定的端口
- 3. 从某个网段来,到某个网段去
- 4. 到某个IP的非SSH流量
- 5. 根据 TCP Flags 分离数据
- 5. 发现 HTTP Get请求
- 6. 抓取用户名和密码
一、命令简介
tcpdump是一个网络抓包工具,它可以捕获和分析TCP/IP网络协议的数据包。它使用libpcap库来抓取网络数据包,这个库在几乎在所有的 Linux/Unix 中都有。之所以叫做tcpdump,是因为它最初是用于捕获和分析TCP协议的数据包。然而,随着时间的推移,它的功能扩展到了其他协议,如UDP、ICMP等。尽管如此,它的名称仍然保持为tcpdump。
它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。
二、使用方法
tcpdump [ -AbdDefhHIJKlLnNOpqStuUvxX# ] [ -B buffer_size ][ -c count ][ -C file_size ] [ -G rotate_seconds ] [ -F file ][ -i interface ] [ -j tstamp_type ] [ -m module ] [ -M secret ][ --number ] [ -Q in|out|inout ][ -r file ] [ -V file ] [ -s snaplen ] [ -T type ] [ -w file ][ -W filecount ][ -E spi@ipaddr algo:secret,... ][ -y datalinktype ] [ -z postrotate-command ] [ -Z user ][ --time-stamp-precision=tstamp_precision ][ --immediate-mode ] [ --version ][ expression ]
三、命令选项
-A 以ASCII码方式显示每一个数据包(不会显示数据包中链路层头部信息)。在抓取包含网页数据的数据包时,可方便查看数据。-c counttcpdump将在接受到count个数据包后退出。-C file-size (此选项用于配合-w file 选项使用)该选项使得tcpdump在把原始数据包直接保存到文件中之前,检查此文件大小是否超过file-size。如果超过了,将关闭此文件。另创一个文件继 续用于原始数据包的记录。新创建的文件名与-w选项指定的文件名一致,但文件名后多了一个数字。该数字会从1开始随着新创建文件的增多而增加,单位是M。-d 把编译过的数据包编码转换成可阅读的格式,并倾倒到标准输出。-dd 把编译过的数据包编码转换成C语言的格式,并倾倒到标准输出。-ddd 把编译过的数据包编码转换成十进制数字的格式,并倾倒到标准输出。-D 打印系统中所有tcpdump可以在其上进行抓包的网络接口。每一个接口会打印出数字编号,相应的接口名字,以及可能的一个网络接口描述。其中网络接口名字和数字编号可以用于`-i`选项,用来指定要抓包的网络接口。-e 每行的打印输出中将包括数据包的数据链路层头部信息。默认情况下 tcpdump不会显示数据链路层信息,使用'-e'选项可以显示源和目的 MAC地址,以及VLAN tag信息。-f 用数字显示网际网络地址。-F file使用file文件作为过滤条件表达式的输入,此时命令行上的输入将被忽略。-i interface指定需要监听的网口。如果没有指定,tcpdump会从系统接口列表中搜寻编号最小的网口(不包括loopback网口)。-l 对标准输出进行行缓冲(使标准输出设备遇到一个换行符就马上把这行的内容打印出来)。在需要同时观察抓包打印以及保存抓包记录的时候很有用。比如,可通过以下命令组合来达到此目的:tcpdump -l | tee dattcpdump -l > dat & tail -f dat-n 不把主机的网络地址转换成名字。-nn 不解析域名和端口。这样不仅方便查看IP和端口号,而且在抓取大量数据时非常高效,因为域名解析会降低抓取速度。-N 不打印出host的域名部分。比如,如果设置了此选现,tcpdump将会打印'nic'而不是'nic.ddn.mil'。-O 不启用进行包匹配时所用的优化代码。当怀疑某些bug是由优化代码引起的,此选项将很有用。-p 不让网络界面进入混杂模式。但必须注意,在特殊情况下此网络接口还是会以混杂模式来工作。-q 快速输出,仅列出少数的传输协议信息。-r file从文件file中读取包数据。如果file字段为'-'符号,则tcpdump会从标准输入中读取包数据。-s snaplen设置tcpdump的数据包抓取长度为snaplen。tcpdump默认只会截取前96字节的内容,如果snaplen是0的话,表示截取报文全部内容。-S 打印TCP数据包的顺序号时,使用绝对的顺序号,而不是相对的顺序号。相对顺序号可理解为,相对第一个TCP包顺序号的差距。比如,接受方收到第一个数据包的绝对顺序号为232323,对于后来接收到的第2个,第3个数据包,tcpdump会打印其序列号为1,2分别表示与第一个数据包的差距为1和2。而如果此时'-S'选项被设置,对于后来接收到的第2个,第3个数据包会打印出其绝对顺序号:232324,232325)。-T type强制tcpdump按type指定的协议所描述的包结构来分析收到的数据包。目前已知的type可取的协议为:aodv (Ad-hoc On-demand Distance Vector protocol, 按需距离向量路由协议,在Ad hoc(点对点模式)网络中使用)cnfp (Cisco NetFlow protocol)rpc (Remote Procedure Call)rtp (Real-Time Applications protocol)rtcp (Real-Time Applications con-trol protocol)snmp (Simple Network Management Protocol)tftp (Trivial File Transfer Protocol, 碎文件协议)vat (Visual Audio Tool, 可用于在internet上进行电视电话会议的应用层协议)wb (distributed White Board, 可用于网络会议的应用层协议)-t 在每行输出中不打印时间戳。-tt 不对每行输出的时间进行格式处理(这种格式一眼可能看不出其含义,如时间戳打印成1261798315)。-ttt tcpdump输出时,每两行打印之间会延迟一个段时间(以毫秒为单位)。-tttt 在每行打印的时间戳之前添加日期的打印。-v 当分析和打印的时候,产生详细的输出。比如,包的生存时间,标识,总长度以及IP包的一些选项。这也会打开一些附加的包完整性检测,比如对IP或ICMP包头部的校验和。-vv 产生比-v更详细的输出。比如,NFS回应包中的附加域将会被打印,SMB数据包也会被完全解码。-vvv 产生比-vv更详细的输出。比如,telent时所使用的SB,SE选项将会被打印,如果telnet同时使用的是图形界面,其相应的图形选项将会以16进制的方式打印出来。-w 把包数据直接写入文件而不进行分析和打印输出。这些包数据可在随后通过'-r'选项来重新读入并进行分析和打印。-x 将每个数据包的头部数据以及数据部分以16进制的形式打印出来。需要注意的是,这个选项不会包括连接层的头部数据。 -xx tcpdump会打印每个包的头部数据,同时会以16进制打印出每个包的数据。其中包括数据链路层的头部。-X 当分析和打印时,tcpdump会打印每个包的头部数据,同时会以16进制和ASCII码形式打印出每个包的数据(但不包括连接层的头部)。这对于分析一些新协议的数据包很方便。-XX 当分析和打印时,tcpdump会打印每个包的头部数据,同时会以16进制和ASCII码形式打印出每个包的数据,其中包括数据链路层的头部。
四、基本语法和使用方法
1. 显示 ASCII 字符串
tcpdump -A -s0 port 22
2. 抓取特定协议的数据
后面可以跟上协议名称来过滤特定协议的流量,以 UDP 为例,可以加上参数 udp 或 protocol 17,这两个命令意思相同。
tcpdump -i eth0 udp
tcpdump -i eth0 proto 17
同理,tcp 与 protocol 6 意思相同。
3. 抓取特定主机的数据
使用过滤器 host 可以抓取特定目的地址和源IP地址的流量。也可以使用 src 或 dst 只抓取源或目的地。
tcpdump -i eth0 host 10.10.1.1
tcpdump -i eth0 dst 10.10.1.20
4. 将抓取的数据写入文件
使用 tcpdump 截取数据报文的时候,默认会打印到屏幕的默认输出,你会看到按照顺序和格式,很多的数据一行行快速闪过,根本来不及看清楚所有的内容。不过,tcpdump 提供了把截取的数据保存到文件的功能,以便后面使用其他图形工具(比如 wireshark,Snort)来分析。
-w 选项用来把数据报文输出到文件:
tcpdump -i eth0 -s0 -w test.pcap
5. 行缓冲模式
如果想实时将抓取到的数据通过管道传递给其他工具来处理,需要使用 -l 选项来开启行缓冲模式(或使用 -c 选项来开启数据包缓冲模式)。使用 -l 选项可以将输出通过立即发送给其他命令,其他命令会立即响应。
tcpdump -i eth0 -s0 -l port 80 | grep 'Server:'
五、理解tcpdump的输出
截取数据只是第一步,第二步就是理解这些数据,下面就解释一下 tcpdump 命令输出各部分的意义。
21:27:06.995846 IP (tos 0x0, ttl 64, id 45646, offset 0, flags [DF], proto TCP (6), length 64)192.168.1.106.56166 > 124.192.132.54.80: Flags [S], cksum 0xa730 (correct), seq 992042666, win 65535, options [mss 1460,nop,wscale 4,nop,nop,TS val 663433143 ecr 0,sackOK,eol], length 021:27:07.030487 IP (tos 0x0, ttl 51, id 0, offset 0, flags [DF], proto TCP (6), length 44)124.192.132.54.80 > 192.168.1.106.56166: Flags [S.], cksum 0xedc0 (correct), seq 2147006684, ack 992042667, win 14600, options [mss 1440], length 021:27:07.030527 IP (tos 0x0, ttl 64, id 59119, offset 0, flags [DF], proto TCP (6), length 40)192.168.1.106.56166 > 124.192.132.54.80: Flags [.], cksum 0x3e72 (correct), ack 2147006685, win 65535, length 0
最基本也是最重要的信息就是数据报的源地址/端口和目的地址/端口,上面的例子第一条数据报中,源地址 ip 是 192.168.1.106,源端口是 56166,目的地址是 124.192.132.54,目的端口是 80。 > 符号代表数据的方向。
此外,上面的三条数据还是 tcp 协议的三次握手过程,第一条就是 SYN 报文,这个可以通过 Flags [S] 看出。下面是常见的 TCP 报文的 Flags:
[S]: SYN(开始连接)[.]: 没有 Flag[P]: PSH(推送数据)[F]: FIN (结束连接)[R]: RST(重置连接)
而第二条数据的 [S.] 表示 SYN-ACK,就是 SYN 报文的应答报文。
六、过滤表达式
tcpdump的过滤表达式用于指定要捕获的数据包的条件。
1. Host 过滤
用来过滤某个主机的数据报文。例如:
tcpdump host 1.2.3.4
该命令会抓取所有发往主机 1.2.3.4 或者从主机 1.2.3.4 发出的流量。如果想只抓取从该主机发出的流量,可以使用下面的命令:
tcpdump src host 1.2.3.4
2. Network 过滤
用来过滤某个网段的数据,使用的是 CIDR 模式。可以使用四元组(x.x.x.x)、三元组(x.x.x)、二元组(x.x)和一元组(x)。四元组就是指定某个主机,三元组表示子网掩码为 255.255.255.0,二元组表示子网掩码为 255.255.0.0,一元组表示子网掩码为255.0.0.0。例如,抓取所有发往网段 192.168.1.x 或从网段 192.168.1.x 发出的流量:
tcpdump net 192.168.1
抓取所有发往网段 10.x.x.x 或从网段 10.x.x.x 发出的流量:
tcpdump net 10
和 Host 过滤器一样,这里也可以指定源和目的:
tcpdump src net 10
也可以使用CIDR 格式:
tcpdump src net 172.16.0.0/12
3. Proto 过滤
用来过滤某个协议的数据,关键字为 proto,可省略。proto 后面可以跟上协议号或协议名称,支持 icmp, igmp, igrp, pim, ah, esp, carp, vrrp, udp 和 tcp。因为通常的协议名称是保留字段,所以在于 proto 指令一起使用时,必须根据 shell 类型使用一个或两个反斜杠(/)来转义。Linux 中的 shell 需要使用两个反斜杠来转义,MacOS 只需要一个。
例如,抓取 icmp 协议的报文:
tcpdump -n proto \\icmp
# 或者
tcpdump -n icmp
4. Port 过滤
用来过滤通过某个端口的数据报文,关键字为 port。例如:
tcpdump port 389
5. 使用逻辑运算符
# and、or、not
tcpdump src host 192.168.1.100 and dst port 80
tcpdump src host 192.168.1.100 and (dst port 80 or dst port 443)
tcpdump not icmp# 注意当你构建复杂查询的时候,你可能需要使用引号。单引号告诉tcpdump忽略特定的特殊字符,如下面的例子中的括号。
tcpdump 'src 10.0.2.4 and (dst port 3389 or 22)'
七、举例
1. 原始数据输出
tcpdump -ttnnvvS
2. 来自特定的IP,发往特定的端口
tcpdump -nnvvS src 10.5.2.3 and dst port 3389
tcpdump -nnvvS src 10.5.2.3 and dst port 3389
3. 从某个网段来,到某个网段去
来自192.168.x.x子网,发往10.x和172.16.x.x。显示十六进制,无需翻译主机名,一个v的详细信息。
tcpdump -nvX src net 192.168.0.0/16 and dst net 10.0.0.0/8 or 172.16.0.0/16
4. 到某个IP的非SSH流量
来自mars主机,发往非SSH端口。
tcpdump -vv src mars and not dst port 22
5. 根据 TCP Flags 分离数据
# 使用TCP RST flag筛选
tcpdump 'tcp[13] & 4!=0'
tcpdump 'tcp[tcpflags] == tcp-rst'# 根据 TCP SYN flag筛选
tcpdump 'tcp[13] & 2!=0'
tcpdump 'tcp[tcpflags] == tcp-syn'# 根据 TCP SYN和ACK flag筛选
cpdump 'tcp[13]=18'# 根据 TCP URG flag筛选
tcpdump 'tcp[13] & 32!=0'
tcpdump 'tcp[tcpflags] == tcp-urg'# 根据 TCP ACK flag筛选
tcpdump 'tcp[13] & 16!=0'
tcpdump 'tcp[tcpflags] == tcp-ack'# 根据 TCP PSH flag筛选
tcpdump 'tcp[13] & 8!=0'
tcpdump 'tcp[tcpflags] == tcp-psh'# 根据 TCP FIN flag筛选
tcpdump 'tcp[13] & 1!=0'
tcpdump 'tcp[tcpflags] == tcp-fin'
5. 发现 HTTP Get请求
tcpdump -vvAls0 | grep 'GET'
6. 抓取用户名和密码
tcpdump port http or port ftp or port smtp or port imap or port pop3 or port telnet -lA | egrep -i -B5 'pass=|pwd=|log=|login=|user=|username=|pw=|passw=|passwd= |password=|pass:|user:|username:|password:|login:|pass |user '
相关文章:
Linux 命令(11)—— tcpdump
文章目录 一、命令简介二、使用方法三、命令选项四、基本语法和使用方法1. 显示 ASCII 字符串2. 抓取特定协议的数据3. 抓取特定主机的数据4. 将抓取的数据写入文件5. 行缓冲模式 五、理解tcpdump的输出六、过滤表达式1. Host 过滤2. Network 过滤3. Proto 过滤4. Port 过滤5. …...
8.自定义组件布局和详解Context上下文
pages/index.vue layout布局运行在服务端 1、在项目的目录下新建layout文件夹,并新建一个blog.vue布局文件 2、在页面中的layout函数里,返回刚才新建布局文件的名字blog就可以使用了 export default {...layout (context) {console.log(context)retu…...
几个Web自动化测试框架的比较:Cypress、Selenium和Playwright
介绍:Web自动化测试框架对于确保Web应用程序的质量和可靠性至关重要。它们帮助开发人员和测试人员自动执行重复性任务,跨多个浏览器和平台执行测试,并在开发早期发现问题。 以下仅代表作者观点: 本文探讨来3种流行的Web自动化测…...
Android Studio中配置aliyun maven库
当下载第三方库失败的时候,通过Android Studio中配置aliyun maven库,达到正常下载库效果 在项目的根build.gradle里面(不是module)buildscriptde对应位置添加配置: maven { url https://maven.aliyun.com/repository/…...
记录使用阿里 ARoute 遇到的坑
1.按照官方一个配置好之后 尝试使用 跳转出现 Aroute Theres no route matched path"" 我这边遇到的坑是配置问题 kotiln 使用了 Java的配置 plugins {id("com.android.application")id("org.jetbrains.kotlin.android")id("kotlin-kapt&…...
lesson2(补充)关于const成员函数
个人主页:Lei宝啊 愿所有美好如期而遇 前言: 将const 修饰的 “ 成员函数 ” 称之为 const 成员函数 , const 修饰类成员函数,实际修饰该成员函数 隐含的 this 指针 ,表明在该成员函数中不能对类的任何成员进行修改…...
前端 :用HTML ,JS写一个 双色球彩票中将机制,因为时间不够,加上本人懒没有用CSS美化界面,多包涵
1.HTML <body><div id"content"><div id "top"><div id "username">用户号码:</div><div id "qiu"><span id "red">红球:</span><input id…...
前端页面如何自适应--4种方法
前端页面有很多方法可以实现。这里我将介绍五种常用的方法,并提供相应的代码示例。 1. 使用CSS媒体查询 通过CSS媒体查询,可以根据不同的屏幕尺寸应用不同的样式。在Vue组件中,可以在样式部分使用媒体查询,使排版根据屏幕大小进…...
2024王道考研计算机组成原理——总线
6.1 总线概述 每一个外设都通过IO接口和DB、CB、AB相连 三系统总线结构: 桥有总线仲裁的功能,就是把某一总线的使用权分给哪个设备? 6.1.2 总线的性能指标 总线复用:分时传输地址&数据 6.2 总线仲裁 通过控制总线来发送使…...
【Linux】进程概念(下)
进程概念 一、环境变量1. 命令行参数2. 常见的环境变量(1)PATH(2)PWD(3)HOME(4)env 查看所有的环境变量 3. 获取环境变量(1)通过代码获取环境变量(…...
基于Spring Boot的本科生就业质量设计与实现
摘 要 信息化爆炸的时代,互联网技术的指数型的增长,信息化程度的不断普及,社会节奏在加快,每天都有大量的信息扑面而来,人们正处于数字信息化世界。数字化的互联网具有便捷性,传递快,效率高&am…...
238. 除自身以外数组的乘积 --力扣 --JAVA
题目 给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请不要使用除法,且在 O(n) 时间复…...
如何判断一个类是线程安全的
线程安全 一个类或者程序提供的接口,多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是不必考虑同步问题。 或者说一段代码可能会被多个线程同时执行,如果每次运行的结果和单线程执行的结果是一样的,并且其他变量的…...
MyBatis的各种查询功能
文章目录 情景查询一个实体类对象查询一个List集合查询单个数据查询一条数据为map集合查询多条数据为map集合方法一方法二 情景 如果查询出的数据只有一条,可以通过 实体类对象接收List集合接收Map集合接收,结果{password123456, sex男, id1, age23, us…...
【Tomcat】如何在idea上部署一个maven项目?
目录 1.创建项目 2.引入依赖 3.创建目录 4.编写代码 5.打包程序 6.部署项目 7.验证程序 什么是Tomcat和Servlet? 以idea2019为例: 1.创建项目 1.1 首先创建maven项目 1.2 项目名称 2.引入依赖 2.1 网址输入mvnrepository.com进入maven中央仓库->地址…...
Three.js 材质的 blending
Three.js 材质的 blending // blending modes export type Blending | typeof NoBlending| typeof NormalBlending| typeof AdditiveBlending| typeof SubtractiveBlending| typeof MultiplyBlending| typeof CustomBlending;// custom blending destination factors export t…...
关于pcl 给new出的数据赋值报错问题
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>); for (size_t i 0; i < cloud->points.size (); i) //填充数据 { cloud->points[i].x 1024 * rand () / (RAND_MAX 1.0f); cloud->points[i].y 1024…...
window11 更改 vscode 插件目录,释放C盘内存
由于经常使用vscode开发会安装一些代码提示插件,然后C盘内容会逐渐缩小,最终排查定位到vscode。这个吃内存不眨眼的家伙。 建议:不要把插件目录和vscode安装目录放在同一个位置,不然这样vscode更新后,插件也会消失。 v…...
【PyQt学习篇 · ⑥】:QWidget - 事件
文章目录 事件消息显示和关闭事件移动事件调整大小事件鼠标事件进入和离开事件鼠标按下和释放事件鼠标双击事件鼠标按下移动事件 键盘事件焦点事件拖拽事件绘制事件改变事件右键菜单输入法 事件转发机制案例一案例二案例三 事件消息 显示和关闭事件 showEvent(QShowEvent)方法…...
Vue、jquery和angular之间区别
aVue、jquery、angular之间区别 angular与jquery区别angular和Vue angular与jquery区别 三个版本的输入数据绑定,都是单页面应用。 Angular <body ng-app><input type"text" ng-model"name"><p>{{name}}</p></body…...
MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...
