通过端口测试验证网络安全策略
基于网络安全需求,项目中的主机间可能会有不同的网络安全策略,这当然是好的,但很多时候,在解决网络安全问题的时候,同时引入了新的问题,如k8s集群必须在主机间开放udp端口,否则集群不能正常的运行,不仅需要开放真实主机间的udp网络,还要开放虚拟网络间的udp网络,可以通过nmap来进行快速的验证:
namap是什么:
nmap是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端。确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统(这是亦称 fingerprinting)。它是网络管理员必用的软件之一,以及用以评估网络系统安全。
一、安装nmap
yum install nmap -y
安装的命令还很很简单的,依赖也比较少,如果是离线环境下,可以使用yumdownloader命令来下载安装包,移到离线主机上进行安装。
二、查看主机开放的端口
[ansible@3 ~]$ sudo netstat -tlunp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1260/sshd
tcp6 0 0 :::111 :::* LISTEN 1/systemd
tcp6 0 0 :::22 :::* LISTEN 1260/sshd
udp 0 0 0.0.0.0:61924 0.0.0.0:* 1148/dhclient
udp 0 0 0.0.0.0:68 0.0.0.0:* 1148/dhclient
udp 0 0 127.0.0.1:323 0.0.0.0:* 714/chronyd
udp6 0 0 :::36716 :::* 1148/dhclient
udp6 0 0 ::1:323 :::* 714/chronyd
可以使用netstat命令来查看主机上开放的端口,无论是udp,还是tcp都是支持的
三、验证
[root@1 ~]# nmap 10.0.7.135 -sU -p 61926Starting Nmap 6.40 ( http://nmap.org ) at 2020-08-14 14:12 CST
Nmap scan report for 10.0.7.135
Host is up (0.00073s latency).
PORT STATE SERVICE
61926/udp closed unknownNmap done: 1 IP address (1 host up) scanned in 16.97 seconds
如图所示的命令,是测试udp的,重要的结果信息是STATE下的closed,表明端口是关闭的,当然,如果返回值是open,也不一定代表端口开放,可能是主机间的策略是完全过滤,这样,发出的udp包都没有回复,也会认为是open的,这样的open是没有价值的,不过,也验证了网络间的确存在网络安全策略,其余的端口状态及其代表的信息如下:
open:端口是开放的。
closed:端口是关闭的。
filtered:端口被防火墙IDS/IPS屏蔽,无法确定其状态。
unfiltered:端口没有被屏蔽,但是否开放需要进一步确定。
open|filtered:端口是开放的或被屏蔽。
closed|filtered :端口是关闭的或被屏蔽。
四、nmap命令的其他参数
目标说明:
1) CIDR风格地址,附加一个/<numbit>在一个IP或主机名后面,则扫描与该IP具有<numbit>相同比特的所有IP地址或主机,支持的numbit值为1-32
2) 可以对IP的各个段使用范围列表来指定扫描对象,即0-255.0-255.0-255.0-255;或使用逗号隔开,即192.168.1.1,3,5
3) IPv6地址只能用规范的IPv6地址或主机名指定,上面两种方式对IPv6都不支持
4) 接受多个主机说明,不必是相同类型
5) -iL <inputfilename>: 从列表中输入
6) -iR <hostnum>: 随机选择目标,hostnum表示目标数目,0意味着永无休止的扫描
7) --exclude <host1 [, host2] [, host3] …> 排除主机/网络
8) --excludefile <excludefile> 排除文件中的列表
主机发现
发送探测包到目标追究,若收到回复,则说明目标主机是开启的。Nmap支持十多种不同的主机探测方式;默认发送四种
a) ICMP echo request
b) a TCP SYN packet to port 443
c) a TCP ACK packet to port 80
d) an ICMP timestamp request
参数形式
l -sL:List Scan 列表扫描,仅将指定的目标IP列举出来,不进行主机发现
l -sP:Ping Scan 只利用ping扫描进行主机发现,不进行端口扫描
n 默认情况下发送ICMP回声请求和一个TCP报文到80端口,非特权用户发送一个SYN报文到80端口
n 可以和除-P0之外的任何发现探测类型-P*选项结合使用以达到更高的灵活性
l -Pn/-P0:将所有指定的主机视作开启的,跳过主机发现的过程
l -PS [portlist]:TCP SYN Ping,发送一个设置了SYN标志位的空TCP报文
n 默认端口为80(可设置),也可指定端口
n 目标主机端口关闭,回复RST,端口开放,则回复SYN/ACK,但都表明目标主机在线
n UNIX机器上,只有特权用户才能发送和接收原始的TCP报文,因此非特权用户进行系统调用connect(),也发送一个SYN报文来尝试建立连接
l -PA [portlist]:TCP ACK ping,发送一个设置了ACK标志位的TCP报文
n 默认端口为80(可设置),也可指定端口
n 目标主机在线,回复RST,不在线则超时
n UNIX机器上,只有特权用户才能发送和接收原始的TCP报文,因此非特权用户进行系统调用connect(),也发送一个SYN报文来尝试建立连接
l -PU [portlist]: UDP Ping,发送一个空的UDP报文到指定的端口,
n 默认短裤为31338(可设置)
n 优势是可以穿越只过滤TCP的防火墙或过滤器
n 若端口关闭,则回复ICMP端口无法到达,说明主机在线;其他类型的ICMP错误如主机/网络无法到达或者TTL超时则表示主机不在线;没有回应也被这样解释,但不一定正确(因为大多数开放该端口的服务会忽略该UDP报文)
l -PE; -PP; -PM:ICMP Ping Types,发送ICMP Type 8 (回声请求)报文,期待从运行的主机得到一个type 0 (回声相应)报文
l -PR:ARP Ping
l -n:不用域名解析,加快扫描速度
l -R:为所有目标IP地址作反向域名解析
l --system-dns:使用系统域名解析器,一般不使用该选项,因为比较慢
端口扫描
1) Nmap将端口分成六个状态
a) open(开放的): 该端口正在接收TCP连接或者UDP报文
b) closed(关闭的): 关闭的端口接收nmap的探测报文并做出响应
c) filtered(被过滤的): 探测报文被包过滤阻止无法到达端口,nmap无法确定端口的开放情况
d) unfiltered(未被过滤的):端口可访问,但nmap仍无法确定端口的开放情况
e) open|filtered(开放或者被过滤的):无法确定端口是开放的还是被过滤的
f) closed|filtered(关闭或者被过滤的):无法确定端口是关闭的还是被过滤的
2) Nmap产生结果是基于目标机器的响应报文的,而这些主机可能是不可信任的,会产生迷惑或者误导nmap的报文,更普遍的是非RFC兼容的主机以不正确的方式响应nmap探测,FIN/NULL和Xmas扫描特容易遇到这些问题
3) Nmap支持十几种扫描技术,默认情况下执行一个SYN扫描(没有权限或者扫描IPv6不可用时TCP Connect());一般一次只用一种方法,除了UDP扫描(-sU)可能和任何一种TCP扫描结合使用;一般格式是-s<C>,除了deprecatedFTP bounce扫描-b
a) –sS:TCP SYN扫描,半开放扫描,扫描速度快,不易被注意到(不完成TCP连接);且能明确区分open|closed|filtered
i. Open SYN/ACK
ii. Closed RST复位
iii. Filtered 数次重发没响应,或者收到ICMP不可达
b) –sT:TCPConnect(),建立连接,容易被记录;对原始报文控制少,效率低
c) –sU:激活UDP扫描,对UDP服务进行扫描,如DNS/SNMP/DHCP等,可以和TCP扫描结合使用;但是效率低下,开放的和被过滤的端口很少响应,加速UDP扫描的方法包括并发扫描更多的主机,先只对主要端口进行快速扫描,从防火墙后面扫描,使用--host-timeout跳过慢速的主机
d) –sN; -sF; -sX:TCP Null,Fin, Xmas扫描,从RFC挖掘的微妙方法来区分开放关闭端口;除了探测报文的标志位不同,三种扫描在行为上一致
i. 优势:能躲过一些无状态防火墙和报文过滤路由器,比SYN还要隐秘
ii. 劣势:现代的IDS产品可以发现,并非所有的系统严格遵循RFC 793
e) –sA:TCP ACK扫描,只设置ACK标志位,区分被过滤与未被过滤的
f) –sW:TCP窗口扫描,依赖于互联网上少数系统的实现细节,因此可信度不高;根据窗口大小来判断端口是开放的(正数)还是关闭的(0)
g) –sM:TCP Maimon扫描,探测报文是FIN/ACK,端口开放或关闭,都对这样的报文响应RST报文,但如果端口开放,许多基于BSD的系统只是丢弃该探测报文
h) –scanflags:通过指定任意的TCP标志位来设计扫描,可以是数字标记值,也可以使用字符名如URG/ACK/PSH/RST/SYN/FIN
i) –sI <zombie host[:probeport]>:Idlescan,利用zombie主机上已知IP分段ID序列生成算法来窥探目标上开放端口的信息,极端隐蔽,可以指定端口号,否则默认80
j) –sO:IP协议扫描,可以确定目标机支持哪些IP协议(TCP, ICMP, IGMP)
k) –b <ftp relay host>:FTP弹跳扫描
4) 端口说明和扫描顺序:默认情况下,对1-1024以及nmap-services文件中列出的更高的端口在扫描
a) –p <port ranges>:只扫描指定的端口,单个端口和用连字符表示的端口范围都可以;当既扫描TCP端口又扫描UDP端口时,您可以通过在端口号前加上T: 或者U:指定协议。协议限定符一直有效您直到指定另一个。例如,参数 -p U:53,111,137,T:21-25,80,139,8080 将扫描UDP 端口53,111,和137,同时扫描列出的TCP端口。注意,要既扫描 UDP又扫描TCP,您必须指定 -sU ,以及至少一个TCP扫描类型(如 -sS,-sF,或者 -sT)
b) –p <name>:扫描指定的端口名称,如nmap–p smtp,http 10.10.1.44
c) –p U:[UDP ports],T:[TCP ports]:对指定的端口进行指定协议的扫描
d) –F:快速扫描(仅扫描100个最常用的端口),nmap-services文件指定想要扫描的端口;可以用—datadir选项指定自己的小小nmap-services文件
e) –top-ports <number>:扫描前number个端口
f) –r:不要按随机顺序扫描端口,默认情况下按随机(常用的端口前移)
服务与版本探测
1) nmap-services是一个包含大约2200个著名的服务的数据库,Nmap通过查询该数据库可以报告那些端口可能对应于什么服务器,但不一定正确
2) 在用某种扫描方法发现TCP/UDP端口后,版本探测会询问这些端口,确定到底什么服务正在运行;nmap-service-probes数据库包含查询不同服务的探测报文和解析识别响应的匹配表达式;当Nmap从某个服务收到响应,但不能在数据库中找到匹配时,就打印出一个fingerprint和一个URL给您提交
3) 用下列选项打开和控制版本探测
a) –sV:打开版本探测
b) –allports:不为版本探测排除任何端口,默认情况下跳过9100端口
c) –version-intensity<intensity>:设置版本扫描强度,范围为0-9,默认是7,强度越高,时间越长,服务越可能被正确识别
d) –version-light:是—version-intensity2的别名
e) –version-all:是—version-intensity9的别名
f) –version-trace:跟踪版本扫描活动,打印出详细的关于正在进行的扫描的调试信息
g) –sR:RPC扫描,对所有被发现开放的TCP/UDP端口执行SunRPC程序NULL命令,来试图 确定它们是否RPC端口,如果是, 是什么程序和版本号
操作系统探测
1) 用TCP/IP协议栈fingerprinting进行远程操作系统探测,Nmap发送一系列TCP和UDP报文到远程主机,检查响应中的每一个比特。 在进行一打测试如TCPISN采样,TCP选项支持和排序,IPID采样,和初始窗口大小检查之后, Nmap把结果和数据库nmap-os-fingerprints中超过 1500个已知的操作系统的fingerprints进行比较,如果有匹配,就打印出操作系统的详细信息。每个fingerprint包括一个自由格式的关于OS的描述文本,和一个分类信息,它提供供应商名称(如Sun),下面的操作系统(如Solaris),OS版本(如10),和设备类型(通用设备,路由器,switch,游戏控制台等)
2) Nmap猜不出操作系统,则会提供一个URL让知道操作系统的用户来提交,从而扩大Nmap的操作系统知识库
3) 采用下列选项启用和控制操作系统检测
a) –O:启用操作系统检测;-A可以同时启用操作系统检测和版本检测
b) –osscan-limit:针对指定的目标进行操作系统检测
c) –osscan-guess|--fuzzy:当Nmap无法确定所检测的操作系统时,会尽可能地提供最相近的匹配
时间和性能
1) Nmap开发的最高优先级是性能,但很多因素会增加扫描时间如特定的扫描选项,防火墙配置以及版本扫描灯
2) 优化时间参数
a) –min-hostgroup <size>;--max-hostgroup <size>:调整并行扫描组的大小,用于保持组的大小在一个指定的范围之内;Nmap具有并行扫描多主机端口或版本的能力,Nmap将多个目标IP地址空间分成组,然后在同一时间对一个组进行扫描。通常,大的组更有效。缺点是只有当整个组扫描结束后才会提供主机的扫描结果
b) –min-parallelism<milliseconds>; --max-parallelism <millseconds>:调整探测报文的并行度,用于控制主机组的探测报文数量;默认状态下, Nmap基于网络性能计算一个理想的并行度,这个值经常改变
c) --min-rtt-timeout <milliseconds> --max-rtt-timeout<milliseconds> --initial-rtt-timeout <milliseconds>:调整探测报文超时;Nmap基于上一个探测报文的响应时间来计算超时值,如果网络延迟比较显著和不定,这个超时值会增加几秒。初始值的比较保守(高),而当Nmap扫描无响应的主机时,这个保守值会保持一段时间
d) –host-timeout<milliseconds>:放弃低速目标主机;通常使用1800000 来保证Nmap不会在单个主机上使用超过半小时的时间
e) --scan-delay <milliseconds>; --max-scan-delay<milliseconds>:调整探测报文的时间间隔
f) –T<Paranoid|Sneaky|Polite|Normal|Aggressive|Insane>:设置时间模板,分别与数字0-5对应;前两种模式用于IDS躲避,Polite模式降低了扫描 速度以使用更少的带宽和目标主机资源。默认模式为Normal,因此-T3 实际上是未做任何优化。Aggressive模式假设用户具有合适及可靠的网络从而加速扫描。Insane模式假设用户具有特别快的网络或者愿意为获得速度而牺牲准确性
防火墙/IDS躲避和哄骗
1) 相关的选项
a) –f(报文分段); --mtu(使用指定的MTU):将TCP头分段在几个包中,使得包过滤器、 IDS以及其它工具的检测更加困难
b) –D <decoy1 [, decoy2] [, ME]…>:使用诱饵隐蔽扫描;使用逗号分隔每个诱饵主机,也可用自己的真实IP作为诱饵,这时可使用 ME选项说明。如果在第6个位置或更后的位置使用ME选项,一些常用端口扫描检测器(如Solar Designer's excellent scanlogd)就不会报告 这个真实IP。如果不使用ME选项,Nmap 将真实IP放在一个随机的位置
c) –S <IP_Address>:源地址哄骗,说明所需发送包的接口IP地址
d) –e <interface>:使用指定的接口
e) –source-port<portnumber>; -g <portnumber>:源端口哄骗;很多产品本身会有这类 不安全的隐患,甚至是微软的产品。Windows 2000和Windows XP中包含的IPsec过滤器也包含了一些隐含规则,允许所有来自88端口(Kerberos)的TCP和UDP数据流。另一个常见的例子是Zone Alarm个人防火墙到2.1.25版本仍然允许源端口53(DNS)或 67(DHCP)的UDP包进入。
f) –data-length <number>:发送报文时附加随机数据
g) –ttl <value>:设置IPtime-to-live域
h) –randomize-hosts:对目标主机的顺序随机排列
i) –spoof-mac <mac address,prefix, or vendor name>:MAC地址哄骗;要求Nmap在发送原以太网帧时使用指定的MAC地址,这个选项隐含了 --send-eth选项,以保证Nmap真正发送以太网包。MAC地址有几种格式。如果简单地使用字符串“0”,Nmap选择一个完全随机的MAC地址。如果给定的字符品是一个16进制偶数(使用:分隔),Nmap将使用这个MAC地址。如果是小于12的16进制数字,Nmap会随机填充剩下的6个字节。如果参数不是0或16进制字符串,Nmap将通过nmap-mac-prefixes查找厂商的名称(大小写区分),如果找到匹配,Nmap将使用厂商的OUI(3字节前缀),然后随机填充剩余的3个节字。正确的--spoof-mac参数有, Apple, 0,01:02:03:04:05:06, deadbeefcafe,0020F2,和Cisco.
j) –badsum:发送错误的校验和
输出
1) 提供了方便直接查看的交互式方式和方便软件处理的XML格式;另外还提供了选项来控制输出的细节以及调试信息
2) 五种不同的输出格式,默认interactiveoutput,其他的还有
a) normal output:显示较少的运行时间信息和告警信息
b) XML输出:可转换成HTML,方便程序处理
c) grepable格式:在一行中包含目标主机最多的信息
d) sCRiPt KiDDi3 0utPut 格式:用于考虑自己的用户
多种格式能同时使用,但一种格式只能使用一次
3) 与其它Nmap参数不同,日志文件选项的空格(如-oX)和文件名或连字符是必需的。如果省略了标记,例如-oG-或 -oXscan.xml,Nmap的向后兼容特点将建立 标准格式的输出文件,相应的文件名为G-和 Xscan.xml
4) 相关的选项
a) –oN <filespec>:标准输出
b) –oX <filespec>:XML输出写入指定的文件
c) –oS <filespec>:脚本小子输出,类似于交互工具输出
d) –oG <filespec>:Grep输出
e) –oA <basename>:输出至所有格式
f) –v:提高输出信息的详细度
g) –d [level]:提高或设置调试级别,9最高
h) –packet-trace:跟踪发送和接收的报文
i) –iflist:输出检测到的接口列表和系统路由
j) –append-output:表示在输出文件中添加,而不是覆盖原文件
k) –resume <filename>:继续中断的扫描,
l) –stylesheet <path or URL>:设置XSL样式表,转换XML输出;Web浏览器中打开Nmap的XML输出时,将会在文件系统中寻找nmap.xsl文件,并使用它输出结果
m) –no-stylesheet:忽略XML生命的XSL样式表
其他选项
1) -6:开启IPv6扫描
2) -A:激烈扫描模式选项,这个选项启用额外的高级和高强度选项,目前还未确定代表的内容。目前,这个选项启用了操作系统检测(-O) 和版本扫描(-sV),以后会增加更多的功能
3) --datadir <directoryname>:说明用户Nmap数据文件位置
Nmap在运行时从文件中获得特殊的数据,这些文件有 nmap-service-probes, nmap-services, nmap-protocols, nmap-rpc, nmap-mac-prefixes和 nmap-os-fingerprints。Nmap首先 在--datadir选项说明的目录中查找这些文件。 未找到的文件,将在BMAPDIR环境变量说明的目录中查找。 接下来是用于真正和有效UID的~/.nmap 或Nmap可执行代码的位置(仅Win32);然后是是编译位置, 如/usr/local/share/nmap 或/usr/share/nmap。 Nmap查找的最后一个位置是当前目录
4) --send-eth:使用原以太网帧发送
5) --send-ip:在原IP层发送
6) --privileged:假定用户具有全部权限
7) --interactive:在交互模式下启动
8) -V; --version:打印版本信息
9) -h; --help:打印一个短的帮助屏幕
运行时的交互
1) v/V:增加/减少细节
2) d/D:提高/降低调试级别
3) p/P:打开/关闭报文跟踪
NSE脚本引擎(NmapScripting Engine)
1) 允许用户自己编写脚本来执行自动化的操作或者扩展Nmap的功能;使用Lua脚本语言
2) 创建方法
a) description 字段:描述脚本功能的字符串,使用双层方括号表示
b) comment 字段:以--开头的行,描述脚本输出格式
c) author 字段:描述脚本作者
d) license 字段:描述脚本使用许可证,通常配置为Nmap 相同的license
e) categories 字段:描述脚本所属的类别,以对脚本的调用进行管理。描述脚本执行的规则,也就是确定触发脚本执行的条件。在 Nmap 中有四种类型的规则,prerule 用于在Nmap 没有执行扫描之前触发脚本执行,这类脚本并不需用到任何Nmap 扫描的结果;hostrule 用在Nmap 执行完毕主机发现后触发的脚本,根据主机发现的结果来触发该类脚本;portrule 用于Nmap 执行端口扫描或版本侦测时触发的脚本,例如检测到某个端口时触发某个脚本执行以完成更详细的侦查。postrule 用于Nmap 执行完毕所有的扫描后,通常用于扫描结果的数据提取和整理。在上述实例中,只有一个portrule,说明该脚本在执行端口扫描后,若检测到TCP 13 号端口开放,那么触发该脚本的执行。
f) action 字段:脚本执行的具体内容。当脚本通过 rule 字段的检查被触发执行时,就会调用action 字段定义的函数。
3) 用法
a) –sC:使用默认类别的脚本进行扫描
b) –script=<Lua scripts>:使用某个或某类脚本进行扫描,支持通配符描述
c) –script-args=<n1=v1, [n2=v2,…]>:为脚本提供默认参数
d) –script-args-file=filename:使用文件夹为脚本提供参数
e) –script-trace:显示脚本执行过程中发送与接收的数据
f) –script-updatedb:更新脚本数据库
g) –script-help=<Luascripts>:显示脚本的帮助信息
后话
1) Namp的图形化用户界面程序:Zenmap
2) Nmap扫描的挑战
a) 选取要扫描的IP:网络上有大量的IP地址,需要targeted scans而不是giant scan
b) 防火墙:防火墙内部网络与外部网络的不同,绕过防火墙有一定难度
c) 效率和准确性
3) TCP主机发现,十个最常用的端口:80/http,25/smtp,22/ssh,443/https,21/ftp,113/auth,23/telnet,53/domain,554/rtsp,3389/ms-term-server
4) TCP端口扫描,十个最常用的端口:80/http,23/telnet,22/ssh,443/https,3389/ms-term-serv,445/microsoft-ds,139/netbios-ssn,21/ftp,135/msrpc,25/smtp
5) UDP端口扫描,十个最常用的端口:137/netbios-ns,161/snmp,1434/ms-sql-m,123/ntp,138/netbios-dgm,445/microfost-ds,135/msrpc,67/dhcps,139/netbios-ssn,53/domain
6) 阻止nmap扫描的几种过滤机制,从而nmap扫不到tcp端口和操作系统的版本号,但80端口仍然可以提供好的http服务
a) iptables –F
b) iptables -AINPUT -p tcp –tcp-flags ALL FIN,URG,PSH -j Drop
c) iptables -AINPUT -p tcp –tcp-flags SYN,RST SYN,RST -j Drop
d) iptables -A INPUT-p tcp –tcp-flags SYN,FIN SYN,FIN -j Drop
e) iptables -AINPUT -p tcp –tcp-flags SyN SYN –dport 80 -j Drop
针对其他的扫描如UDP扫描,也应该可以设置相应的过滤机制
相关文章:

通过端口测试验证网络安全策略
基于网络安全需求,项目中的主机间可能会有不同的网络安全策略,这当然是好的,但很多时候,在解决网络安全问题的时候,同时引入了新的问题,如k8s集群必须在主机间开放udp端口,否则集群不能正常的运…...

Excel把其中一张工作表导出成一个新的文件
excel导出一张工作表 一个Excel表里有多个工作表,怎么才能导出一个工作表,让其生成新的Excel文件呢? 第一步:首先打开Excel表格,然后选择要导出的工作表的名字,比如“Sheet1”,把鼠标放到“She…...

第四份工作的环境配置
最近在内网中工作,会遇到不少的环境问题. 下面记录一下这个过程中的挑战: 环境:内网,连接不到外网. 如何配置开发环境: 方法0: 在服务器上安装环境. 但是服务器上没有相应的python包.因为python包是从外界获得的.并且,这些python包不能同步更新.所以,在服务器上直接搭建环…...

SpringBoot开发——Maven多模块工程最佳实践及详细示例
文章目录 一、前言二、Maven多模块工程的最佳实践1、项目结构清晰2、依赖管理统一3、插件配置统一4、版本控制一致5、模块间通信简化 三、详细示例1、项目结构2、父模块(parent)的pom.xml文件3、子模块(module-api)的pom.xml文件4…...

