iptables详解
华子目录
- 什么是`防火墙`
- 分类
- `netfilter`(`数据包过滤`)
- 定义
- `netfilter`分析内容
- 防火墙无法完成的任务
- `netfilter`策略管理工具
- `netfilter`的`5类hook函数`
- 防火墙规则
- 策略匹配原则
- `iptables`
- `iptables`流量`处理动作`
- `iptables表`
- `5种规则表`
- `安装iptables`
- `iptables策略文件`
- `iptables命令`的`语法格式`以及`常用参数`
- 格式
- 参数
- 示例
- 查看策略`iptables -nL --line`
- 清空规则
- 修改策略
- 修改默认策略
- 添加链
- 修改链名
- 删除链
- 部署`nginx`,拒绝访问`80端口`
- 拒绝`来源`为`172.25.254.100`访问`80端口`
- 只能让`来源`为`172.25.254.100`访问`80端口`
- `iptables`的`状态跟踪`(只能访问`22`和`80`端口)
- 利用`iptables`搭建`Linux路由器`
什么是防火墙
防火墙
时位于内部网
和外部网
之间的屏障
,它按照系统管理员
预先定义好的规则
来控制数据包的进出
火墙
是系统内核上
的一个模块netfilter
(数据包过滤机制
)- 通过
netfilter
来管理kernel space
(内核空间
)的策略
- 没有
火墙
时,流量
直接访问内核管理
的服务
- 有
火墙
时,会在内核
上开一个内核空间
(记录了什么流量可以通过,什么流量不可以通过
)。负责往内核空间
里面写东西
的是netfilter
- 一个
linux内核
上有2个网卡
,只有开启内核路由转发
功能,2个网卡
才能通信
#临时开启内核路由转发
[root@server1 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
分类
硬件防火墙
:由厂商设计好
的主机硬件
,其操作系统
主要以提供数据包数据的过滤机制
为主
,并去掉
不必要的功能
软件防火墙
:保护系统网络安全
的一套软件
netfilter
(数据包过滤
)
定义
netfilter
是一个工作
在Linux内核
的网络数据包处理框架
,用于分析
进入主机
的网络数据包
- 将
数据包
的头部数据
(硬件地址,软件地址,TCP,UDP,ICMP等
)提取出来
进行分析
,来决定该连接
为放行
还是抵挡
netfilter
分析OSI七层协议
的2,3,4层
netfilter
分析内容
拒绝
让Internet
的数据包
进入主机
的某些端口
拒绝
某些来源IP
的数据包进入
拒绝
让带有
某些特殊标志
(flag
)的数据包
进入,如:带有SYN
的主动连接标志
- 分析
硬件地址
(MAC地址
)决定是否连接
- 可以做
nat地址转换
防火墙无法完成的任务
防火墙
并不能杀毒
或清除木马程序
(假设主机开放
了www服务
,那么防火墙
的设置
一定是要将www服务
的port开放
给client端
。假设www服务器
有漏洞
,或者请求www服务
的数据包本身
就是病毒
的一部分
时,防火墙
时阻止不了的
)防火墙
无法阻止
来自内部
的攻击
(防火墙
对于内部
的规则
设置通常比较少
,所以就很容易造成内部员工
对于网络滥用
的情况
)
netfilter
策略管理工具
netfilter
这个内核网络栈过滤框架
的使用
需要通过iptables
或nftables
来进行
与netfilter
进行交互工具
常用种类
iptables服务
使用iptables
交互,rhel6之前
系统默认使用此服务
,管理手段丰富
,配置比较复杂
firewalld
服务使用nftables
交互,rhel6之后
的版本默认使用此服务
,配置类似windows火墙
,功能模块度高
,使用简单
iptables
与firewalld
都不是真正的防火墙
,它们都只是用来
定义防火墙策略
的管理工具
,即只是一种服务
,而真正
使用规则干活
的是内核的netfilter
netfilter
的5类hook函数
hook函数
也叫规则链
电脑
是客户端
input链
:位于流量
经过路由之后
,并且目的ip
是本机ip
output链
:由本机
发出的流量
,并且在路由之前
forward链
:位于在流量路由之后
,目的ip
不是本机ip
prerouting链
:位于路由之前
,流量
一致性检查之后
postrouting链
:所有
即将离开本机
的流量
防火墙规则
通
(放行
)堵
(阻止,拒绝
)拒绝
:返回信息
后拒绝
阻止
:直接丢包
策略匹配原则
防火墙
会从上至下
的顺序
来读取配置
的策略
- 在
找到匹配项
后就立即结束配置工作
并去执行匹配项
中定义的行为
(即放行或阻止
) - 如果在
读取完
所有的策略
后没有匹配项
,就去执行默认的策略
iptables
iptables
会从上至下
的顺序
来读取配置
的策略
- 在
找到匹配项
后就立即结束配置工作
并去执行匹配项
中定义的行为
(即放行或阻止
) - 如果在
读取完
所有的策略
后没有匹配项
,就去执行默认的策略
iptables
的规则
默认保存在内存
中,如果需要永久保存
需要把策略
保存到/etc/sysconfig/iptables
中
#永久保存
[root@server1 ~]# service iptables save
iptables
流量处理动作
当规则链
匹配后应采用以下几种动作
来处理匹配
的流量
accept
:允许流量通过
reject
:拒绝流量通过
,拒绝后
回复拒绝信息
log
:记录日志信息
drop
:拒绝流量通过
,流量丢弃不回复
iptables表
表中
可以有多种hook函数
,每个规则链
中里可以有多个策略
5种规则表
raw表
:第一优先级
的表
,不会
对数据包
进行跟踪和nat转换
,使用output,prerouting
,对应的动作
为notrack
mangle表
:第二优先级
的表
,主要用于修改数据包
的TOS
(Type Of Service
,服务类型
)、TTL
(Time To Live
,生存周期
)值以及为数据包
设置Mark标记
,以实现Qos
以及策略路由
等- 由于需要
相应的路由设备支持
,因此应用并不广泛
,包含全部5个规则链
- 由于需要
nat表
:第三优先级
的表
,网络地址转换表
,用于修改源和目的地址
,分snat
(源地址转换
)和dnat
(目的地址转换
)。包含三个规则链
:output,prerouting,postrouting
(和内核无关
的数据包
,主要做地址转换
)filter表
:第四优先级
的表
,用于对数据包过滤
(外网进入内网时
),根据具体的规则
决定是否放行该数据包
(如drop,accept,reject
),包含三个规则链
:input,forward,forward
(经过内核
处理过的所有网络包
:input,output,forward
)- 所谓的
防火墙
其实基本上
是指这张表上
的过滤规则
,常用
- 所谓的
security表
:最不常用的表
- 通常我们说的
iptables
只有4张表
,security表
是新加入的特性
,用于在数据包
上应用selinux
- 通常我们说的
安装iptables
RHEL9,Centos7
中默认使用
的是firewalld
,且与iptables
之间有冲突
,如果需要使用iptables
需要先停止firewalld
再进行安装
[root@server1 ~]# systemctl stop firewalld[root@server1 ~]# systemctl disable firewalld#锁服务,解锁服务使用unmask
[root@server1 ~]# systemctl mask firewalld.service
[root@server1 ~]# yum install iptables-services -y
[root@server1 ~]# systemctl enable --now iptables[root@server1 ~]# systemctl is-active iptables
active
iptables策略文件
规则链存储文件
在/etc/sysconfig/iptables
前三行
为注释
- 显示的是
filter表
的规则链
[root@server1 ~]# cat /etc/sysconfig/iptables
# sample configuration for iptables service
# you can edit this manually or use system-config-firewall
# please do not ask us to add additional ports/services to this default configuration
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
iptables命令
的语法格式
以及常用参数
永久保存策略
[root@server1 ~]# service iptables save #保存设置的规则
# 注意:保存设置的规则,否则重启后会恢复默认设置
格式
[root@server1 ~]# iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 控制动作#-A添加策略
#-I在指定位置添加策略
#-D删除策略
#-R修改策略
#-j控制动作
参数
参数 | 作用 |
---|---|
-t | 对指定的表 进行操作 ,表 必须是raw,nat,filter,mangle,security 中的一个 ,默认 是filter |
-p | 指定要匹配的数据包协议类型 |
-s | 匹配源地址ip/mask ,当后面没有mask ,源ip 是一个地址 (比如192.168.1.1 );当有mask 时,表示一个网段 (比如192.168.1.0/24 ) |
-d | 匹配目的地址ip/mask |
-i 网卡名 | 匹配从这块网卡流入 的数据 ,只对input,forward,prerouting链 起作用。如果没有指定此选项 ,则表示可以流入任何一个网卡 |
-o 网卡名 | 匹配从这块网卡流出 的数据 ,只对nat表中的链 起作用。如果没有指定此选项 ,则表示可以从任何一个网卡流出 |
-L | 列出规则链(chain)上 的所有规则 ,如果没有指定链 ,列出表 上所有链 的所有规则 |
-A | 在指定规则链 的末尾加入新策略 |
-I num | 在指定规则链 的指定位置 插入策略 ,如果num为1 ,表示在头部插入 ,num为2 ,表示在第二条策略位置处插入 |
-D num | 删除指定位置的策略 |
-R num | 替换/修改第几条策略 |
-P | 设置指定链 的默认策略 ,只有内置的链 才可以设置 ,用户自定义 的链 不允许设置 |
-F | 清空所有策略 |
-N | 创建新链 |
-X | 删除 指定的链 ,这个链 必须没有 被其它任何策略引用 ,而且这条链上 必须没有任何策略 。如果没有指定链名 ,则会删除 该表 中所有非内置的链 |
-E | 修改链名 |
-Z | 把指定链 ,或者表 中的所有链 上的所有计数器 清零 |
-j | 满足某条件 时该执行什么样的动作 |
-h | 显示帮助信息 |
示例
查看策略iptables -nL --line
[root@server1 ~]# iptables -t filter -nL --line# -n:显示源# -L:写在最后,列出所有规则# --line:增加行号
[root@server ~]# iptables -nvxL --line
# 参数释义# -n:显示源# -v:详细信息# -x:单位自动转换为KB\MB# -L:写在最后,列出所有规则# --line:增加行号
[root@server ~]# iptables -nvxL --line
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source
destination
1 159 24271 ACCEPT 0 -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 0 0 ACCEPT 1 -- * * 0.0.0.0/0 0.0.0.0/0
3 0 0 ACCEPT 0 -- lo * 0.0.0.0/0 0.0.0.0/0
4 0 0 ACCEPT 6 -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
5 19 1843 REJECT 0 -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibitedChain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source
destination
1 0 0 REJECT 0 -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibitedChain OUTPUT (policy ACCEPT 143 packets, 12422 bytes)
num pkts bytes target prot opt in out source
destination# 显示释义# num:规则的行号# pkts:数据包数量# bytes:数据包字节数# target:动作(放行、拒绝)# port:端口# in:入站网卡# out:出站网卡
清空规则
# 清空内存中的规则(清空所有表的所有链)
[root@server ~]# iptables -F
修改策略
-R
修改策略
[root@server1 ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
REJECT tcp -- !172.25.254.100 0.0.0.0/0 tcp dpt:80 reject-with icmp-port-unreachable
[root@server1 ~]# iptables -R INPUT 1 -p tcp -s 172.25.254.100 --dport 80 -j REJECT[root@server1 ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
REJECT tcp -- 172.25.254.100 0.0.0.0/0 tcp dpt:80 reject-with icmp-port-unreachable
修改默认策略
-P
修改默认策略
[root@server1 ~]# iptables -nL
[root@server1 ~]# iptables -P FORWARD DROP[root@server1 ~]# iptables -nL
添加链
-N
添加链
[root@server1 ~]# iptables -N huazi[root@server1 ~]# iptables -nL
修改链名
-E
修改链名
[root@server1 ~]# iptables -E huazi HUAZI[root@server1 ~]# iptables -nL
删除链
-X
删除链
[root@server1 ~]# iptables -X HUAZI[root@server1 ~]# iptables -nL
部署nginx
,拒绝访问80端口
[root@server1 ~]# yum install nginx -y#先清空策略
[root@server1 ~]# iptables -F#添加策略
[root@server1 ~]# iptables -A INPUT -p tcp --dport 80 -j REJECT[root@server1 ~]# iptables -nL
[root@server1 ~]# echo hello world > /usr/share/nginx/html/index.html[root@server1 ~]# systemctl enable --now nginx
[root@server1 ~]# curl 172.25.254.100
curl: (7) Failed to connect to 172.25.254.100 port 80: 拒绝连接
#删除策略后
[root@server1 ~]# iptables -D INPUT 1[root@server1 ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destinationChain FORWARD (policy ACCEPT)
target prot opt source destinationChain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@server1 ~]# curl 172.25.254.100
hello world
拒绝来源
为172.25.254.100
访问80端口
#先清空
[root@server1 ~]# iptables -F[root@server1 ~]# iptables -A INPUT -p tcp -s 172.25.254.100 --dport 80 -j REJECT[root@server1 ~]# iptables -nL
[root@server1 ~]# curl 172.25.254.100
curl: (7) Failed to connect to 172.25.254.100 port 80: 拒绝连接
#删除策略
[root@server1 ~]# iptables -D INPUT 1
[root@server1 ~]# curl 172.25.254.100
hello world
只能让来源
为172.25.254.100
访问80端口
!
取反
[root@server1 ~]# iptables -F[root@server1 ~]# iptables -A INPUT -p tcp ! -s 172.25.254.100 --dport 80 -j REJECT[root@server1 ~]# iptables -nL
[root@server1 ~]# curl 172.25.254.100
hello world
#删除
[root@server1 ~]# iptables -D INPUT 1
[root@server1 ~]# curl 172.25.254.100
hello world
iptables
的状态跟踪
(只能访问22
和80
端口)
- 在
没有状态跟踪之前
[root@server1 ~]# iptables -F
[root@server1 ~]# iptables -A INPUT -i lo -j ACCEPT
[root@server1 ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
[root@server1 ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
[root@server1 ~]# iptables -A INPUT -j REJECT
[root@server1 ~]# iptables -F
- 但是
这样写
会消耗
大量的cpu等资源
,我们应该对流量
进行状态跟踪
,只对第一次访问
的流量
做检测
[root@server1 ~]# iptables -F
[root@server1 ~]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
[root@server1 ~]# iptables -A INPUT -m state --state NEW -i lo -j ACCEPT
[root@server1 ~]# iptables -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT
[root@server1 ~]# iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
[root@server1 ~]# iptables -A INPUT -j REJECT
[root@server1 ~]# iptables -nL
利用iptables
搭建Linux路由器
准备2
台主机
- 一台
server1
,一个nat网卡
,一个仅主机网卡
- 一台
server2
,一个仅主机网卡
server1
充当server2
的路由器
server1
ip配置
[root@server1 ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0
uuid=3fe4f788-e5f3-4046-8a3e-6cdfb8098aab
type=ethernet
interface-name=eth0[ethernet][ipv4]
address=172.25.254.100/24,172.25.254.2
dns=114.114.114.114;
method=manual[ipv6]
addr-gen-mode=default
method=auto[proxy][root@server1 ~]# cat /etc/NetworkManager/system-connections/eth1.nmconnection
[connection]
id=eth1
type=ethernet
interface-name=eth1[ethernet][ipv4]
address=192.168.0.100/24
method=manual[ipv6]
addr-gen-mode=default
method=auto[proxy]
[root@server1 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.25.254.2 0.0.0.0 UG 100 0 0 eth0
172.25.254.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 101 0 0 eth1
server2
ip配置
[root@server2 ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0
uuid=3fe4f788-e5f3-4046-8a3e-6cdfb8098aab
type=ethernet
interface-name=eth0[ethernet][ipv4]
address=192.168.0.200/24,192.168.0.100
dns=114.114.114.114;
method=manual[ipv6]
addr-gen-mode=default
method=auto[proxy]
[root@server2 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.100 0.0.0.0 UG 100 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
server1
开启内核路由功能
#临时开启
[root@server1 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
内网
访问外网
[root@server1 ~]# iptables -F
[root@server1 ~]# iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 172.25.254.100
[root@server1 ~]# iptables -t nat -nL
#这时server2就可以上网了
[root@server2 ~]# ping www.baidu.com
PING www.a.shifen.com (110.242.68.4) 56(84) 比特的数据。
64 比特,来自 110.242.68.4 (110.242.68.4): icmp_seq=1 ttl=127 时间=106 毫秒
64 比特,来自 110.242.68.4 (110.242.68.4): icmp_seq=2 ttl=127 时间=35.3 毫秒
64 比特,来自 110.242.68.4 (110.242.68.4): icmp_seq=3 ttl=127 时间=70.6 毫秒
外网
访问内网
[root@server1 ~]# iptables -t nat -A PREROUTING -i eth0 -j DNAT --to-dest 192.168.0.200
[root@server1 ~]# iptables -t nat -nL
相关文章:
iptables详解
华子目录 什么是防火墙分类netfilter(数据包过滤)定义netfilter分析内容 防火墙无法完成的任务netfilter策略管理工具netfilter的5类hook函数防火墙规则策略匹配原则iptablesiptables流量处理动作iptables表5种规则表 安装iptablesiptables策略文件 ipta…...
静态链表的构建
前言: 静态链表的概述: 静态链表是一种在数组中模拟链表结构的数据结构,它通过数组的索引来模拟指针,实现节点之间的链接,就不需要使用指针了。每个节点由两部分组成:数据域和游标。数据域用于储存数据&a…...
python3中的身份运算符
一. 简介 本文简单学习一下,python3中的身份运算符。 在Python 3中,身份运算符用于比较两个对象的身份,即它们是否引用内存中的同一个对象。 二. python3 中的身份运算符 1. python3 中的身份运算符 python3 中的身份运算符如下表所示&a…...
Java泛型设计详解
引言 在日常Java开发中,泛型是一个非常重要的特性。它提供了编译时的类型安全检查,增强了代码的可读性和可维护性。然而,对于初学者甚至一些有经验的开发者来说,泛型的使用和理解仍然是一个挑战。本文旨在深入探讨Java泛型的诞生…...
第十九章程序清单合集——Java语言程序设计进阶篇(黑皮书)
目录 程序清单19_1GenericStack 程序清单19_2GenericMethodDemo 程序清单19_3BoundedTypeDemo 程序清单19_4GenericSort 程序清单19_5Max 程序清单19_6MaxUsingGenericType 程序清单19_7wildCardNeedDemo 程序清单19_8AnyWildCardDemo 程序清单19_9SuperWildChardDem…...
el-table组件树形数据修改展开箭头
<style lang"scss" scoped> ::v-deep .el-table__expand-icon .el-icon-arrow-right:before {content: ">"; // 箭头样式font-size: 16px; }::v-deep .el-table__expand-icon{ // 没有展开的状态background-color: rgba(241, 242, 245, 1);color:…...
LabVIEW前面板无法显示的常见原因
当 LabVIEW 前面板显示为白色或黑色时,可能由于控件可视性设置、显卡驱动问题、程序错误或 LabVIEW 设置不当引起。通过检查面板设置、更新驱动、重启程序等方式可有效解决此问题。 遇到前面板无法显示或显示为白色/黑色的情况,可能有以下几种原因。可以…...
PyQt事件机制练习
一、思维导图 二、代码 import sysfrom PyQt6.QtTextToSpeech import QTextToSpeech from PyQt6.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QLineEdit from PyQt6 import uic from PyQt6.QtCore import Qt, QTimerEvent, QTimeclass MyWidget(QWidget):d…...
Android 中,Activity Fragment:如何进行界面跳转、数据传递等
学习笔记 1. Activity 之间的界面跳转和数据传递 在 Android 中,Activity 之间的跳转通常通过 Intent 来完成。Intent 可以携带数据,并传递给目标 Activity,也可以从目标 Activity 返回数据。 从一个 Activity 跳转到另一个 Activity // 在…...
【ubuntu18.04】安装easycwmp出现/usr/bin/ld: cannot find -lubus问题解决方案
错误日志 rootw1804-virtual-machine:/opt/dev/easycwmp# make Making all in bin make[1]: Entering directory /opt/dev/easycwmp/bin gcc -DPACKAGE_NAME\"easycwmpd\" -DPACKAGE_TARNAME\"easycwmpd\" -DPACKAGE_VERSION\"1.8.6\" -DPACKAG…...
可视化建模以及UML期末复习----做题篇
一、单项选择题。(20小题,每小题2分,共40分) 1、UML图不包括( ) A、用例图 B、状态机图 C、流程图 D、类图 E、通信图 答案:C、流程图 UML中不包括传统意义上的流程图,流程图通常是指B…...
【2024年浙江工商大学程序设计竞赛新生赛(同步赛)部分题解】
比赛链接 C. 交换 题目大意 给定一个长度为 n n n 的数组 a a a。一开始你有一个总和 s 0 s 0 s0。 现在你需要做 n n n 次操作,第 i i i 次操作的流程如下( 1 ⩽ i ⩽ n 1 \leqslant i \leqslant n 1⩽i⩽n): 选择一个下标 p ∈…...
[SAP ABAP] DEBUG ABAP程序中的循环语句
在ABAP程序开发中可能会遇到要DEBUG循环语句的情况,这个循环语句可能会执行上万次,但我们希望程序执行循环到100次就停下来,也就是希望DEBUG断点设置在循环语句的第100次停下来观察执行的结果,这时我们可以在DEBUG程序时通过设置一…...
解决阿里云轻量级服务器 Ubuntu 24.04.1 LTS 没网也 ping 不通 8.8.8.8 以及 route -n 没有输出任何转发信息
事情发生在两天前,位于公网的阿里云轻量级服务器(Ubuntu 24.04.1 LTS)忽然没网。主要是上次上服务器进行配置已经是一个多月前,最近也没有做什么事情,就忽然没网了,让人纳闷。更主要的是,上次备…...
AUTOSAR:SOME/IP 概念
文章目录 1. 用例与需求1.1 典型用例1.2 对中间件的要求 2. 协议栈示例3. SOME/IP 概念3.1 中间件整体功能与架构3.2 服务组成元素详细解释 4. 服务发现机制深入剖析5. 总结 1. 用例与需求 1.1 典型用例 信息娱乐系统: 后座娱乐系统连接:允许后排乘客连…...
STM32--中断
中断 中断向量表 定义一段固定的内存,以4字节对齐,存放各个中断服务函数程序的首地址。定义在启动文件中。 中断相关寄存器 内核中断不经过中断使能、除能寄存器。 中断优先级 1、抢占优先级:高高抢占优先级可以打断正在执行的低抢占优先…...
海思3559a开发
目录 固件烧录配置网络nfs挂载虚拟机文件使用telnet连接开发板 固件烧录 1、配置好HiTool烧录工具 需要注意长度必须不小于对应文件大小 2、开始烧录 先点击擦除全器件,重新给开发板上电,擦除成功后如下图所示。 点击烧写,重新给开发板上电…...
优选算法——位运算
1. 常见位运算总结 2. 判定字符是否唯一 题目链接:面试题 01.01. 判定字符是否唯一 - 力扣(LeetCode) 题目展示: 题目分析:本题有很多种做法,这里我们使用位图来解决,这种做法是一种效率很高…...
【JAVA】旅游行业中大数据的使用
一、应用场景 数据采集与整合:全面收集旅游数据,如客流量、游客满意度等,整合形成统一数据集,为后续分析提供便利。 舆情监测与分析:实时监测旅游目的地的舆情信息,运用NLP算法进行智能处理,及…...
使用html和JavaScript实现一个简易的物业管理系统
码实现了一个简易的物业管理系统,主要使用了以下技术和功能: 1.主要技术 使用的技术: HTML: 用于构建网页的基本结构。包括表单、表格、按钮等元素。 CSS: 用于美化网页的外观和布局。设置字体、颜色、边距、对齐方式等样式。 JavaScript…...
浅谈Kubernetes(K8s)之RC控制器与RS控制器
1.RC控制器 1.1RC概述 Replication Controller 控制器会持续监控正在运行的Pod列表,并保证相应类型的Pod的数量与期望相符合,如果Pod数量过少,它会根据Pod模板创建新的副本,反之则会删除多余副本。通过RC可实现了应用服务的高可用…...
如何在 openAI Sora 上生成视频内容
近期OpenAI 推出了我们期待已久的视频生成模型 Sora。能够生成包含多个角色、特定类型的动作以及主体和背景的精确细节的复杂场景。该模型不仅了解用户在提示中要求的内容,还了解这些内容在物理世界中的存在方式。 如何在 openAI Sora 上生成视频内容 使用Sora 视频…...
【Oracle11g SQL详解】日期和时间函数:SYSDATE、TO_DATE、TO_CHAR 等
日期和时间函数:SYSDATE、TO_DATE、TO_CHAR 等 在 Oracle 数据库中,日期和时间函数用于处理日期和时间数据。它们在记录创建时间、分析时间间隔、格式化输出等场景中非常重要。本文将详细讲解常用的日期和时间函数及其应用。 一、SYSDATE:获…...
STM32 串口收发文本数据包
单片机学习! 目录 前言 一、文本数据包格式 二、串口收发文本数据包代码 三、代码解析 3.1 标志位清除 3.2 数据包接收 四、代码问题改进 总结 前言 本文介绍了串口收发文本数据包程序设计的思路并详解代码作用。 一、文本数据包格式 文本数据包的格式的定义…...
铭记一次项目重大事故
在程序的世界里,bug 就像隐藏在暗处的小怪兽,时不时跳出来捣乱。而职业生涯中,总有那么一个或几个 bug 让我们刻骨铭心。它或许让项目差点夭折,或许让你熬了无数个通宵,或许有着离奇的出现方式和曲折的解决过程。无论是…...
AUTOSAR 汽车开放系统架构
AUTOSAR 官网 AUTOMOTIVE OPEN SYSTEM ARCHITECTURE AUTOSAR (AUTomotive Open System ARchitecture) is a global partnership of leading companies in the automotive and software industry to develop and establish the standardized software framework and open E/E …...
从零用java实现 小红书 springboot vue uniapp (2)主页优化
前言 移动端演示 http://8.146.211.120:8081/#/ 前面的文章我们基本完成了主页的布局 今天我们具体的去进行实现 并且分享我开发时遇到的问题 首先先看效果 java仿小红书主页 实现效果为 1.顶端全屏切换 2.上划加载更多 3.下拉当前页整体刷新 顶端全屏切换我们选择 gui-switch…...
打电话玩手机识别-支持YOLO,COCO,VOC格式的标记,超高识别率可检测到手持打电话, 非接触式打电话,玩手机自拍等
打电话玩手机识别-支持YOLO,COCO,VOC格式的标记,超高识别率可检测到手持打电话, 非接触式打电话,玩手机自拍等1275个图片。 手持打电话: 非接触打电话 玩手机 数据集下载 yolov11:https://download.csdn…...
黑马程序员Java项目实战《苍穹外卖》Day12
苍穹外卖-day12 课程内容 工作台Apache POI导出运营数据Excel报表 功能实现:工作台、数据导出 工作台效果图: 数据导出效果图: 在数据统计页面点击数据导出:生成Excel报表 1. 工作台 1.1 需求分析和设计 1.1.1 产品原…...
实现SpringBoot项目嵌入其他项目
很多时候我们需要在项目里面嵌入其他项目或者被其他项目嵌入,如我们开发一个开源项目b,用户需要在自己的项目a嵌入b项目,使用b项目的功能,而且要实现a项目工作最小化,最好实现引入即用。 1.定义b项目的自定义配置 …...
海康威视摄像头RTSP使用nginx推流到服务器直播教程
思路: 之前2020年在本科的时候,由于项目的需求需要将海康威视的摄像头使用推流服务器到网页进行直播。这里将自己半个月琢磨出来的步骤给大家发一些。切勿转载!!!! 使用网络摄像头中的rtsp协议---------通…...
【自动化】requirements.txt
1.是什么? 用于列出项目依赖的所有Python包及其版本。这使得其他开发者可以轻松地安装与你的项目兼容的环境,或者在不同的机器上复制相同的开发环境。 2.如何编写requirements.txt 手动创建 格式: 包名版本号 在终端home命令自动生成 创建r…...
C++ 中多态性在实际项目中的应用场景
背景与需求 在一个图形绘制软件中,需要绘制多种不同的图形,如圆形、矩形、三角形等。每个图形都有自己的绘制方法,但是它们都可以被看作是一个抽象的 “图形” 概念,并且都有一个共同的操作,比如绘制(draw&…...
手机租赁系统开发指南一站式服务流程解析
内容概要 手机租赁系统的开发是一个复杂但有趣的过程,像搭建乐高一样,只要找到合适的模块,就能打造出一个宾至如归的租赁平台。在这部分,我们将对开发流程的整体结构进行简要概述,并指出每个环节的重要性。 首先&…...
基于Couchbase的数据构建方案:数仓分层
初步方案是将公共层和报表层分别放在不同的bucket中,这种设计从存储和访问优化的角度是合理的,但仍有以下细节需要考虑: 1. 数仓公共层设计(origin bucket) 合理性分析: 将ODS、DWD、DWS层的数据放在一个b…...
Linux中的线程
目录 线程的概念 进程与线程的关系 线程创建 线程终止 线程等待 线程分离 原生线程库 线程局部存储 自己实现线程封装 线程的优缺点 多线程共享与独占资源 线程互斥 互斥锁 自己实现锁的封装 加锁实现互斥的原理 死锁 线程同步 线程的概念 回顾进程相关概念 …...
【保姆级】Mac如何安装+切换Java环境
本文从如何下载不同版本的JDK,到如何丝滑的切换JDK,以及常见坑坑的处理方法,应有尽有,各位看官走过路过不要错过~~~ 下载⏬ 首先上官网: https://www.oracle.com/ 打不开的话可以使用下面👇这个中文的 https://www.oracle.com/cn/java/technologies/downloads/a…...
leetcode 31 Next Permutation
题意 找到下一个permutation是什么,对于一个数组[1,2,3],下一个排列就是[1, 3, 2] 链接 https://leetcode.com/problems/next-permutation/ 思考 首先任何一个permutation满足一个性质,从某个位置往后一定是降序。…...
从RocketMQ到Dubbo:自研中间件技术的崛起
目录 一. 宝兰德 BES 中间件(BES - Business Enterprise Server) 二. TongWeb 中间件 三. 阿里巴巴 RocketMQ 四. 京东 JStorm 五. 华为 GaussDB 六. 华为 FusionInsight 七. 百度 Tinker 八. 中科曙光 Kylin 九. 滴滴 Druid 一. 宝兰德 BES 中间…...
计算机键盘简史 | 键盘按键功能和指法
注:本篇为 “计算机键盘简史 | 键盘按键功能和指法” 相关文章合辑。 英文部分机翻未校。 The Evolution of Keyboards: From Typewriters to Tech Marvels 键盘的演变:从打字机到技术奇迹 Introduction 介绍 The keyboard has journeyed from a humb…...
考研两三题
283. 移动零 - 力扣(LeetCode) 本题解法:使用双指针 解法一: 如上图,在一开始slow指向-1,fast指向数组起始位,进入while循环,保证fast不越界,因为代码中fast会自增&#…...
CentOS8或docker镜像centos8更换镜像源
因为 CentOS 8 已经结束生命周期,原来的镜像源不可用了。我们需要将镜像源改为 CentOS 8 的替代源。 在容器中运行以下命令: 首先备份原有的源 cd /etc/yum.repos.d/ mkdir backup mv *.repo backup/ 创建新的源文件 cat > /etc/yum.repos.d/Cent…...
集成方案 | Docusign + 泛微,实现全流程电子化签署!
本文将详细介绍 Docusign 与泛微的集成步骤及其效果,并通过实际应用场景来展示 Docusign 的强大集成能力,以证明 Docusign 集成功能的高效性和实用性。 在现代企业运营中,效率和合规性是至关重要的。泛微作为企业级办公自动化和流程管理的解决…...
知乎数据分析面试题及参考答案
请阐述大数定理和中心极限定理的内容及其在数据分析中的应用。 大数定理是指在随机试验中,每次出现的结果不同,但是大量重复试验出现的结果的平均值却几乎总是接近于某个确定的值。简单来说,当样本量足够大的时候,样本均值会趋近于总体均值。例如,抛硬币试验,当抛硬币的次…...
8.Vue------如何重新加载子组件key属性----vue知识积累
在子组件中使用key属性是一种强制重新渲染子组件的有效方法。通过改变key属性的值,Vue会 销毁旧组件并创建新组件,从而实现组件的重新加载。这种方法适用于需要完全重新渲染子组件, 包括其内部状态和生命周期钩子的场景,特别是…...
C语言动态内存管理
1.为什么要有动态内存分配 内存开辟方式: int val 20;//在栈空间上开辟四个字节 char arr[10] {0};//在栈空间上开辟10个字节的连续空间开辟空间的方式特点 空间开辟大小是固定德的数组在申明的时候,必须指明数组的长度,数组空间一旦确定了大小不能…...
【蓝桥杯备战】Day 1
1.基础题目 LCR 018.验证回文串 给定一个字符串 s ,验证 s 是否是 回文串 ,只考虑字母和数字字符,可以忽略字母的大小写。 本题中,将空字符串定义为有效的 回文串 。 示例 1: 输入: s "A man, a plan, a canal: Panama…...
电子应用设计方案-51:智能镜子系统方案设计
智能镜子系统方案设计 一、引言 智能镜子作为一种新兴的智能家居设备,将传统镜子与现代科技相结合,为用户提供了丰富的功能和便捷的体验。本方案旨在设计一款功能强大、用户友好、外观美观的智能镜子系统。 二、系统概述 1. 系统目标 - 提供清晰的镜面…...
[2015~2024]SmartMediaKit音视频直播技术演进之路
技术背景 2015年,因应急指挥项目需求,我们实现了RTMP推送音视频采集推送(采集摄像头和麦克风数据)模块,在我们做好了RTMP推送模块后,苦于没有一个满足我们毫秒级延迟诉求的RTMP播放器,于是第一…...
图片添加水印的实验原理,实验代码,实验现象
一、图片添加水印的实验原理 1. 选择水印类型 可见水印:这些水印可以直接被肉眼看到,通常用于防止未经授权的使用。它们可以是文字、标志或图案等形式,并且放置在图像的显著位置。不可见水印:这类水印不容易被察觉,但…...