了解 XML、Properties 和 YAML 配置文件

在软件开发中,配置文件是一种重要的工具,用于存储应用程序的设置和参数。不同的项目和框架可能使用不同类型的配置文件,其中三种常见的格式是 XML、Properties 和 YAML。

XML 配置文件

1. 结构化: XML(eXtensible Markup Language)是一种标记语言,具有丰富的结构化特性。配置文件中的数据通过标签表示,支持嵌套和属性。

2. 示例:

1
2
3
4
5
6
7
8
9
10
<configuration>
<database>
<url>jdbc:mysql://localhost:3306/mydb</url>
<username>user</username>
<password>pass</password>
</database>
<logging>
<level>debug</level>
</logging>
</configuration>

3. 优势:

  • 结构清晰,易于理解。
  • 支持嵌套和复杂数据结构。

4. 缺点:

  • 冗长,相对于其他格式,需要更多的标记。

Properties 文件

1. 简洁: Properties 文件是一种键值对的格式,简洁明了。每一行包含一个键值对,用等号或冒号分隔。

2. 示例:

1
2
3
4
database.url=jdbc:mysql://localhost:3306/mydb
database.username=user
database.password=pass
logging.level=debug

3. 优势:

  • 简单,适合小规模配置。
  • 易于编辑和阅读。

4. 缺点:

  • 不适合复杂结构和嵌套数据。

YAML/YML 配置文件

1. 可读性强: YAML(YAML Ain’t Markup Language)是一种人类可读的数据序列化格式,支持列表、映射和嵌套结构。

2. 示例:

1
2
3
4
5
6
7
database:
url: jdbc:mysql://localhost:3306/mydb
username: user
password: pass
logging:
level: debug
#以两个或者四个空格缩进区分层级,不允许使用Tab

3. 优势:

  • 语法简洁,易读易写。
  • 支持复杂数据结构。

4. 缺点:

  • 对格式的严格要求,不容忽视缩进等细节。

如何选择?

选择配置文件格式通常取决于项目的需求和个人偏好。如果项目结构复杂,数据嵌套深,XML 或 YAML 可能更合适。对于简单的配置,Properties 文件可能是更轻量的选择。在实际应用中,有时候项目也会同时使用不同格式的配置文件,以满足不同的需求。

总的来说,XML、Properties 和 YAML 都是有效的配置文件格式,开发者可以根据具体场景和喜好做出选择。在使用框架或工具时,也需查阅相应文档,了解它们对配置文件格式的支持和推荐。

在使用 VMware 虚拟机的过程中,有时候我们需要扩展虚拟机的硬盘空间。这篇博文将介绍两种方法,一种是使用 fdisk 进行分区,另一种是使用 parted 命令进行操作。两种方法的操作步骤基本一致,其中方法一多了一步分区的操作。

开始之前默认已在VMware中扩容,下面是后面的操作。

方法一:使用 fdisk 进行分区

1. 创建分区(fdisk)

1
2
fdisk /dev/sda
# 在命令环境中按 n 键,一路按回车,最后按 w 键保存,然后按 q 键退出

2. 重新扫描硬盘(partprobe)

1
sudo partprobe

3. 创建物理卷(pvcreate)

1
pvcreate /dev/sda3  # sda3 根据第一步中创建的分区名称进行替换

4. 将磁盘扩展到卷组(vgextend)

1
vgextend centos /dev/sda3  # sda3 根据第一步中创建的分区名称进行替换

5. 扩展逻辑分区(lvextend)

1
2
3
4
5
# 根据实际情况选择扩容到 centos-root 还是 centos-home 逻辑分区,请修改注释
# 100% 是将所有的磁盘空间扩容到指定分区,也可以根据需要进行调整比例
# 也支持指定大小,比如 10G 等等(指定固定值时参数 -l 需要修改为 -L)
lvextend -l+100%FREE /dev/mapper/centos-root
# lvextend -l+100%FREE /dev/mapper/centos-home

