4.22/23实习总结:iptables

2023-11-01

文章目录

iptables: 是Linux上常用的防火墙管理工具,是netfilter项目的一部分。实现包过滤、NAT功能。

1. iptables的四表五链

四表:
raw表 是否状态跟踪处理,高级功能,如:网址过滤。内核模块:iptable_raw
mangle表 修改ip头,或是打上只在内核有效的标记,数据包修改(QOS),用于实现服务质量。内核模块:iptable_mangle
nat 表 修改源/目的地址/端口,网络地址转换功能;内核模块:iptable_nat、
filter表 ,默认的是 filter 表。 负责过滤功能,防火墙;内核模块:iptables_filter
表的优先级:raw>mangle>nat>filter
五链:
INPUT链 处理输入数据包。
OUTPUT链 处理输出数据包。
FORWARD链 处理转发数据包。
PREROUTING链 “路由前” 用于目标地址转换(DNAT)。
POSTOUTING链 ”路由后” 用于源地址转换(SNAT)。

在这里插入图片描述
所以,根据上图,我们能够想象出某些常用场景中,报文的流向:
到本机某进程的报文:PREROUTING –> INPUT
由本机转发的报文:PREROUTING –> FORWARD –> POSTROUTING
由本机的某进程发出报文(通常为响应报文):OUTPUT –> POSTROUTING

2. iptables语法:iptables (选项) (参数)

iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作

选项:

-t, --table table 对指定的表 table 进行操作, table 必须是 raw, nat,filter,mangle 中的一个。如果不指定此选项,默认的是 filter 表。

# 通用匹配:源地址目标地址的匹配
-p:指定要匹配的数据包协议类型;
-s, --source [!] address[/mask] :把指定的一个/一组地址作为源地址,按此规则进行过滤。当后面没有 mask 时,address 是一个地址,比如:192.168.1.1;当 mask 指定时,可以表示一组范围内的地址,比如:192.168.1.0/255.255.255.0-d, --destination [!] address[/mask] :地址格式同上,但这里是指定地址为目的地址,按此进行过滤。
-i, --in-interface [!] <网络接口name> :指定数据包的来自来自网络接口,比如最常见的 eth0 。注意:它只对 INPUT,FORWARD,PREROUTING 这三个链起作用。如果没有指定此选项, 说明可以来自任何一个网络接口。同前面类似,"!" 表示取反。
-o, --out-interface [!] <网络接口name> :指定数据包出去的网络接口。只对 OUTPUT,FORWARD,POSTROUTING 三个链起作用。

# 查看管理命令
-L, --list [chain] 列出链 chain 上面的所有规则,如果没有指定链,列出表上所有链的所有规则。

# 规则管理命令
-A, --append chain rule-specification 在指定链 chain 的末尾插入指定的规则,也就是说,这条规则会被放到最后,最后才会被执行。规则是由后面的匹配来指定。
-I, --insert chain [rulenum] rule-specification 在链 chain 中的指定位置插入一条或多条规则。如果指定的规则号是1,则在链的头部插入。这也是默认的情况,如果没有指定规则号。
-D, --delete chain rule-specification -D, --delete chain rulenum 在指定的链 chain 中删除一个或多个指定规则。
-R num:Replays替换/修改第几条规则

# 链管理命令(这都是立即生效的)
-P, --policy chain target :为指定的链 chain 设置策略 target。注意,只有内置的链才允许有策略,用户自定义的是不允许的。
-F, --flush [chain] 清空指定链 chain 上面的所有规则。如果没有指定链,清空该表上所有链的所有规则。
-N, --new-chain chain 用指定的名字创建一个新的链。
-X, --delete-chain [chain] :删除指定的链,这个链必须没有被其它任何规则引用,而且这条上必须没有任何规则。如果没有指定链名,则会删除该表中所有非内置的链。
-E, --rename-chain old-chain new-chain :用指定的新名字去重命名指定的链。这并不会对链内部造成任何影响。
-Z, --zero [chain] :把指定链,或者表中的所有链上的所有计数器清零。

-j, --jump target <指定目标> :即满足某条件时该执行什么样的动作。target 可以是内置的目标,比如 ACCEPT,也可以是用户自定义的链。
-h:显示帮助信息;