C 语言面向对象
面向对象的基本特性:封装,继承,多态 1.0 面向过程概念 当我们在编写程序时,通常采用以下步骤: 1. 将问题的解法分解成若干步骤 2. 使用函数分别实现这些步骤 3. 依次调用这些函数 这种编程风格的被称作 面向过程…...

无人机探测:光电侦测核心技术算法详解!
核心技术 双光谱探测跟踪: 可见光成像技术:利用无人机表面反射的自然光或主动光源照射下的反射光,通过高灵敏度相机捕捉图像。该技术适用于日间晴朗天气下的无人机探测,具有直观、易于识别目标的特点。 红外成像技术࿱…...

ffmpeg视频滤镜:替换部分帧-freezeframes
滤镜描述 freezeframes 官网地址 > FFmpeg Filters Documentation 这个滤镜接收两个输入,然后会将第一个视频中的部分帧替换为第二个视频的某一帧。 滤镜使用 参数 freezeframes AVOptions:first <int64> ..FV....... set first fra…...

PHP 超级全局变量
超级全局变量是指在php任意脚本下都可以使用 PHP 超级全局变量列表: $GLOBALS:是PHP的一个超级全局变量组,在一个PHP脚本的全部作用域中都可以访问。 $_SERVER:$_SERVER 是一个PHP内置的超级全局变量,它是一个包含了诸如头信息(header)、路…...