6. 使扩展生效(xfs_growfs)

1
xfs_growfs /dev/mapper/centos-root  # 根据扩容的分区进行选择使用

7. 查看(df -H)

1
df -H

方法二:使用 parted 命令进行操作

1. 查看磁盘情况:打印可用空间

1
parted /dev/sda print free

2. 分配剩余的可用空间

1
2
3
4
# 将剩余的可用空间分配到 /dev/sda2,根据实际修改磁盘
# resizepart 中的 2 表示第二个分区即:/dev/sda2
# 100% 将所有的空闲空间分配给 /dev/sda2,也可以用单位和百分比
parted /dev/sda resizepart 2 100%

3. 刷新物理卷

1
2
# 分区的空间修改了,也要刷新一下 pv 物理卷的大小,这样 pv 才能识别变动的空间
pvresize /dev/sda2

4. 查看物理卷是否变化

1
2
# 查看 pv 中 free 项中是否显示了可用的空间
pvdisplay

5. 扩展逻辑分区

1
2
# 开始增加到逻辑卷中
lvextend -l+100%FREE /dev/mapper/centos-root

6. 使扩展生效(xfs_growfs)

1
xfs_growfs /dev/mapper/centos-root

7. 查看(df -H)

1
df -H

以上两种方法均适用于 VMware 下 Linux 虚拟机的硬盘扩容操作。根据实际需求选择合适的方法,并确保在进行操作之前备份重要数据以防止数据丢失。希望这篇博文能够帮助你成功完成虚拟机扩容的操作。

在 Linux 系统中,了解磁盘分区的情况对系统管理和故障排查至关重要。本篇博文将详细介绍常用的命令,帮助你轻松查看磁盘分区信息。

1.lsblk 命令

lsblk 命令以树状结构显示系统中的块设备,包括磁盘、分区、逻辑卷等信息。

1
2
3
4
5
6
7
8
9
10
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 50G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 19G 0 part
│ ├─centos-root 253:0 0 47G 0 lvm /
│ └─centos-swap 253:1 0 2G 0 lvm [SWAP]
└─sda3 8:3 0 30G 0 part
└─centos-root 253:0 0 47G 0 lvm /
sr0 11:0 1 4.4G 0 rom

这个命令提供了一个清晰的层次结构,展示了磁盘和分区之间的关系。

2.fdisk 命令

fdisk 命令用于处理磁盘分区表。使用以下命令查看所有磁盘及其分区:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@localhost ~]# fdisk -l

磁盘 /dev/sda:53.7 GB, 53687091200 字节,104857600 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000bcfaf

设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 41943039 19921920 8e Linux LVM

磁盘 /dev/mapper/centos-root:50.5 GB, 50457477120 字节,98549760 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节

磁盘 /dev/mapper/centos-swap:2147 MB, 2147483648 字节,4194304 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节

这将列出系统中所有磁盘的分区情况,包括分区的起始和结束扇区、类型等信息。

3.parted 命令

parted 是一个用于查看和管理磁盘分区的工具。以下命令列出所有分区及其详细信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[root@localhost ~]# sudo parted -l
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sda: 53.7GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number Start End Size Type File system 标志
1 1049kB 1075MB 1074MB primary xfs 启动
2 1075MB 21.5GB 20.4GB primary lvm

Model: Linux device-mapper (linear) (dm)
Disk /dev/mapper/centos-swap: 2147MB
Sector size (logical/physical): 512B/512B
Partition Table: loop
Disk Flags:

Number Start End Size File system 标志
1 0.00B 2147MB 2147MB linux-swap(v1)

Model: Linux device-mapper (linear) (dm)
Disk /dev/mapper/centos-root: 50.5GB
Sector size (logical/physical): 512B/512B
Partition Table: loop
Disk Flags:

Number Start End Size File system 标志
1 0.00B 50.5GB 50.5GB xfs