基本参数:

参数 作用
-P 设置默认策略:iptables -P INPUT (DROP
-F 清空规则链
-L 查看规则链
-A 在规则链的末尾加入新规则
-I num 在规则链的头部加入新规则
-D num 删除某一条规则
-s 匹配来源地址IP/MASK,加叹号"!"表示除这个IP外。
-d 匹配目标地址
-i 网卡名称 匹配从这块网卡流入的数据
-o 网卡名称 匹配从这块网卡流出的数据
-p 匹配协议,如tcp,udp,icmp
–dport num 匹配目标端口号
–sport num 匹配来源端口号
-m 显示匹配

3. iptables的策略:允许或者不允许

我们现在用的比较多个功能有3个:
1.filter 定义允许或者不允许的,只能做在3个链上:INPUT ,FORWARD ,OUTPUT
2.nat 定义地址转换的,也只能做在3个链上:PREROUTING ,OUTPUT ,POSTROUTING
3.mangle功能:修改报文原数据,是5个链都可以做:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING。我们修改报文原数据就是来修改TTL的。能够实现将数据包的元数据拆开,在里面做标记/修改内容的。而防火墙标记,其实就是靠mangle来实现的。
4.raw 表中的规则可以被哪些链使用:PREROUTING,OUTPUT

PREROUTING: nat , mangle
INPUT: filter , mangle , centos7中nat中也有INPUT
FARWARD: filter , mangle
OUTPUT: filter , nat , mangle ,raw
POSTROUTING: nat , mangle

在这里插入图片描述
规则由匹配条件和处理动作组成:
匹配条件:分为基本匹配条件与扩展匹配条件
基本匹配条件:源地址Source IP,目标地址 Destination IP
扩展匹配条件:源端口Source Port, 目标端口Destination Port

动作包括:
ACCEPT 接收数据包。
DROP 丢弃数据包。
REJECT 拒绝数据包。
REDIRECT 重定向、映射、透明代理。
SNAT 源地址转换。解决内网用户用同一个公网地址上网的问题。
DNAT 目标地址转换。
MASQUERADE IP伪装(NAT),用于ADSL。是SNAT的一种特殊形式,适用于动态的、临时会变的ip上。
LOG 日志记录。在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则,也就是说除了记录以外不对数据包做任何其他操作,仍然让下一条规则去匹配。
SEMARK 添加SEMARK标记以供网域内强制访问控制(MAC)

注:DROP和REJECT有什么区别?
当执行ping操作时,JEJECT直接就提示”目标不可达”,并没有像DROP那样卡在那里,看来,REJECT比DROP更加”干脆”。

4. iptables简单命令操作

4.1 查看规则命令:

1)列出默认表的规则:iptables (-t filter) -L

2)列出某个链的规则:iptables -L INPUT

注:加-v表示显示更多更详细的信息;加-n表示不对IP地址进行名称反解,直接显示IP地址

[root@dev-k8s-master1 ~]# iptables -nvL INPUT
Chain INPUT (policy ACCEPT 14247 packets, 2702K bytes)
 pkts bytes target     prot opt in     out     source               destination
  88M   19G KUBE-FIREWALL  all  --  *      *       0.0.0.0/0            0.0.0.0/0
    0     0 ACCEPT     udp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            udp dpt:53
    0     0 ACCEPT     tcp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:53
    0     0 ACCEPT     udp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            udp dpt:67
    0     0 ACCEPT     tcp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:67

注1:policy为链的默认策略即可。
注2:packets与bytes称作”计数器”,上图中的计数器记录了默认策略匹配到的报文数量与总大小,”计数器”只会在使用-v选项时,才会显示出来。
如果你想要查看精确的计数值,而不是经过可读性优化过的计数值,那么你可以使用-x选项,表示显示精确的计数值。

[root@dev-k8s-master1 ~]# iptables -nvxL INPUT
Chain INPUT (policy ACCEPT 5145 packets, 923751 bytes)
    pkts      bytes target     prot opt in     out     source               destination