Pytorch使用手册-Tensors(专题二)
这段代码是对 PyTorch 中张量(Tensors)的详细介绍和操作演示。以下是逐步讲解: 1. 什么是张量 (Tensor) 张量是一种专门的数据结构,与 NumPy 的多维数组(ndarray)类似: 它可以在 GPU 或其他硬件加速器上运行。张量可以与 NumPy 共享内存,避免不必要的数据拷贝。它是为…...

centos安装小火车
平时没事闲着 装个小火车玩-------->>>>> yum install sl.x86_64 启动命令 sl 就会出现以下场景...

241125学习日志——[CSDIY] [InternStudio] 大模型训练营 [17]
CSDIY:这是一个非科班学生的努力之路,从今天开始这个系列会长期更新,(最好做到日更),我会慢慢把自己目前对CS的努力逐一上传,帮助那些和我一样有着梦想的玩家取得胜利!!&…...

sklearn中常用数据集简介
scikit-learn库中提供了包括分类、回归、聚类、降维等多种机器学习任务所需的常用数据集,方便进行实验和研究,它们主要被封装在sklearn.datasets中,本文对其中一些常用的数据集进行简单的介绍。 1.Iris(鸢尾花)数据集…...

机器学习在教育方面的应用文献综述
引言 随着大数据时代的到来,机器学习作为人工智能的一个重要分支,在教育领域展现出广泛的应用前景。本文综述了机器学习技术在教育领域的应用,包括个性化学习、智能评估、知识图谱构建等多个方面。 个性化学习 个性化学习是机器学习…...