parted 提供了更多分区信息,如文件系统类型、分区大小等。

4.df 命令

df 命令用于显示已挂载文件系统的磁盘空间使用情况。以下是一个简单的例子:

1
2
3
4
5
6
7
8
9
10
11
12
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 894M 0 894M 0% /dev
tmpfs 910M 0 910M 0% /dev/shm
tmpfs 910M 11M 899M 2% /run
tmpfs 910M 0 910M 0% /sys/fs/cgroup
/dev/mapper/centos-root 47G 14G 34G 29% /
/dev/sda1 1014M 241M 774M 24% /boot
tmpfs 182M 28K 182M 1% /run/user/1000
overlay 47G 14G 34G 29% /var/lib/docker/overlay2/56ffb33faca98f0a38b789cc7df02341f9dbd5e83f9244de6d6a48872ac56605/merged
overlay 47G 14G 34G 29% /var/lib/docker/overlay2/69a6901d9caeab8e4b276ccd5ca54a3244610ef78f28db4e364c8a5474458ab3/merged
tmpfs 182M 0 182M 0% /run/user/0

这个命令显示已挂载的文件系统、使用情况以及可用空间。

5.blkid 命令

blkid 命令用于查看块设备的 UUID 和文件系统类型。以下是一个基本用法:

1
2
3
4
5
6
[root@localhost ~]# blkid
/dev/sda1: UUID="68f80fa9-57c6-40de-8edf-e7b3ccd7b4a9" TYPE="xfs"
/dev/sda2: UUID="b2PfEQ-1n5s-Jpwe-gbyj-PM1i-crSg-kGzRvM" TYPE="LVM2_member"
/dev/sda3: UUID="jCHNES-Jduc-whUS-9J95-pcSc-wQhj-jG8hjI" TYPE="LVM2_member"
/dev/mapper/centos-root: UUID="a67fe592-2686-40aa-85a6-f15940373cbd" TYPE="xfs"
/dev/mapper/centos-swap: UUID="78c7aab1-f1ce-43c3-a9ef-ef64d9520c4a" TYPE="swap"

blkid 提供了每个块设备的详细信息,包括 UUID、文件系统类型等。

以上这些命令在日常系统管理和故障排查中经常用到,通过它们你可以全面了解系统中磁盘分区的情况。在使用这些命令时,请确保有足够的权限,有些命令可能需要使用 sudo 运行。希望这篇博文对你在 Linux 系统中查看磁盘分区信息时有所帮助。

当在 Hexo 中创建文章时,你可能希望在首页或文章列表中显示摘要,而不是完整内容。Hexo 提供了两种设置文章摘要的方式:手动设置摘要和使用 <!-- more --> 标签自动截取摘要。在这篇博文中,我们将学习如何使用这两种方法,并以 Markdown 格式展示。

手动设置摘要

手动设置摘要非常简单。只需在文章的 Front Matter 中添加 excerpt 字段,并在该字段中写入摘要内容。例如:

1
2
3
4
5
6
7
---
title: "文章标题"
date: 2023-12-01
excerpt: "这是手动设置的文章摘要。"
---

这里是文章的正文内容。

Hexo 将使用手动设置的摘要来显示文章列表中的预览。

而在ParticleX主题中,作者提供了另外一种方式来设置摘要

1
2
description: |
@

将”@”替换为你的摘要,然后把上面内容放到Front Matter中即可,如果你不想每次hexo n一个新文章时都添加这个内容,你可以在文章模板的Front Matter中添加description字段即可,文章模板一般在hexo的scaffolds文件夹下,修改里面的markdown模板即可(要全部修改)。

这种方式在进入文章内时不会看到摘要。

使用 <!-- more --> 标签自动截取摘要

你还可以使用 <!-- more --> 标签自动截取摘要。在文章中插入该标签之前的内容将作为摘要,而 <!-- more --> 标签以下的内容将在单独的页面中显示。

下面是一个例子:

1
2
3
4
5
6
7
8
9
10
---
title: "文章标题"
date: 2023-12-01
---

这是文章的摘要。

<!-- more -->

这是文章的正文内容,但只有上面的部分会显示在首页或文章列表中。

确保你的主题支持 <!-- more --> 标签,以便它能够正确地显示标签之前的内容作为文章的摘要。

但是这种方式在进入查看全文时仍会看到摘要,这是与上一种方法的区别。

在主题中显示摘要

在主题的配置文件或模板文件中,找到文章列表或首页的相关部分。确保它能够正确地显示摘要。通常,这涉及到使用主题提供的模板标签,比如 {{ post.excerpt }}。

在 Hexo 主题中的模板文件中,找到类似于以下代码的部分:

1
{{ post.content }}

将其替换为:

1
{{ post.excerpt }}

这样,你的主题将使用文章的摘要而不是完整内容来展示文章列表。

通过手动设置摘要、使用 <!-- more --> 标签自动截取摘要以及在主题中的相应配置,你可以根据不同的需求选择最适合你的方式来配置文章的摘要,以实现更灵活的展示效果。

在 Hexo 静态网页中插入照片

Hexo 是一个快速、简单且强大的静态博客框架,它允许你轻松地创建和管理静态网站。在撰写博文时,插入照片是一种有效的方式,可以丰富内容,吸引读者的注意力。

插入照片的基本语法

在 Hexo 中,你可以使用 Markdown 语法来插入照片。基本的语法如下:

1
![图片描述](图片链接)
  • 图片描述 是对图片的简短描述,这是可选的。
  • 图片链接 是图片的 URL 或者相对路径。

使用相对路径插入图片

如果你的图片存储在 Hexo 项目的 source 目录下的 images 文件夹中,可以使用相对路径插入图片。例如,如果你的图片路径是 source/images/myphoto.jpg,可以这样插入图片:

1
![我的照片](/images/myphoto.jpg)

使用外部链接插入图片

如果图片位于外部网站,你可以使用完整的 URL:

1
![外部图片](https://example.com/path/to/image.jpg)

确保图片的路径或链接是正确的,以便 Hexo 在生成静态网页时能够正确引用和显示这些图片。

测试

通过简单的 Markdown 语法,你可以轻松地在 Hexo 的静态网页中插入照片,为你的博文添加视觉吸引力。

这是一个简单的例子,你可以根据需要对博文进行扩展和个性化。希望这篇介绍对你在 Hexo 中插入照片有所帮助!

对于ParticleX主题的iconLinks,其实作者在评论区详细介绍过,这里只是简单强调一下

其实和配置文件中menu的配置一样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
menu:
Home:
name: house
theme: solid
link: /
About:
name: id-card
theme: solid
link: /about
Archives:
name: box-archive
theme: solid
link: /archives
Categories:
name: bookmark
theme: solid
link: /categories
Tags:
name: tags
theme: solid
link: /tags
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
iconLinks:
github:
name: github
theme: brands
link: https://github.com/tianzhen889/
bilibili:
name: bilibili
theme: brands
link: https://space.bilibili.com/1831642830?spm_id_from=333.1007.0.0
qq:
name: qq
theme: brands
link: tencent://AddContact/?fromId=45&fromSubId=1&subcmd=all&uin=2647298256&website=www.oicqzone.com
zhihu:
name: zhihu
theme: brands
link: https://www.zhihu.com/people/ninth-84

如果你想获取一个新图标,只需在Font Awesome官网查找对应的图标即可

然后按照我上面的对齐格式,比如说qq:

1
<i class="fa-brands fa-qq"></i>

那么theme中就填brands,name中就填qq,链接你可以在网上找一个加好友的链接。

其他的图标类似。

当你使用静态网站生成器(如 Hexo、Jekyll 等)构建你的博客时,你经常会遇到一个名为 Front Matter 的概念。Front Matter 是一种位于文章或页面顶部的元数据块,它提供了关于文章的重要信息。在这篇博文中,我们将深入介绍 Front Matter 的作用、语法以及如何在 Hexo 中使用它。

什么是 Front Matter?

Front Matter 是指位于文章或页面开头的元数据块,用于定义文章的一些基本信息。这些信息可能包括文章的标题、日期、作者、标签、分类等。Front Matter 的存在使得静态网站生成器能够解析和理解文章的元信息,以便更好地构建和呈现网站。

Front Matter 的语法

在大多数静态网站生成器中,Front Matter 使用 YAML、JSON 或 TOML 等格式来表示。在本文中,我们主要关注使用 YAML 的语法。

一个典型的 Front Matter 示例如下:

1
2
3
4
5
6
7
8
---
title: "介绍 Front Matter"
date: 2023-12-01
author: Your Name
tags:
- Hexo
- Jekyll
---

在这个示例中,--- 是 Front Matter 的起始和结束标记,中间是元信息的定义。每一行都由一个键值对组成,键和值之间用冒号分隔,键和值之间用空格缩进。数组可以用连字符加空格表示。

Front Matter 的作用

Front Matter 的主要作用有几个方面:

  1. 定义元信息: Front Matter 允许你为文章提供一些关键信息,如标题、日期、作者、标签等。这些信息对于网站生成器和主题的正确渲染至关重要。
  2. 个性化设置: 你可以在 Front Matter 中设置一些个性化的配置,比如文章的布局、摘要、封面图等。这有助于使每篇文章具有独特的外观和风格。
  3. 影响生成和渲染: 网站生成器可以根据 Front Matter 中的信息决定如何处理和呈现文章。例如,可能影响文章的 URL 结构、在首页的展示方式等。

在 Hexo 中使用 Front Matter

在 Hexo 中,使用 Front Matter 是非常简单的。当你创建一个新的文章时,Hexo 会自动在文件开头插入默认的 Front Matter,包括标题和日期。你可以根据需要编辑和扩展这个 Front Matter,以满足你的具体需求。

1
2
3
4
5
6
7
8
---
title: "你的文章标题"
date: 2023-12-01
author: 你的名字
tags:
- Hexo
- Front Matter
---

通过编辑这个 Front Matter,你可以轻松地配置文章的各种信息,使其更符合你的预期。

在总结中,Front Matter 是静态网站生成器中一项强大而灵活的功能,允许你以结构化的方式定义和配置文章的元信息。通过合理使用 Front Matter,你可以更好地管理和呈现你的博客内容。

什么是Base64编码?

Base64编码是一种将二进制数据转换为可打印ASCII字符的编码方式。它的名称表明它是一种将二进制数据表示为64个不同ASCII字符的方法。Base64广泛用于网络传输、数据存储和各种应用场景,其中需要将二进制数据以文本形式表示。

Base64的原理?

Base64编码的原理是将每三个字节的数据(24位)划分为四组,每组六位。然后,将这四组六位的数据转换为四个对应的ASCII字符。由于2^6等于64,所以每个六位的组合都可以用一个可打印的ASCII字符表示。这样,原始二进制数据的大小被增加了1/3,但可以通过普通的文本传输。

以下是一个简单的示例,将字符串 “Hello, World!” 进行Base64编码:

1
72 101 108 108 111 44 32 87 111 114 108 100 33

将ASCII编码转换为二进制:

1
01001000 01100101 01101100 01101100 01101111 00101100 00100000 01010111 01101111 01110010 01101100 01100100 00100001

将二进制数据以每三个字节一组进行划分:

1
010010 000110 010101 011011 011011 011011 110011 011011 000011 010000 010101 011110 011100 111011 011100 110011 011011 010000 010000 001010 101110 111111

将每组六位的数据转换为对应的Base64字符:

1
S           G           V           s           e           k           N           y           B           W           9           u           b           3           N

因此,字符串 “Hello, World!” 的Base64编码为 “SGVsekNyBW9ub3N”。Base64编码后的数据可以在文本环境中更容易地传输和处理。需要注意的是,Base64编码不是加密,而是一种编码方式,可以被轻松逆转回原始数据。

为什么要使用Base64编码?

Base64编码有几个常见的应用场景,主要涉及到在不同环境中的数据传输、存储和处理的需求。

  1. 文本传输: 在文本传输中,有些字符可能会被视为控制字符、特殊字符或者不可打印字符,从而导致传输错误。通过使用Base64编码,可以将二进制数据转换为由ASCII字符组成的字符串,确保数据能够安全、可靠地在文本协议中传输,比如在电子邮件、XML、JSON中嵌入二进制数据。
  2. URL传输: 在URL中,某些字符可能会被解释为特殊字符,例如问号、等号、斜杠等。Base64编码将数据转换为URL安全的形式,避免了这些字符引起的问题。
  3. 数据存储: 在一些存储场景中,二进制数据可能会导致问题,例如在数据库中存储二进制数据可能需要额外的处理。Base64编码可以将二进制数据转换为字符串形式,更容易在各种存储介质中处理。
  4. 编码检查: 在一些环境中,可能需要对数据进行字符编码检查,以确保数据的完整性和有效性。Base64编码后的数据通常只包含常见的可打印ASCII字符,易于进行编码检查。
  5. 数据处理: 在某些情况下,需要将二进制数据嵌入到文本中,以便更方便地进行处理。Base64编码提供了一种简便的方式,使得数据能够以字符串形式存储和传输。

需要注意的是,Base64编码不是加密,只是一种编码方式,可以被相对容易地解码。因此,它并不适用于对数据进行安全保护的场景。

总的来说,Base64编码是一种在不同环境中进行数据传输、存储和处理的常用工具,能够很好地满足特定的需求。

什么是JWT?

JWT是一种开放标准(RFC 7519),定义了一种紧凑且自包含的方式,用于在各方之间安全地传输信息。它通常用于在网络上的两个系统之间进行身份验证和信息传递。

JWT的结构

一个JWT通常由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。

  • 头部(Header)

头部通常包含两部分信息:令牌的类型(”typ”)和所使用的算法(”alg”)。

1
2
3
4
{
"alg": "HS256",
"typ": "JWT"
}
  • 载荷(Payload)

载荷包含了一系列声明,表示要传递的用户信息。

1
2
3
4
5
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}