88841997 19050772133 KUBE-FIREWALL  all  --  *      *       0.0.0.0/0            0.0.0.0/0
       0        0 ACCEPT     udp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            udp dpt:53
       0        0 ACCEPT     tcp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:53
       0        0 ACCEPT     udp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            udp dpt:67
       0        0 ACCEPT     tcp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:67

3)以序号的方式显示某规则:iptables -nL INPUT --line-numbers

[root@dev-k8s-master1 ~]# iptables -nL INPUT --line-numbers
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    KUBE-FIREWALL  all  --  0.0.0.0/0            0.0.0.0/0
2    ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0            udp dpt:53
3    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:53
4    ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0            udp dpt:67
5    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:67
比如:要删除INPUT里序号为2的规则,执行:
iptables -D INPUT 2

4.2 增删改规则命令:

1)增加规则:-I 表示在头部加入新规则;-A 表示追加规则;也可以指定规则的编号可以进行任意插入

iptables -t filter -I INPUT -s x.x.x.x -j DROP
iptables -t filter -A INPUT -s x.x.x.x -j ACCEPT
iptables -t filter -I INPUT 2 -s x.x.x.x -j DROP   #表示在规则序号2的前面插入一条规则,此时这条规则自己的序号就是2

端口映射:本机的 2222 端口映射到内网 虚拟机的22 端口

iptables -t nat -A PREROUTING -d 210.14.67.127 -p tcp --dport 2222  -j DNAT --to-dest 192.168.188.115:22

2)删除规则:根据规则的编号去删除、或者是根据匹配条件与动作删除。-D 表示删除;-F 清除所有规则

#根据规则的编号去删除
iptables -t filter -D INPUT 2 
#根据匹配条件与动作删除
iiptables -D INPUT -s x.x.x.x -j ACCEPT
#清除指定表指定链上的所有规则
iptables -t 表名 -F (链名)

3)修改规则:-R 表示修改规则对应的动作,要注意的是使用-R选项修改某个规则时,必须指定规则对应的原本的匹配条件(如果有多个匹配条件,都需要指定);-P 表示修改某个链的默认动作(策略)

iptables -t filter -R INPUT 1 -s x.x.x.x -j REJECT
iptables -t filter -P FORWARD DROP

注:如果你想要修改某条规则,还不如先将这条规则删除,然后在同样位置再插入一条新规则

4.3 保存规则命令

在默认的情况下,我们对”防火墙”所做出的修改都是”临时的”,换句话说就是,当重启iptables服务或者重启服务器以后,我们平常添加的规则或者对规则所做出的修改都将消失,为了防止这种情况的发生,我们需要将规则”保存”。
注1:iptables配置文件:/etc/sysconfig/iptables
注2:保存规则到默认的配置文件:iptables-save > /etc/sysconfig/iptables

注3:我们也可以重载规则:iptables-restore < /etc/sysconfig/iptables
再次提醒:重载规则时,现有规则将会被覆盖。

4.4 匹配条件更多用法

1)匹配条件是源地址或者是目标地址:-s 或者是-d

源地址表示报文从哪里来,目标地址表示报文要到哪里去。

iptables -A INPUT -s x.x.x.x -d y.y.y.y -j DROP

a.要是地址有多个则以,隔开。源地址也可以是网段

iptables -t filter -I INPUT -s x.x.x.x,y.y.y.y -j DROP
iptables -t filter -I INPUT -s x.x.0.0/16 -j REJECT

b.匹配条件取反 !

iptables -A INPUT -s ! x.x.x.x -j ACCEPT
表示源地址只要不是x.x.x.x就接受。而只要源地址是x.x.x.x就拒绝这种理解是错误的。
因为规则中并没有说明遇到x.x.x.x就拒绝或丢弃。
所以x.x.x.x还是可以ping通的。

注:不管是-s选项还是-d选项,取反操作与同时指定多个IP的操作不能同时使用

2)匹配条件是协议:-p

协议:tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, mh
当不使用-p指定协议类型时,默认表示所有类型的协议都会被匹配到,与使用-p all的效果相同。

3)匹配条件是网卡接口:-i 表示从哪个网卡流入 ;-o表示从哪个网卡流出

#拒绝由网卡eth4流入的ping请求报文
iptables -t filter -I INPUT -i eth4 -p icmp -j REJECT