滑动窗口最大值(java)
题目描述 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 示例 1: 输入:nums [1,3,-1,-3,5,3,6,7]…...

sklearn学习
介绍:scaler:换算的意思 1. 归一化MinMaxScaler() 归一化的意思是将一堆数,如果比较离散,为了让数据更适合模型训练,将离散的数据压缩到0到1之间,以方便模型更高效优质的学习,而对数据的预处理…...

Ubuntu下手动设置Nvidia显卡风扇转速
在Ubuntu下,您可以使用 NVIDIA显卡驱动程序提供的工具手动调整风扇转速。以下是详细步骤: 1. 确保已安装NVIDIA显卡驱动 确保系统已经安装了正确的NVIDIA驱动: nvidia-smi如果没有输出驱动信息,请先安装驱动: sudo…...

Java-06 深入浅出 MyBatis - 一对一模型 SqlMapConfig 与 Mapper 详细讲解测试
点一下关注吧!!!非常感谢!!持续更新!!! 大数据篇正在更新!https://blog.csdn.net/w776341482/category_12713819.html 目前已经更新到了: MyBatisÿ…...

ES 和Kibana-v2 带用户登录验证
1. 前言 ElasticSearch、可视化操作工具Kibana。如果你是Linux centos系统的话,下面的指令可以一路CV完成服务的部署。 2. 服务搭建 2.1. 部署ElasticSearch 拉取docker镜像 docker pull elasticsearch:7.17.21 创建挂载卷目录 mkdir /**/es-data -p mkdir /**/…...