这个负载包含了一些声明(claims),包括 “sub”(主题,通常是用户的唯一标识)、”name”(姓名)、”iat”(发布时间,即令牌的创建时间)等。

  • 签名(Signature)

签名用于验证发送者的身份,确保令牌在传输过程中没有被篡改。

JWT的生成与验证

假设服务器端使用密钥 “secret” 进行签名,生成JWT的过程如下:

1
2
3
4
5
6
7
8
# Base64编码的头部
eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9

# Base64编码的载荷
eyJzdWIiOiAiMTIzNDU2Nzg5MCIsICJuYW1lIjogIkpvaG4gRG9lIiwgImlhdCI6IDE1MTYyMzkwMjJ9

# HMAC SHA256签名
UJfr8bN4blKnFCD3V2pYxaLZXrsd4dhl6ZlMz1Y9nOM

最终,JWT 就是将编码后的头部、负载和签名用点(.)连接在一起:

1
eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9.eyJzdWIiOiAiMTIzNDU2Nzg5MCIsICJuYW1lIjogIkpvaG4gRG9lIiwgImlhdCI6IDE1MTYyMzkwMjJ9.UJfr8bN4blKnFCD3V2pYxaLZXrsd4dhl6ZlMz1Y9nOM

客户端收到JWT后,可以通过解码 Base64 部分查看头部和载荷,然后使用密钥验证签名的合法性。