注:-i选项是用于判断报文是从哪个网卡流入的,那么,-i选项只能用于PREROUTING链、INPUT链、FORWARD链。-o选项只能用于FORWARD链、OUTPUT链、POSTROUTING链

4)扩展匹配:匹配条件是端口:–dport 表示目标端口 --sport 表示源端口。想要使用扩展匹配条件,则需要依赖一些扩展模块

iptables -t fliter -I INPUT -p tcp -m tcp --dport 22 -j REJECT
# -m tcp表示使用tcp扩展模块
#注:-p tcp与 -m tcp并不冲突,-p用于匹配报文的协议,-m 用于指定扩展模块的名称,正好,这个扩展模块也叫tcp。
#但是-m选项可以省略:iptables默认会调用与-p选项对应的协议名称相同的模块。
iptables -t fliter -I INPUT -p tcp --dport 22 -j REJECT

注:如果这个扩展匹配条件所依赖的扩展模块名正好与-p对应的协议名称相同,那么则可省略-m选项,否则则不能省略-m选项,必须使用-m选项指定对应的扩展模块名称
也可以指定端口的范围使用:冒号

#22~25
iptables -t filter -I INPUT -p tcp --dport 22:25 -j REJECT
#0~22
--dport :20     
#85~65535
--dport 85:

另一个扩展模块,”multiport”模块:可以指定多个不连续的端口 -m multiport。multiport扩展只能用于tcp协议与udp协议,即配合-p tcp或者-p udp使用。

iptables -t filter -I INPUT -p tcp -m multiport --dport 22,25,86 -j REJECT

5)常用扩展模块:

a.multiport扩展模块:可以指定多个不连续的端口

b.iprange扩展模块:指定一段连续的IP地址范围 --src-range ,–dst-range

iptables -t fliter -I INPUT -m iprange --src-range 192.168.1.1-192.168.1.156 -j DROP

c.string扩展模块:指定要匹配的字符串

如果报文中包含”hello”字符,我们就拒绝报文进入本机

iptables -t fliter -I INPUT -m string --algo bm --string "hello"  -j REJECT
#–algo:用于指定匹配算法,可选的算法有bm与kmp

d.time扩展模块:根据时间段区匹配报文

5. iptables黑白名单机制

报文在经过iptables的链时,会匹配链中的规则,遇到匹配的规则时,就执行对应的动作,如果链中的规则都无法匹配到当前报文,则使用链的默认策略(默认动作),链的默认策略通常设置为ACCEPT或者DROP。
当链的默认策略设置为ACCEPT时,按照道理来说,我们在链中配置规则时,对应的动作应该设置为DROP或者REJECT,为什么呢?

因为默认策略已经为ACCEPT了,如果我们在设置规则时,对应动作仍然为ACCEPT,那么所有报文都会被放行了,因为不管报文是否被规则匹配到都会被ACCEPT,所以就失去了访问控制的意义。

所以,当链的默认策略为ACCEPT时,链中的规则对应的动作应该为DROP或者REJECT,表示只有匹配到规则的报文才会被拒绝,没有被规则匹配到的报文都会被默认接受,这就是”黑名单”机制。
同理,当链的默认策略为DROP时,链中的规则对应的动作应该为ACCEPT,表示只有匹配到规则的报文才会被放行,没有被规则匹配到的报文都会被默认拒绝,这就是”白名单”机制。

注:
在这里插入图片描述
在这里插入图片描述
注:白名单机制有一个漏洞:就是当默认策略为DROP,当清空所有的规则会导致管理员自己也登不上去,所以在设置白名单策略时还是要把默认策略设置为ACCEPT,然后把“拒绝所有的请求”放在最后面,将要放行的放在这条规则前面。
在这里插入图片描述
在这里插入图片描述

6. iptables常用总结

1、规则的顺序非常重要。

如果报文已经被前面的规则匹配到,IPTABLES则会对报文执行对应的动作,通常是ACCEPT或者REJECT,报文被放行或拒绝以后,即使后面的规则也能匹配到刚才放行或拒绝的报文,也没有机会再对报文执行相应的动作了(前面规则的动作为LOG时除外),所以,针对相同服务的规则,更严格的规则应该放在前面。