CodeIgniter如何手动将模型连接到数据库
在CodeIgniter中,模型通常是自动与数据库连接的,因为模型类(CI_Model)已经内置了对数据库操作的支持。但是,如果你需要手动指定数据库连接或者进行一些特殊的数据库配置,你可以通过几种方式来实现。 1. 使…...

商用密码应用安全性评估,密评整体方案,密评管理测评要求和指南,运维文档,软件项目安全设计相关文档合集(Word原件)
一、 密码应用安全性评估方案 (一) 密码应用测评工作思路 1.1.1. 测评准备活动的主要任务 1.1.2. 测评准备活动的输出文档 1.2. 方案编制活动 1.2.1. 方案编制活动的主要任务 1.2.2. 方案编制活动的输出文档 1.3. 现场预评估活动 1.3.1. 现场测评…...

AI赋能电商:构建高效、智能化的新零售生态
随着人工智能(AI)技术的不断进步,其在电商领域的应用日益广泛,从购物推荐到供应链管理,再到商品定价,AI正在全面改变传统电商的运营模式,并推动行业向智能化和精细化方向发展。本文将探讨如何利…...

【GAMES101笔记速查——Lecture 19 Cameras,Lenses and Light Fields】
本章节内容:相机、棱镜、光场 计算机图形学的两种成像方法: 1.合成方法:光栅化、光线追踪(展示出现实没有的东西) 2.捕捉方法:相机(捕捉现实已有的东西) 目录 1 相机 1.1 针孔相…...