JWT的应用场景

  • 身份验证: JWT经常用于身份验证机制,允许用户在不同系统之间无需再次登录。
  • 信息传递: JWT可用于在系统之间安全地传递信息,如用户权限、个人信息等。

结语

JWT是一种灵活且安全的标准,广泛应用于现代网络开发中。了解JWT的结构和原理有助于更好地理解和使用这一技术。

以上示例展示了JWT的生成和验证过程,希望对你理解JWT有所帮助!

最近在浏览YouTube时偶然发现一款强大的内网穿透工具:loophole,要知道,目前市面上号称免费的内网穿透工具大部分有以下几个缺点:

  • 限制带宽和流量
  • 不能指定二级域名或者不能免费指定
  • 不断变化的域名(不能在内网建站,只能短时间使用)
  • 需要公网ip做转发(都有公网ip了我还折腾什么)
  • 需要开启vpn,不能暴露公网,只能自己组局域网使用(zerotier之类)

但是,loophole就不存在以上问题。

1、什么是loophole

Loophole.cloud是若干免费内网穿透工具中提供公共服务且相对稳定的一个,支持Windows、Linux(包括嵌入式设备)、MacOS,同时提供cli和desktop程序。目前,loophole服务仅在欧洲托管。loophole的客户端cli是开源的,官方自述“就目前而言,我们希望通过测试期以稳定系统,希望明年能提供自托管服务”。loophole服务提供的功能包括:

  • 公开本地HTTP服务器
  • 公开在网络中任何计算机上运行的HTTP服务器
  • 通过HTTPS公开本地目录
  • 通过WebDav公开本地目录
  • 基本身份验证

功能上公开本地HTTP服务器,就是网站发布,这个网站可以是一个博客、一个影视库,也可以是一个论坛系统等。另外一款工具zrok将这类功能总结为共享文件,定义很准确,无论是html、css、js还是其他文件,无非都是公布出去别人能获取到并在浏览器或其他程序中解析、渲染、呈现。因此,webdav公开本地目录、前端调试等都是以为网站发布/文件共享功能为基础的。

2、安装

无需安装,只需要解压对应的压缩包即可,这里引用作者的Cli版本的压缩包链接:

Windows

Linux

MacOS

Linux或者MacOS也可以直接拉取:

1
2
3
4
5
6
wget https://github.com/loophole/cli/releases/download/1.0.0-beta.15/loophole-cli_1.0.0-beta.15_linux_armv7.tar.gz
#github无法下载时可使用以下备用链接
#wget https://appscross.com/Sharetools/Tools%20Share/loophole/cli/linux/loophole-cli_1.0.0-beta.15_linux_armv7.tar.gz

#解压并进入loophole目录
tar zxvf loophole-cli_1.0.0-beta.15_linux_armv7.tar.gz && cd loophole-cli_1.0.0-beta.15_linux_armv7/

3、网站发布

然后我们在命令行下打开,在发布内网网站之前,我们需要先登录,以Windows为例:

1
loophole account login

然后会给我们一个链接和验证码,只需打开验证即可,然后会要求我们登录,可以使用GitHub账号直接登录,之后返回cmd,我们可以通过指定端口和ip来映射到公网,或者开启https:

1
loophole http [端口] [ip] [--https]

可以映射局域网内的所有设备,只需端口和ip即可,十分方便。

在默认情况下,loophole会给我们分配一个随机的二级域名,在我们退出之前,这个二级域名不会发生变化。

如果想要自定义二级域名,只需在后面加上–hostname [自定义],例如:

1
loophole http [端口] [ip] [--https] [--hostname][自定义]

如果自定义的域名没有被占用的话,loophole会为我们分配一个自定义.loophole.site的域名,这时我们就可以在公网访问这个域名了。而且虽然服务器在欧洲,实测不需要科学也能访问。

请注意,如果报错,请尝试更换一个域名

当然了,loophole还有其他玩法,后面我会继续分享。


参考:使用loophole发布网站

0%