Linux之Iptables简易应用
文档形成时期:2009-2024年
和iptables打交道有15年+了,经过无数实践后,形成一个简易应用文档。
文档主题是简易应用,所以其原理不详述了。
因软件世界之复杂和个人能力之限,难免疏漏和错误,欢迎指正。
文章目录
- iptables简要说明
- iptables和firewalld的关系
- 如何选择防火墙
- 禁用firewalld
- 启用iptables
- 保存经验
- 通过自定义链并写入开机启动的解决案例
- 加载内核模块
- 基本操作
- 常用模块和参数
- iprange
- icmp
- sport和dport
- multiport
- state
- mac
- line-numbers
- limit
- comment
- -j 动作
- SNAT示例
- DNAT示例
- 应用案例
- 通过iptables实现跨地域转发端口
- LOG示例
- 调节MTU
- 简单限速
- 通过状态模块实现FTP策略
- 防攻击示例
- 初始化和默认策略示例
- 常规简易配置综合脚本范例
iptables简要说明
rhel7以下系列使用iptables,从rhel7开始使用firewalld,但iptables也存在,正因为共同存在,所以常给初用者造成诸多困扰。
rhel8开始firewalld已经与iptables解绑。
iptables和firewalld的关系
在RHEL7里有几种防火墙共存:firewalld、iptables、ebtables,默认是使用firewalld来管理netfilter子系统,不过底层调用的命令仍然是iptables等。
如何选择防火墙
一般来讲:
rhel7或以下,选择iptables;
rhel8或以上,可以采用firewalld,使用iptables也是可以的,但两者选其一即可。
如果有docker、k8s等紧密依赖iptables的环境,建议采用iptables,禁用firewalld,请把这个配置写入新系统初始配置中。
ubuntu22仍然可保持采用iptables。
禁用firewalld
#停止firewalld服务
systemctl stop firewalld
#禁用firewalld服务
systemctl mask firewalld
启用iptables
yum install -y iptables
yum install -y iptables-services
systemctl enable iptables.service
systemctl start iptables.service
保存经验
默认保存位置:/etc/sysconfig/iptables
两种常见保存方式:
- 方式一
service iptables save #安装了iptables套件后才有效,默认保存位置:/etc/sysconfig/iptables,iptables套件配置文件是/etc/sysconfig/iptables-config - 方式二
iptables-save -c > /etc/sysconfig/iptables #没有安装iptables套件也可执行,参数-c是保存计数
保存为不同版本的示例
iptables-save > ipt.v1.0 #版本保存
iptables-restore < ipt.v1.0 #恢复datetime=$(date +%Y%m%d-%H%M%S)
iptables-save -c > /etc/sysconfig/iptables_${datetime} #以时间为版本保存
iptables-restore -c < /etc/sysconfig/iptables_${datetime}
在多人管理的工作环境中,采用同一脚本去管理iptables是非常推荐的做法,但如果确实混乱不堪,维护好/etc/sysconfig/iptables是最好的选择。参考常规简易配置综合脚本范例
在iptables和firewalld共存的系统,比如rhel7系列,但又没有安装iptables套件,或采用了firewalld和iptables共同管理防火墙,造成了iptables策略混乱,这时候可用iptables-save命令保存策略,不过这时可能更应该考虑采用firewalld去管理iptables
2024年实践中发现,k8s的网络插件calico管理的iptables策略可能造成iptables-save命令也无法完整保存策略,这需要根据生产场景来制定应对方案,以避免重启后策略丢失。
通过自定义链并写入开机启动的解决案例
#!/bin/bash
###################################
# function iptables防火墙因服务不正常而采用的临时处置
#
# 参考创建或使用示例: mkdir -p /root/sh/log; touch /root/sh/iptables_for_tmp.sh; chmod a+x /root/sh/iptables_for_tmp.sh
#
# if (! grep -q iptables_for_tmp /etc/rc.local); then echo '/root/sh/iptables_for_tmp.sh >> /root/sh/log/iptables_for_tmp.log 2>&1' >> /etc/rc.local; else echo "This script already exists in /etc/rc.local"; fi; chmod a+x /etc/rc.d/rc.local
#
# Change History:
# date author note
# 20240105 N k8s的calico导致防火墙iptables服务无法恢复运行,改用脚本
#
###################################export LANG=C
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin# 22端口处理 ###
iptables -F FOR_TMP > /dev/null 2>&1
iptables -D INPUT -j FOR_TMP > /dev/null 2>&1
iptables -X FOR_TMP > /dev/null 2>&1
iptables -N FOR_TMP
iptables -I INPUT -j FOR_TMP#放通
iptables -I FOR_TMP -s 1.2.3.4 -p tcp --dport 22 -j ACCEPT#限制
iptables -A FOR_TMP -p tcp --dport 22 -j DROP#保存
iptables-save -c > /etc/sysconfig/iptables # 执行后保存if (! grep -q iptables_for_tmp /etc/rc.local); then echo '/root/sh/iptables_for_tmp.sh >> /root/sh/log/iptables_for_tmp.log 2>&1' >> /etc/rc.local; else echo "This script already exists in /etc/rc.local"; fi; chmod a+x /etc/rc.d/rc.local
该脚本可以反复执行,不会产生冗余策略。
加载内核模块
在早期版本的Linux内核,iptables的NAT,一般不能使用FTP的20端口,可以使用下面命令加载模块
insmod /lib/modules/2.6.18-164.el5/kernel/net/ipv4/netfilter/ip_conntrack_ftp.ko
insmod /lib/modules/2.6.18-164.el5/kernel/net/ipv4/netfilter/ip_nat_ftp.ko
或使用modprobe命令加载(推荐modprobe,因为insmod不解决依赖关系)
允许NAT转换FTP的跟踪连接,如下:
modprobe ip_nat_ftp
允许本机FTP的跟踪连接,这样就不必设置允许20和被动端口了
modprobe ip_conntrack_ftp
脚本中常用配置:
modules="ip_conntrack_ftp ip_conntrack_irc ip_nat_pptp ip_gre ip_conntrack_pptp ip_conntrack_proto_gre"
for mod in $modules
dotestmod=`lsmod | grep "${mod}"`if [ "$testmod" == "" ]; thenmodprobe $modfi
done
基于近些年Linux内核版本的系统,比如rhel6+,还未仔细分析过是否默认支持上述模块,没有的话,可以根据业务场景选择是否加载。
基本操作
iptables规则执行顺序是从上到下,前面的匹配后就不再看后面的。
基本语法:
iptables [-t table] -[AD] chain rule-specification [options]
iptables [-t table] -I chain [rulenum] rule-specification [options]
iptables [-t table] -R chain rulenum rule-specification [options]
iptables [-t table] -D chain rulenum [options]
iptables [-t table] -[LFZ] [chain] [options]
iptables [-t table] -N chain
iptables [-t table] -X [chain]
iptables [-t table] -P chain target [options]
iptables [-t table] -E old-chain-name new-chain-name
iptables -A 添加一条规则到末尾
iptables -D 删除
iptables -I 插入一条规则到最前面
iptables -R 替换
iptables -vnL 列表
iptables -vnL --line-numbers 列表时同时显示策略号,方便更新局部策略,而不需要重新配置所有策略。
常用模块和参数
iprange
–src-range ip-ip Match source IP in the specified range.
–dst-range ip-ip
例:
-m iprange --src-range 192.168.10.2-192.168.10.6
iptables -I INPUT -m iprange --src-range 192.168.10.2-192.168.10.6 -p tcp --dport 22 -j ACCEPT
icmp
-p icmp --icmp-type 类型 ping: type 8 pong: type 0
sport和dport
-p tcp
-p udp
–sport 和–dport 必须配合-p 参数使用
multiport
This module matches a set of source or destination ports. Up to 15 ports can be specified. A port range (port:port) counts as twoports. It can only be used in conjunction with -p tcp or -p udp.--source-ports [!] port[,port[,port:port...]]Match if the source port is one of the given ports. The flag --sports is a convenient alias for this option.--destination-ports [!] port[,port[,port:port...]]Match if the destination port is one of the given ports. The flag --dports is a convenient alias for this option.--ports [!] port[,port[,port:port...]]Match if either the source or destination ports are equal to one of the given ports.
例:
-p tcp -m multiport --dports 20,21,22
state
-m state --state 状态 状态:NEW、RELATED、ESTABLISHED、INVALID
NEW:有别于tcp 的syn
ESTABLISHED:连接态
RELATED:衍生态,与conntrack 关联(比如FTP常用)
INVALID:不能被识别属于哪个连接或没有任何状态
mac
mac --mac-source [!] addressMatch source MAC address. It must be of the form XX:XX:XX:XX:XX:XX. Note that this only makes sense for packets coming froman Ethernet device and entering the PREROUTING, FORWARD or INPUT chains.
line-numbers
--line-numbersWhen listing rules, add line numbers to the beginning of each rule, corresponding to that rule's position in the chain.
limit
This module matches at a limited rate using a token bucket filter. A rule using this extension will match until this limit is reached(unless the flag is used). It can be used in combination with the LOG target to give limited logging, for example.--limit rateMaximum average matching rate: specified as a number, with an optional second minute hour or day suffix; thedefault is 3/hour.注意:limit 英语上看是限制的意思,但实际上只是按一定速率去匹配而已,要想限制的话后面要再跟一条DROP,但使用下面这条就不必了。--limit-burst numberMaximum initial number of packets to match: this number gets recharged by one every time the limit specified above is notreached, up to this number; the default is 5.
comment
Allows you to add comments (up to 256 characters) to any rule.--comment commentExample:iptables -A INPUT -s 192.168.0.0/16 -m comment --comment "A privatized IP block"
-j 动作
-j有如下动作:
DROP 丢弃
ACCEPT 接受
LOG 记入日志,默认是message
–log-tcp-options :记录tcp header的相关资讯
–log-ip-options :记录ip header的相关资讯
RETURN 返回父链,例:假设一个包进入了INPUT 链,匹配了某条target 为–jump EXAMPLE_CHAIN 规则,然后进入了子链EXAMPLE_CHAIN。在子链中又匹配了某条规则,恰巧target 是–jump RETURN,那包就返回INPUT 链了。如果在INPUT链里又遇到了–jump RETURN,那这个包就要交由缺省的策略来处理了。
SNAT 更换源地址,NAT
DNAT 更换目的地址,NAT
MASQUERADE 伪装为-o选项指定的网卡上的IP,比SNAT和DNAT负载稍高
SNAT示例
通常用于客户端上外网
iptables -t nat -A POSTROUTING -s 192.168.0.0/255.255.255.0 -d 1.2.3.0/255.255.255.0 -j SNAT --to-source 192.168.1.2
特别注意192.168.1.2是本系统的出站网口IP,通过ip a
可以查看到
DNAT示例
通常用于服务器端口的发布
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to X.X.X.X:8080
应用案例
通过iptables实现跨地域转发端口
iptables端口代理,做到像nginx,haproxy一样转发TCP请求,但是它不能关心应用层的东西,比机主机头,没有超时时间限制,除非网络不稳定
开启系统路由
echo "1" > /proc/sys/net/ipv4/ip_forward
或者修改/etc/sysctl.conf
net.ipv4.ip_forward = 1
然后执行sysctl -p 永久生效
添加nat策略到转发服务器iptables主脚本(假设通过脚本管理iptables且有一个主脚本),在转发服务器添加,示例如下
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -F PREROUTING
iptables -t nat -F POSTROUTING
iptables -t nat -A PREROUTING -i eth0 -d 转发服务器本机系统ip -p tcp -m multiport --dport 80,8080 -j DNAT --to-destination 目标服务器公网ip
iptables -t nat -A POSTROUTING -o eth0 -d 目标服务器公网ip -p tcp -m multiport --dport 80,8080 -j SNAT --to-source 转发服务器本机系统ip
运行防火墙主脚本
LOG示例
iptables -A INPUT -s x.x.x.x -j LOG --log-tcp-options --log-ip-options --log-prefix '[IPTABLES IMLOG] : ’
调节MTU
iptables -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1400:1536 -j TCPMSS --clamp-mss-to-pmtu
简单限速
-A FORWARD -m limit -d 192.168.0.2 --limit 86/sec -j ACCEPT # 这句意思是限定每秒只转发86个到达192.168.0.2的数据包(约每秒128KB 一个数据包是1.5KB)
-A FORWARD -d 192.168.0.2 -j DROP #这句作用是超过限制的到达192.168.0.2的数据包不通过)
上面两条同时应用才有效。
通过状态模块实现FTP策略
对于FTP,如果有允许状态RELATED,ESTABLISHED的规则,并加载了ip_conntrack_ftp模块
就不必再单独允许20和被动端口,如:
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -s -p tcp --dport 21 -j ACCEPT
防攻击示例
丢弃坏的TCP包
[root@tp ~]#iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j DROP
处理IP碎片数量,防止攻击,允许每秒100个,-f就是指定碎片包
[root@tp ~]#iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT
设置ICMP包过滤,允许每秒1个包,限制触发条件是10个包.
[root@tp ~]#iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
我在前面只所以允许ICMP包通过,就是因为我在这里有限制.
限制 ping (echo-request) 传入的速度
限制前, 可正常每 0.2 秒 ping 一次
ping your.linux.ip -i 0.2
限制每秒只接受一个 icmp echo-request 封包
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s --limit-burst 1 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j Drop
–limit 1/s 表示每秒一次; 1/m 则为每分钟一次
–limit-burst 表示允许触发 limit 限制的最大次数
限制 ssh 连入频率
建立自订 Chain, 限制 tcp 连线每分钟一次, 超过者触发 Log 记录 (记录在 /var/log/messages)
iptables -N ratelimit
iptables -A ratelimit -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A ratelimit -p tcp --syn -m limit --limit 1/m --limit-burst 1 -j ACCEPT
iptables -A ratelimit -p tcp -j LOG --log-level “NOTICE” --log-prefix “[RATELIMIT]”
iptables -A ratelimit -p tcp -j Drop
引用自定义Chain, 限制 ssh (tcp port 22) 连入频率
iptables -A INPUT -p tcp --dport 22 -s 192.168.0.0/16 -j ACCEPT (特定 IP 来源不受限制)
iptables -A INPUT -p tcp --dport 22 -j ratelimit
结合sshd_config设定
LoginGraceTime 30 密码输入时限为 30 秒
MaxAuthTries 2 最多只能输入 3 次密码
防治 SYN-Flood 碎片攻击
iptables -N syn-flood
iptables -A syn-flood -m limit --limit 100/s --limit-burst 150 -j RETURN
iptables -A syn-flood -j DROP
iptables -I INPUT -j syn-flood
控制单个IP的最大并发连接数
iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 30 -j REJECT #允许单个IP的最大连接数为 30
iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 16 --connlimit-mask 24 -j REJECT
控制单个IP在一定的时间(比如60秒)内允许新建立的连接数
iptables -A INPUT -p tcp --dport 80 -m recent --name BAD_HTTP_ACCESS --update --seconds 60 --hitcount 30 -j REJECT
iptables -A INPUT -p tcp --dport 80 -m recent --name BAD_HTTP_ACCESS --set -j ACCEPT
#单个IP在60秒内只允许最多新建30个连接
iptables也有缓存cc或ddos攻击的能力,但现如果很多cc和ddos都不是iptables能解决的,这里就略了。
初始化和默认策略示例
初始化(不会影响默认策略)
iptables -F 清空规则
iptables -X 清除自定义规则链
iptables -Z 将所有chain计数归零
默认策略,通过iptables -A或-I等是不会改变默认策略的。
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -F
iptables -t nat -X
常规简易配置综合脚本范例
一个非常简易通用适用于大部分场景的基础脚本,基于此广泛应用于rhel5-rhel9系列和ubuntu系列的数千台系统,有充分的实践过程,可靠且易于维护。
在有docker或k8s的环境中,建议基于此改用自定义链维护自定义策略,在本文通过自定义链并写入开机启动的解决案例中有采用自定义链的方式可参考。
#!/bin/bash
###################################
# function iptables 常用linux防火墙主脚本 默认阻止所有,允许部分
#
# create: touch /root/sh/iptables.sh; chmod 700 /root/sh/iptables.sh
#
# Change History:
# 2009/12/09 N create
# 2017/08/03 N improve
############################################ ENV #################
export LANG=C
#export LC_ALL=C
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin###### filter table ################
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -F
iptables -X###### INPUT chains ####### 20190618 TCP的远程拒绝服务漏洞临时解决措施
iptables -I INPUT -p tcp --tcp-flags SYN SYN -m tcpmss --mss 1:500 -j DROP -m comment --comment "TCP的远程拒绝服务漏洞临时解决措施"iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT### ICMP ###
iptables -A INPUT -p icmp -m icmp --icmp-type any -m limit --limit 20/s -j ACCEPT### web ###
iptables -A INPUT -p tcp -m state --state NEW -m multiport --dport 80,443 --tcp-flags SYN,RST,ACK SYN -j ACCEPT### mon ###
# zabbix
iptables -A INPUT -s 1.2.3.4 -p tcp --dport 10050 -j ACCEPT### Trust Network #################
adminiplistdata_array=(
'1.2.3.4 VPN1'
'1.2.3.5 VPN2'
)
# 注意:上面是模拟二维数组,确保每行有两个“元素”,并用单引号包住。
for adminipdata in "${adminiplistdata_array[@]}"
doadminip=`echo $adminipdata | awk '{ print $1; }'`adminip_comment=`echo $adminipdata | awk '{ print $2; }'`iptables -A INPUT -s $adminip -p tcp -m multiport --dport 20,21,22,3306 -j ACCEPT -m comment --comment "$adminip_comment"
done### global ###
iptables -A INPUT -j DROP###### save ####################
iptables-save -c > /etc/sysconfig/iptables
iptables-save -c > /etc/sysconfig/iptables_$(date +%Y%m%d-%H%M%S)
该脚本可以反复执行,不会产生冗余策略。
相关文章:
Linux之Iptables简易应用
文档形成时期:2009-2024年 和iptables打交道有15年了,经过无数实践后,形成一个简易应用文档。 文档主题是简易应用,所以其原理不详述了。 因软件世界之复杂和个人能力之限,难免疏漏和错误,欢迎指正。 文章目…...
树状结构查询 - 华为OD统一考试
OD统一考试 分值: 200分 题解: Java / Python / C++ 题目描述 通常使用多行的节点、父节点表示一棵树,比如: 西安 陕西 陕西 中国 江西 中国 中国 亚洲 泰国 亚洲 输入一个节点之后,请打印出来树中他的所有下层节点。 输入描述 第一行输入行数,下面是多行数据,每行以…...
版本控制系统教程
1.Git的基本介绍 1.1 Git的概念 Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目.Git是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件.Git与常用的版本控制工具CVS,Subversion等不同ÿ…...
Java多线程并发篇----第十篇
系列文章目录 文章目录 系列文章目录前言一、start 与 run 区别二、JAVA 后台线程三、什么是乐观锁前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 一、start 与 r…...
模型\视图一般步骤:为什么经常要用“选择模型”QItemSelectionModel?
一、“使用视图”一般的步骤: //1.创建 模型(这里是数据模型!) tabModelnew QSqlTableModel(this,DB);//数据表 //2.设置 视图的模型(这里是数据模型!) ui->tableView->setModel(tabModel); 模型种类: QStringListModel…...
C#,愚弄数(Hoax Number)的计算方法与源代码
一、愚弄数(Hoax Number) 愚弄数(Hoax Number)是一种组合数字, 其数字总和等于其不同质因数的数字总和。 注:1不被视为质数, 因此它不包含在不同质因数的总和中。 有些愚弄数(Hoax Number)数字也…...
c JPEG编码,此程序没有处现MCU中亮度分量的排序
#include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdlib.h> #include <unistd.h> #include <sys/ioctl.h> #include <linux/videodev2.h> //v4l2 头文件 #include <strin…...
前端规范扩展
前端编程规范是基于原有vue2基础上那套《编码风格及标准》上,应用于vue3、typescript、vite2基础上延伸出来的扩展补充,持续完善 一、编码规范 ESLint 代码检测工具 Pretter 代码格式化工具配合双校验代码 Git 规范 - 编码工具 vscode 同步参考文档中…...
【AI视野·今日NLP 自然语言处理论文速览 第七十二期】Mon, 8 Jan 2024
AI视野今日CS.NLP 自然语言处理论文速览 Mon, 8 Jan 2024 Totally 17 papers 👉上期速览✈更多精彩请移步主页 Daily Computation and Language Papers DeepSeek LLM: Scaling Open-Source Language Models with Longtermism Authors DeepSeek AI Xiao Bi, Deli Ch…...
RT-Thread基于AT32单片机的CAN应用
1 硬件电路 2 RT-Thread驱动配置 RT-Studio中没有CAN相关的图形配置,需要手动修改board.h。在board.h的末尾,增加相关的BSP配置。 #define RT_CAN_USING_HDR #define BSP_USING_CAN13 IO配置 at32_msp.c中的IO配置是PB9和PB10,掌上实验室V…...
LeetCode---121双周赛---数位dp
题目列表 2996. 大于等于顺序前缀和的最小缺失整数 2997. 使数组异或和等于 K 的最少操作次数 2998. 使 X 和 Y 相等的最少操作次数 2999. 统计强大整数的数目 一、大于等于顺序前缀和的最小缺失整数 简单的模拟题,只要按照题目的要求去写代码即可,…...
RT-Thread I/O设备模型
I/O设备模型 绝大部分的嵌入式系统都包括一些I/O(Input/Output,输入/输出)设备,例如仪器上的数据显示屏、工业设备上的串口通信、数据采集设备上用于保存数据的Flash或SD卡,以及网络设备的以太网接口等,都…...
CloudCompare——拟合空间球
目录 1.拟合球2.软件操作3.算法源码4.相关代码 本文由CSDN点云侠原创,CloudCompare——拟合空间球,爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT生成的文章。 1.拟合球 源码里用到了四点定球,…...
哪个牌子的护眼台灯适合学生?2024护眼台灯推荐
不知道各位父母对孩子的视力健康有没有关注,我国儿童青少年的近视率高达52.7%,也就是说,平均是个儿童中就有五个儿童存在视力问题,而且近视发生年龄提前至3到7岁。作为一名眼部护理博主,孩子从小看书、看屏幕起&#x…...
适用于动态 IT 环境的服务器流量监控软件
服务器在网络性能中起着至关重要的作用,这意味着保持其最佳容量至关重要。企业需要将 AI、ML 和云技术融入其 IT 中,从而提供充分的敏捷性、安全性和灵活性,在这方面,服务器流量监控已成为当务之急。通过定期监控通信、跟踪流量上…...
Java的Jar包和War包
在Java中,JAR(Java Archive)和WAR(Web Archive)都是用于打包和分发Java应用程序的压缩文件格式。它们在不同的应用场景中使用: JAR(Java Archive): 用途: 主要…...
第二十一章 javascript数据代理(数据劫持)
文章目录 一、数据劫持对象的访问器属性 二、Object.defineProperty()三、Proxy()四、补充1. Object类新增方法2. Array类新增方法 一、数据劫持 数据劫持:能够拦截到数据被使用或被修改的时机,在这个时机除了可以获取数据的值或对数据的值进行修改之外…...
苹果电脑RAW图像处理软件Capture One Pro 22 mac软件介绍
Capture One Pro 22 for mac是一款专业的RAW文件转换器和图像编辑软件,拥有更新的处理引擎、市场领先的性能和强大的新功能,可为 500 多台高端相机提供具有美丽色彩和令人难以置信的细节的终极图像质量。 Capture One Pro 22 for Mac版软件介绍 Capture…...
phpcms v9后台添加草稿箱功能
一、后台添加文章模板phpcms/modules/content/templates/content_add.tpl.php中94行增加”保存草稿“按钮: <div class"button"><input value"<?php echo L(save_draft);?>" type"submit" name"dosubmit_draf…...
机器人持续学习基准LIBERO系列5——获取显示深度图
0.前置 机器人持续学习基准LIBERO系列1——基本介绍与安装测试机器人持续学习基准LIBERO系列2——路径与基准基本信息机器人持续学习基准LIBERO系列3——相机画面可视化及单步移动更新机器人持续学习基准LIBERO系列4——robosuite最基本demo 1.更改环境设置 LIBERO-master/l…...
Java 面试题 - 多线程并发篇
线程基础 创建线程有几种方式 继承Thread类 可以创建一个继承自Thread类的子类,并重写其run()方法来定义线程的行为。然后可以通过创建该子类的实例来启动线程。 示例代码: class MyThread extends Thread {public void run() {// 定义线程的行为} …...
2401d,讨论d串滑动参数
原文 因为对编译时执行的i串的兴趣,我一直在考虑搞个通用用例,而不是相关i串的用例. 滑动模板参数 请考虑以下模板: void pluto(string s)() {pragma(msg, s); } void test() {pluto!"hello"(); }因为s是编译时参数,这编译,而pragma(msg,s) 期望s为编译时值. voi…...
etcd官方docker镜像及dockerfile问题处理
解决下我之前etcd使用docker镜像启动的坑 1、问题镜像docker-file: 这个dockerfile看着看不出来问题,但如果有人真的执行我之前两篇文章的文件,就会有问题,什么问题呢,无法连接到etcd,由于我是刚装上docker,排查了一圈,包括docker网络及是否是本地docker的网络问题,…...
2023 IoTDB Summit:天谋科技高级开发工程师苏宇荣《汇其流:如何用 IoTDB 流处理框架玩转端边云融合》...
12 月 3 日,2023 IoTDB 用户大会在北京成功举行,收获强烈反响。本次峰会汇集了超 20 位大咖嘉宾带来工业互联网行业、技术、应用方向的精彩议题,多位学术泰斗、企业代表、开发者,深度分享了工业物联网时序数据库 IoTDB 的技术创新…...
Pygame程序的屏幕显示
不同对象的绘制与显示过程 在Pygame中,需要将所有需要在屏幕上显示的内容都绘制在一个display surface上。该Surface通常称为screen surface,它是pygame.display.set_mode()函数返回的Surface对象。 在绘制不同对象时,可以使用不同的绘制方…...
LVGL的List控件的触摸按键和实体按键的处理
在LVGL的List控件使用过程中,虽然通过触摸按键选择item,但是有些场景需要实体按键选取item,但是LVGL 的V8.3中没有像Emwin那样有函数选择list item的函数。LVGL中List引入了Group的概念,把列表项都添加到同一个group中。然后通过更…...
数据结构 模拟实现二叉树(孩子表示法)
目录 一、二叉树的简单概念 (1)关于树的一些概念 (2)二叉树的一些概念及性质 定义二叉树的代码: 二、二叉树的方法实现 (1)createTree (2)preOrder (…...
Android14之解决刷机报错:Can not load Android system. Your data may be corrupt(一百七十七)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…...
二阶贝塞尔曲线生成弧线
概述 本文分享一个二阶贝塞尔曲线曲线生成弧线的算法。 效果 实现 1. 封装方法 class ArcLine {constructor(from, to, num 100) {this.from from;this.to to;this.num num;return this.getPointList();}getPointList() {const { from, to } thisconst ctrlPoint thi…...
FilterQuery过滤查询
ES中的查询操作分为两种:查询和过滤。查询即是之前提到的query查询,它默认会计算每个返回文档的得分,然后根据得分排序。而过滤只会筛选出符合条件的文档,并不计算得分,并且可以缓冲记录。所以我们在大范围筛选数据时&…...
好康的网站代码/广告大全
在这个数据横流的信息时代,一系列企业用户数据泄密事件,给互联网信息安全敲响了警钟。 2011年至2014年上半年,乌云漏洞平台(乌云网)连续披露了多家互联网公司的安全漏洞,引发了社会各界的强烈关注…...
共享门店新增实时收款/网站seo排名公司
最近在做项目交互的时候,刚开始向后台传递数据返回 415 ,后来百度添加了 contentType:“application/json“ 之后返回400,然后把传输的数据格式改为json字符串就传输成功了,现在我们来看看 contentType:“a…...
《传奇世界》官网/娄底seo
Redux 介绍 本文主要是对 Redux 官方文档 的梳理以及自身对 Redux 的理解。单页面应用的痛点 对于复杂的单页面应用,状态(state)管理非常重要。state 可能包括:服务端的响应数据、本地对响应数据的缓存、本地创建的数据࿰…...
公司内部网站建设奖励办法/哪里可以学企业管理培训
python WSGI框架详解WSGI几个关于WSGI相关的概念WSGI:全称是Web Server Gateway Interface,WSGI不是服务器,python模块,框架,API或者任何软件,只是一种规范,描述web server如何与web applicatio…...
温州市网站优化/互联网营销的方式有哪些
大家知道,我们的Java程序被编译器编译成class文件,在class文件中描述的各种信息,最终都需要加载到虚拟机内存才能运行和使用,那么虚拟机是如何加载这些class文件的呢?在加载class文件的过程中虚拟机又干了哪些事呢&…...
wordpress做论坛网站/杭州网站关键词排名
最小生成树 – kruskal 每次贪心的尝试将图中最小的非树边,标记为树边,非法则跳过 将全部边按照权值由小到大排序 按照顺序(边权由小到大)考虑每一条边,只要这条边和我们选择的边不构成环,就保留这条边&a…...