虚拟机上搭建达梦DSC简略步骤
vmware 17 centos 7.6 达梦 dm8_20240920_x86_rh7_64.iso cd /d C:\Program Files (x86)\VMware\VMware Workstation\.\vmware-vdiskmanager.exe -c -s 100MB -a lsilogic -t 2 "F:\vm\dmdsc\sharedisk\share-dcr.vmdk" .\vmware-vdiskmanager.exe -c -s 100MB -a l…...

Python和R荧光分光光度法
🌵Python片段 Python在处理荧光分光光度法数据方面非常强大,得益于其丰富的数据处理和可视化库,可以轻松实现从数据读取到分析的完整流程。荧光分光光度法用于测量物质在激发光照射下发出的荧光强度,常用于定量分析和特性研究。 …...

电子学习中的关键游戏化元素
游戏化彻底改变了电子学习领域,提供了一种使学习具有吸引力、互动性和有效性的方法。通过将类似游戏的功能集成到教育平台中,教育工作者可以增强动力,提高知识记忆,并创造动态的学习体验。游戏化的关键要素为设计与学习者产生共鸣…...

算法日记 33 day 动态规划(打家劫舍,股票买卖)
今天来看看动态规划的打家劫舍和买卖股票的问题。 上题目!!!! 题目:打家劫舍 198. 打家劫舍 - 力扣(LeetCode) 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金…...

