前言 python3 内置的enum 模块可以支持枚举类型,此模块定义了四个枚举类,用来定义名称与值的唯一组合: Enum、IntEnum、Flag 和 IntFlag。 枚举是由 class 句法创建的,这种方式易读、易写。 枚举类型 pydantic使用 python 的标准enum类来定义选择。 pear' banana = 'banana' class ToolEnum(IntEnum): spanner = 1 wrench = 2 创建数据模型,字段设置为前面定义的枚举类型
一、枚举分片 通过在配置文件中配置可能的枚举值,指定数据分布到不同数据节点上,这种方式就是枚举分片规则,本规则适用于按照省份,性别,状态拆分数据等业务 二、枚举分片案例 枚举分片需求:现有 tb_enum 说明2:系统默认的枚举字段是:sharding_id (可以根据需要改成自己需要的枚举字段,但是不推荐,因为有可能多个表的枚举字段会有冲突,请看说明4) 说明3:系统默认的枚举分片的算法:hsah-int 说明4:这里我将系统的枚举算法复制一份改了名字为"my-sharding-by-intfile1",columns改为我需要的枚举字段status,这样做的原因是,因为如果一个数据库中可能还会有其他的表根据其他枚举字段分片 ,这样就冲突了,所以为了防止多个表的枚举分片规则冲突,最好的方式就是重新复制一个新的枚举规则,改一下规则的名称,然后再改一个枚举的字段,只要保证枚举算法:hash-int不变就行了。 hl_logs 说明2:枚举分片的逻辑表是tb_enum 说明3:dataNode同样是dn4,dn5,dn6 说明4:枚举分片的规则是自定义的枚举规则 rule="my-sharding-by-intfile1
9.2.1 枚举类型的定义 枚举使用enum关键字定义,每个常量之间用逗号分隔,末尾可省略分号。 System.out.println("枚举常量的类型:" + currentSeason.getClass()); System.out.println("枚举类名: " + Season.class.getName()); } } 运行结果: 9.2.2 枚举类型的方法 枚举类默认继承java.lang.Enum,自带以下常用方法: values():返回所有枚举常量的数组 (顺序与定义一致) valueOf(String name):根据名称获取枚举常量(名称必须完全匹配) ordinal():返回枚举常量的索引(从 0 开始) name():返回枚举常量的名称 此外,枚举还可以自定义方法 枚举的构造方法必须是私有的(默认 private,不可显式声明为 public),用于初始化枚举常量的成员变量。
自前些天写了一个脚本通过shell脚本得到数据库的基本信息(一)(r9笔记第89天),今天特意测试了一下,没想到一下子发现了一个大问题。 目前来看一种行之有效的方法就是重搭备库,但是这种修复方式需要大量的磁盘空间,而且需要恢复的时间较长,怎么改进呢,可以考虑通过基于SCN的增量备份来跳归档恢复。
在Data Guard环境中,主备库基本都是使用归档来传递数据的变化。如果主备的归档传输中断,同时主库的归档被删除或者损坏,这种情况下备库是没法开始继续接收归档,应用新的数据变更了。 看到网友paulyibin的文章中提到了SCN恢复的想法,感觉非常有意思,明白了思路,自己在本地也测试了一把,发现真是有趣。 一般来说,主库的归档丢失,常规的思路只能是重建备库了。其实我们可以换一个角度来看这个问题,数据的变化在归档中是一个连续的过程,而在日志文件,数据 文件中则是一个状态。我们可以
(2)设置断点打开led_control工程源码目录的mainwindow.cpp文件,点击代码行号的左侧边框栏即可设置断点,或直接按下F9进行设置。 可见黄色箭头已跳至UpdateLabelStatus函数。按下F10进行调试,请重复按下F10,直到界面显示即停下。然后点击led_control程序按键,可通过状态栏查看信息。 请将led_control案例bin目录下可执行程序led_control拷贝至单板机系统"/root/"目录。 Target# systemctl enable qtappTarget# reboot单板机重启后,Qt程序将会自启动。 如需取消单板机Qt程序自启动,请执行如下命令。
因此,我们需要借助ssh隧道,将本地服务的端口,映射到ssh跳板机,然后服务端的nginx或其他服务直接代理到跳板机的映射端口。 在yunedit-ssh设置ssh隧道的例子如下,创建一个连接,然后在这个ssh连接中,指定本地端口到ssh跳版机的端口映射规则即可:上面,创建一个ssh连接,然后在这个ssh连接下,创建一个映射规则, 将本地的8080端口,映射到ssh跳板机的18080端口下。 然后启用这个映射策略:这样,云端的其他服务器访问跳板机的18080端口,就可以访问到本地的8080端口的服务了。云端无需知道本地电脑的实际IP即可访问到本地的服务。
说明 前阵子上线,一次性上了十个服务,一直上到凌晨才完事,期间每个服务都要先输入跳板机的登录信息来登录跳板机,然后再输入线上服务器的信息来登录线上服务器,实在是太过于麻烦,而且有些服务还有好几台服务器, 检查问题的时候,服务器跳来跳去的,简直苦不堪言。 于是,便萌发了用shell脚本的方式来一键跳转的想法,先上github上搜了搜现成的轮子,发现都不太好用,要不就是没说明,要不就是只能登一台服务器,不能满足从跳板机A跳转到线上服务器B的需求。 Shell脚本已经发布到了github上,链接在此:https://github.com/MFrank2016/GotoSSH 这个脚本借鉴了AutoSSH的脚本,并将其进行了修改,使得能够支持从跳板机直接跳转登录服务器 使用说明 GotoSSH是一个一键登录SSH的脚本,可直接从跳板机登录到线上服务器,致力于帮助你提高工作效率。
说明 前阵子上线,一次性上了十个服务,一直上到凌晨才完事,期间每个服务都要先输入跳板机的登录信息来登录跳板机,然后再输入线上服务器的信息来登录线上服务器,实在是太过于麻烦,而且有些服务还有好几台服务器, 检查问题的时候,服务器跳来跳去的,简直苦不堪言。 20190327230716.png] 于是,便萌发了用shell脚本的方式来一键跳转的想法,先上github上搜了搜现成的轮子,发现都不太好用,要不就是没说明,要不就是只能登一台服务器,不能满足从跳板机 Shell脚本已经发布到了github上,链接在此:https://github.com/MFrank2016/GotoSSH 这个脚本借鉴了AutoSSH的脚本,并将其进行了修改,使得能够支持从跳板机直接跳转登录服务器 使用说明 GotoSSH是一个一键登录SSH的脚本,可直接从跳板机登录到线上服务器,致力于帮助你提高工作效率。
第三部:映射跳板机2号的ssh端口,到公网跳板机上(在跳板机1号的webshell中执行) ssh -f -N -R 2222:218.2.135.2:22 oracle@192.168.100.100 第四部:登陆到跳板机2号上 ssh oracle@localhost:2222 因为上一步已经将跳板机2号的22端口映射到公网跳板机上去了,这时候可以直接登陆。 最后一跳,个人建议以动态映射的方式,这样可以保证后续的其他测试工作也能顺利进行。 但如果甲方对渗透测试有特定的需求,请务必按照甲方要求的方式进行。 (比如,甲方不希望你访问除10.10.10.2之外的任意服务器,那么最后一跳就做一个本地隐射就可以了) 第六部:在跳板机1号上执行 ssh -f -N -R 7777:218.2.135.2:7777 你发送的流量,在公网跳板机上,跳板机2号上,目标主机上都会进行解密和重新加密的工作,所以效率会低很多(有点类似于洋葱路由了)。
目录跳板机枚举Proxychains与FoxyProxySSH隧道与端口转发瑞士军刀:Socat现代隧道工具:Chisel"VPNoverSSH":sshuttleDNS隧道其他常用跳板工具概述:什么是跳板攻击 跳板机枚举(EnumeratingfromthePivotHost)在发起进一步攻击前,必须先从已攻陷的跳板机上对内网进行信息收集。 #####反向连接(ReverseConnections)从跳板机发起连接到你的攻击机。适用于跳板机位于防火墙后,无法从外部直接访问的场景。 在跳板机上执行:-将第一步生成的**私钥**安全地传输到跳板机上。-执行反向端口转发(`-R`)或反向SOCKS代理(`-R`)命令。 端口转发示例(简单管道):在跳板机上执行,将访问跳板机监听端口的流量转发到内网目标。
说明 虽然已经是凌晨,但丝毫不能掩盖我激动的心情,今天完成了对GotoSSH的一次大更新,新增了两个肥肠实用的功能,我只能说,是真的好用,话不多说,先来看效果图: 普通的一键登录: 一键登录跳板机,然后跳转登录线上服务器 一键登录跳板机查看指定日志: ? 一键登录跳板机后跳转线上服务器查看指定日志: ? 然后是更加劲爆内容,一键从跳板机复制指定文件到本地: ? 一键从生产环境复制指定文件到本地: ? root|testpassword2|22|1 最后一列是代表该服务器依赖于哪个服务器,如果该列的值设置为0,代表不依赖于其他服务器,否则代表需要先登录其他服务器后才能登录该服务器,目前暂时只支持二连跳, gotossh 1 log gotossh 2 log gotossh 2 cd gotossh 1 scp log3 gotossh 2 scp log4 解决了什么问题 查询线上服务器日志的时候,需要先登录跳板机
第三部:映射跳板机2号的ssh端口,到公网跳板机上(在跳板机1号的webshell中执行) ssh -f -N -R 2222:218.2.135.2:22 oracle@192.168.100.100 第四部:登陆到跳板机2号上 ssh oracle@localhost:2222 因为上一步已经将跳板机2号的22端口映射到公网跳板机上去了,这时候可以直接登陆。 最后一跳,个人建议以动态映射的方式,这样可以保证后续的其他测试工作也能顺利进行。但如果甲方对渗透测试有特定的需求,请务必按照甲方要求的方式进行。 (比如,甲方不希望你访问除10.10.10.2之外的任意服务器,那么最后一跳就做一个本地隐射就可以了) 第六部:在跳板机1号上执行 ssh -f -N -R 7777:218.2.135.2:7777 说明:以上2条路由的意思,是攻击机如果要去访问17或者16网段的资源,其下一跳是session12,至于什么是下一条这里不多说了,反正就是目前攻击机可以访问内网资源了。
求该青蛙跳上一个 n 级的台阶总共有多少种跳法。 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。 题解 分析 首先枚举几个结果: 当 n = 0;需要跳 1 次 当 n = 1;需要跳 1 次 当 n = 2;需要跳 2 次 当 n = 3;需要跳 3 次 当 n = 4;需要跳 5 次 当 n = 5;需要跳 8 次 … 如果青蛙要跳到第n级台阶,则它要么从n-1级台阶跳1级跳,要么从n-2级台阶跳2级跳。
0x00 前言 你是否遇到过以下这些情况: 目标服务需要通过跳板机才能访问,每次都要将端口映射到本地,然后配置hosts访问 不同的服务需要配置不同的代理才能访问,管理起来很不方便 有些服务需要通过嵌套代理才能访问 SSH隧道 SSH隧道是一种常见的跨网络访问方式,一般以跳板机的形式提供。用户通过端口映射的方式访问目标网络区域里的服务。 0x02 嵌套访问 嵌套访问是一种很常见的使用场景,例如:在公司内需要先通过HTTPS访问外网,然后再通过公网的一台SSH跳板机来访问真正的目标服务,甚至有可能还要多次穿越SSH隧道。 支持嵌套访问的原理是:建立每一层的代理连接后,都会告诉它下一跳代理的地址,这样会建立一个请求链,最终将请求发送到真正的目标服务。
sons[1]; nxt[0] = 1; dfs_ans(1); printf("%I64d\n", ans); } 解析: 树形DP+倍增 回想倍增法求LCA的过程 从大到小枚举 k,每次跳2^k步,只要不越界就跳,最后一定能跳到LCA 因为跳的都是2的幂次步,所以每跳一步就是二进制加了一个1 先预处理fa[i][k],表示点i向上跳2^k 步的祖先节点 设 f[i][j] 表示最后一步跳了 [i]=j 表示 当前点属于 i的子树里,以j为根节点的子树 假设dfs回溯到x,转移分两种: 1、以x为链的一个端点 枚举x向上跳2^k次,则v=fa[x][j] 那么ans+=siz[v]-siz 2^i 跳到了x 枚举x再往上跳2^j步,则v=fa[x][j] 那么ans+=(f[x][i]+cnt[x][i])*(siz[v]-siz[rt[v]]) f[x][i] 是原来的答案,在以v做LCA ^1累积到2里,然后在枚举2为中途点时,最后一步跳了2^1到2,2再往上跳2^0) 为什么在枚举3作为中途点的时候,不枚举跳了2^0次方到了3 因为此时3不是中途点,我们是按跳2^k,k是降序跳的 个人总结
变更安全组策略: 客户侧为方便异地工程师远程登录调试,变更安全组策略,安全组开放TCP:20~22端口,来源0.0.0.0/24 1.png 因为这一条策略,有了下面的故事 (2)12分钟破防,测试网段跳板机 jumpserver01首先沦陷,测试网段病毒扩散(AAA.AA.A.0/24): 19:03:29,主机安全控制台收到测试网段跳板机jumpserver01告警: jumpserver01跳板机(AAA.AA.A 9.png 入侵路径复现: 10.png 问题根因:安全组异常变更 11.png 因安全组策略开放TCP:20~22端口,来源0.0.0.0/24,该安全组规则下绑定的70+cvm暴露了22端口于公网 ,而跳板机同时在该安全组策略下,跳板机暴露沦陷导致集群沦陷,攻击发起,业务瘫痪。 ,开启爆破阻断策略 2.入口跳板机Jumpserver设置全量快照策略 13.png
鉴于安全原因,工作需要使用跳板机登录;鉴于服务器环境老旧,我需要在服务器上使用 docker 来搞个开发环境,所以需要有一种方法穿越层层阻隔,让我的 vscode 直接连过去。 对于我的需求来说,公司的跳板机和服务器一定是已经配置的,否则无法登录服务器,因此我还需要在 docker 中配置 ssh 密钥登录服务。 client 设置登录的层层专跳(这是重点)ssh 相关的文件如果没有特殊说明,都是在 ~/.ssh 文件夹中,ssh 服务的配置文件在 /etc/ssh/sshd_config 中。
* @author: Mr.chen * @create: 2020-04-27 13:52 **/ public class JschUtil { /** * 创建与远程跳板机的连接 */ private static void buildSession() { //bruce //rgj.nc8iei9J try { JSch jsch = new JSch(); Session session = jsch.getSession("远程跳板机的用户名称", "远程跳板机地址", 56000) ; session.setPassword("远程跳板机的地址"); session.setConfig("StrictHostKeyChecking",
连接跳板机的配置里面ControlMaster和ControlPath会让ssh共享链接,下次连接不用输pin+token,我是开了一个screen,连接之后就放到后台,就可以关闭tab了,后面有需要再连接跳板机 在本地wsl里面alias dgo和qlst,就可以忽略跳板机存在了。 一些好用的小工具 protobuf-language-server https://github.com/lasorda/protobuf-language-server proto文件跳转,cpp直接跳proto 定义位置(自动生成的pb.h下载到了本地,先跳.h,.h再跳proto),有代码格式化和补全。