2、当规则中有多个匹配条件时,条件之间默认存在”与”的关系。

如果一条规则中包含了多个匹配条件,那么报文必须同时满足这个规则中的所有匹配条件,报文才能被这条规则匹配到。

3、在不考虑1的情况下,应该将更容易被匹配到的规则放置在前面。

比如,你写了两条规则,一条针对sshd服务,一条针对web服务。

假设,一天之内,有20000个请求访问web服务,有200个请求访问sshd服务,

那么,应该将针对web服务的规则放在前面,针对sshd的规则放在后面,因为访问web服务的请求频率更高。

如果将sshd的规则放在前面,当报文是访问web服务时,sshd的规则也要白白的验证一遍,由于访问web服务的频率更高,白白耗费的资源就更多。

如果web服务的规则放在前面,由于访问web服务的频率更高,所以无用功会比较少。

换句话说就是,在没有顺序要求的情况下,不同类别的规则,被匹配次数多的、匹配频率高的规则应该放在前面。

4、当IPTABLES所在主机作为网络防火 墙时,在配置规则时,应着重考虑方向性,双向都要考虑,从外到内,从内到外。

5、在配置IPTABLES白名单时,往往会将链的默认策略设置为ACCEPT,通过在链的最后设置REJECT规则实现白名单机制,而不是将链的默认策略设置为DROP,如果将链的默认策略设置为DROP,当链中的规则被清空时,管理员的请求也将会被DROP掉。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

4.22/23实习总结:iptables 的相关文章

  • 个人总结-基础算法

    文章目录 基础算法 各个算法的复杂度及稳定性等 冒泡排序 蛮力法 理解 函数代码 测试用例 选择排序 蛮力法 理解 函数代码 测试用例 归并排序 分治法 理解 函数代码 测试用例 快速排序 分治法 理解 函数代码 测试用例 插入排序 减治法
  • GitHub、GIT、Intellij集成github初探

    一 什么是Git 刚接触Git或github的童鞋可能会把它们的概念搞混淆 所以在这里稍微解释一下 Git和github是两个完全不同的概念 Git是一个版本管理系统 Version Control System 简称 VCS 早期版本管理
  • kafka-offset手动提交和自动提交

    目录 首先回顾之前的知识点 自动提交offset 手动提交 消费者poll消息的细节 完整代码 按照新方法进行消费消息 1 指定时间进行消息的消费 2 指定分区开始从头消费 指定分区的偏移量开始消费 新消费组的消费offset规则 首先回顾
  • 国内如何申请到Twitter API

    Tip Twitter Developer Platform 申请只能申请一次 被拒后该账户就不能再申请了 一点要做好详细的准备再提交申请 网上的申请教程有的很坑 几句话就提交申请通过了 几率很小 Twitter开发者平台的申请 记录三次申
  • vue+element文本域设置自适应和默认高度

  • ⛳ TCP 协议面试题

    目录 TCP 协议面试题 一 为什么关闭连接的需要四次挥 建 连接却只要三次握 呢 二 为什么连接建 的时候是三次握 可以改成两次握 吗 三 为什么主动断开 在TIME WAIT状态必须等待2MSL的时间 四 如果已经建 了连接 但是Cli
  • PyTorch 官方教程:撸一个神经网络

    本文为 PyTorch 官方教程中 如何构建神经网络 基于 PyTorch 专门构建神经网络的子模块 torch nn 构建一个简单的神经网络 完整教程运行 codelab torch nn 文档 神经网络由对数据执行操作的层 模块组成 t
  • PaddleDetection重磅升级!PP-YOLOE、PP-PicoDet云边端一网打尽!

    目标检测作为计算机视觉领域的顶梁柱 不仅可以独立完成车辆 商品 缺陷检测等任务 也是人脸识别 视频分析 以图搜图等复合技术的核心模块 在自动驾驶 工业视觉 安防交通等领域的商业价值有目共睹 正因如此 YOLOv5 YOLOX PP YOLO
  • 从Java到Go:构建一个任务调度器和队列管理系统

    目录 1 任务调度器和队列管理的基本概念 2 Java和Go的基本差异 2 1 语法差异
  • osg::ref_ptr<osg::Image> image = osgDB::readImageFile(fileName); image指针为空

    前言 使用 OpenSceneGraph Quick Start Guide 中文版及源码 里面的一个例子TextureMapping 在我本机上运行没有问题 但拷贝到公司电脑 发现总是运行异常 无法读取纹理图片 调试到136行 image
  • lua的pcall

    对于大多数应用而言 我们无须在Lua代码中做任何错误处理 应用程序本身会负责处理这类问题 所有Lua语言的行为都是由应用程序的一次调用而触发的 这类调用通常是要求Lua语言执行一段代码 如果执行中发生了错误 那么调用会返回一个错误代码 以便
  • AcWing 196. 质数距离 二次筛法

    题 想求231 1范围的质数距离 那么我们可以求5e4范围中的所有质数 然后这些质数可以组成2 231 1中的所有合数 打表求5e4范围中的质数 用类似埃氏筛的方法把l到r的所有质数筛出来 由于差值不会超过 106 可以O n 扫描一遍求距
  • pytorch,mmdetection的安装以及注意事项

    如题 记录一下pytorch mmdetection的安装 以及注意事项 conda 基础操作 创建 name mmlab conda create n mmlab python 3 8 删除 conda remove n mmlab al
  • 数学建模-启发式算法-蚁群算法

    文章目录 蚁群算法 算法原理 算法特点 算法步骤 流程图 代码 蚁群算法 蚁群算法 由Marco Dorigo于1992年在他的博士论文中提出 是一种灵感来源于蚂蚁在寻找食物过程中发现路径的行为 用来在图中寻找优化路径的算法 算法原理 蚂蚁
  • 单例模式中的懒汉模式和饿汉模式是什么?

    一 懒汉模式 顾名思义 他是一个懒汉 他不愿意动弹 什么时候需要吃饭了 他就什么时候开始想办法搞点食物 即懒汉式一开始不会实例化 什么时候用就什么时候new 才进行实例化 二 饿汉模式 顾名思义 他是一个饿汉 他很勤快就怕自己饿着 他总是先
  • sqldeveloper 格式化(美化)sql语句快捷键

    1 Ctrl A 全选需要格式化的sql 2 Ctrl F7 格式化