JavaScript的let、var、const
这张图片主要介绍了JavaScript中的三种变量声明方式:let、var和const。 1. let 含义:let是现在实际开发中常用的变量声明方式。特点: 块级作用域:let声明的变量只在其所在的块级作用域内有效。例如:{let x 10; } co…...

C语言-数学基础问题
一.奇数、偶数问题 1.从键盘上输入一个整数,判断并输出它是奇数还是偶数。 //从键盘上输入一个整数,判断并输出它是奇数还是偶数。 main() {int i;printf("输入一个整数:\n");scanf("%d",&i);if(i%20)printf("它是偶数\n…...

解决单元测试时找不到类名
场景: springboot单元测试mockito对mapper进行mock时: tk.mybatis.mapper.mapperexception: 无法获取实体类 XX.xx 对应的表名 分析: 使用了一个方法:Example examplenew Example(User.class); 进入源码后发现Entityhelper没…...

从零开始-VitePress 构建个人博客上传GitHub自动构建访问
从零开始-VitePress 构建个人博客上传GitHub自动构建访问 序言 VitePress 官网:VitePress 中文版 1. 什么是 VitePress VitePress 是一个静态站点生成器 (SSG),专为构建快速、以内容为中心的站点而设计。简而言之,VitePress 获取用 Markdown…...