随机推荐

  • C语言文件操作(1)

    目录 一 为什么使用文件 二 什么是文件 2 1 程序文件 2 2 数据文件 2 3 文件名 三 文件的打开和关闭 3 1 文件指针 3 2 文件的打开和关闭 四 文件的顺序读写 4 1 对比一组函数 一 为什么使用文件 我们前面学习 结构
  • UVA 1601 The Morning after Halloween (BFS/双向BFS)

    单向BFS 1150ms include
  • opencv-bayes模型训练以及加载

    此代码适用于opencv 数据集分开训练数据集和测试数据集合 训练模型代码 Ptr
  • 分享5个免费的Python学习网站,抓紧收藏吧~

    最近有好多人说刚开始学习 有哪些免费的学习网站可以自学一下 于是 趁着空闲的时间在各大网站上面梳理了一下 找出了5个比较好的学习网站 并且都是免费的 比较适合初学者了解一些基础语法 解决BUG问题 如果是大佬的话了解一下就行了 废话不多说了
  • 基于RRT算法的避障路径规划(MATLAB代码)

    基于RRT算法的避障路径规划 MATLAB代码 路径规划是机器人导航和自主移动中的关键问题之一 Rapidly exploring Random Trees RRT 算法是一种经典的随机采样路径规划算法 它通过随机采样和不断扩展树结构来搜索
  • Java英文日期格式转换yyyy-MM-dd格式

    我们在后端的开发过程中会经常跟日期相关的类型打交道 不过我们大多数在开发过程中遇到的格式都是基本的 年 月 日 yyyy MM dd 格式 当然 这种格式的日期我们都可以用Java自带的SimpleDateFormat类自带的转换方法来进行
  • Animate 2021 for Mac(an 2021中文版) v21.0.1中文直装版

    全新的adobe animate2021版本更加的引入注目 比如经过修改后的资产面板允许您在新的 默认 和 自定义 选项卡中查找 组织和管理资产 并且可通过组合各种资产快速创建炫酷的动画 从而减轻了以往的逐个创建动画效果 Animate 2
  • 关于moment时区处理问题,指定时间转换特定时区

    如题网上一堆复制粘贴让使用timezone插件的文章 查了十几分钟 真是浪费生命 垃圾文章太多 如果只想转换某个时间而已 是不需要使用timezone插件的 这个插件一用可能全局的时区就变了 问题就大了 只转换某几个时间的时区解决办法是mo
  • echart时间轴设置详解

    timeline x center 时间轴X轴方向位置设置 y bottom 时间轴Y轴方向位置设置 width 80
  • 常见算法题(包括华为机试题)

    一 维护O 1 时间查找最大元素的栈 问题描述 一个栈stack 具有push和pop操作 其时间复杂度皆为O 1 设计算法max操作 求栈中的最大值 该操作的时间复杂度也要求为O 1 可以修改栈的存储方式 push pop的操作 但是要保
  • vue + element + CDN 的方式使用

    CDN方式开发vue项目步骤 1 cdn 链接相关css element ui css common css js jq vue js element ui js common js 等 2 每个页面嵌入 下列相关内容 div 3 1415
  • DOM驱动和数据驱动的区别

    引言 在前端开发中 DOM驱动和数据驱动是两种常见的开发模式 它们代表了不同的思维方式和开发方式 本文将深入探讨DOM驱动和数据驱动的区别 并通过代码详解它们在前端开发中的应用 1 DOM驱动 DOM驱动是传统的前端开发方式 它的核心思想是
  • jssip连freeswitch加webRtc相关控制

    highlight a11y light theme juejin 摘要 最近在做一个freeSwitch项目 前端需要通过sip协议完成音视频通话 把一些关键的核心api记录一下 因为网上找的一部分资料不一定准确 这个是实际操作过得具有一
  • DC系列漏洞靶场-渗透测试学习复现(DC-8)

    DC 8是一个易受攻击的实验环境 最终目的是让攻击者获得root权限 并读取flag 本篇文档中用到了shell反弹和exim提权 1 环境搭建 下载靶场文件 使用Vbox或者VM打开即可 攻击机使用kali 2020 2 主机发现 使用K
  • Qt打包Debug版本和Release版本(包含到其他电脑打不开,缺库问题等)含msvcp140d.dll,concrt140d.dll,vcruntime140d.dll等发布所需库文件

    首先Debug版本和Release区别 Release是发行版本 比Debug版本有一些优化 文件比Debug文件小 Debug是调试版本 Debug和Release调用两个不同的底层库 Debug是调试版本 包括的程序信息更多 只有Deb
  • C++string字符串查找和替换 string字符串查找和替换

    C string字符串查找和替换 string字符串查找和替换 功能描述 查找 查找指定字符串是否存在 替换 在指定的位置替换字符串 int find const string str int pos 0 const 查找str第一次出现位
  • 操作系统系列(三)——编译和链接

    往期地址 操作系统系列一 操作系统概述 操作系统系列二 进程 本期主题 编译和链接 文章目录 1 被隐藏了的过程 1 1 预编译 1 2 编译 1 3 汇编 1 4 链接 1 模块拼接 静态链接 2 空间地址与分配 3 符号解析和重定位 核
  • Tempter of the Bone【DFS+奇偶剪枝】scanf会WA!!!

    题目链接HDU1010 多好的一道题 交scanf会WA cin一发过 我WA了30 次 惊是这样的BUG 我就说我推的公式怎会错呢 如果有字体缩小的方式 我要把上面那行缩小些 先看大家WA 可真是一道有趣的题目 首先 有这样的图推出奇偶剪
  • spark 基本概念解析

    spark 基本概念解析 1 Application 用户在 spark 上构建的程序 包含了 driver 程序以及在集群上运行的程序代码 物理机器上涉及了 driver master worker 三个节点 2 Driver Progr
  • 4.22/23实习总结:iptables

    文章目录 iptables 是Linux上常用的防火墙管理工具 是netfilter项目的一部分 实现包过滤 NAT功能 1 iptables的四表五链 2 iptables语法 iptables 选项 参数 3 iptables的策略 允