liu 发布的文章

有时候我们想导出某次版本提交时有哪些变更的文件,在 svn 中有一个 export 功能,很方便,如下图所示。

在 Git 中我也找到了以下两种方法。

方法1

使用 git 自带命令 git archive, 语法如下。

git archive -o c:/Users/yourusername/Desktop/export.zip NewCommitId $(git diff --name-only OldCommitId NewCommitId)

使用示例如下:

git archive -o c:/Users/yourusername/Desktop/export.zip 479d554cf570edcc28c20ce264c6f216f8223bf3 $(git diff --name-only a838d0512e84e5eb42569cce3ef305d3ac1c44d0 479d554cf570edcc28c20ce264c6f216f8223bf3)

这样会在桌面生成一个 export.zip 压缩包。

这个方法需要敲命令,且每次拷贝前后提交的版本号,会稍显麻烦。

方法2

下载 TortoiseGit Git 客户端软件,使用方法和 svn 的 export 功能类似。

很明显,方法2不用敲命令,不用拷贝提交版本号,方法2更方便,更实用!

但遗憾的是,我没有在 Source Tree 软件中找到类似的功能,需要装两个客户端,有点蛋疼。

如果你知道 Source Tree 中类似的导出变更文件功能,可以在下方留言。

版权申明:本文系 "Java技术栈" 原创,原创实属不易,转载、引用本文内容请注明出处,禁止抄袭、洗稿,请自重,尊重他人劳动成果和知识产权。


发布于 2020-11-30


对于某些服务来说如果直接暴露于公网上将会存在安全隐患。

使用 stcp(secret tcp) 类型的代理可以避免让任何人都能访问到要穿透的服务,只有自己才可访问,但是访问者也需要运行另外一个 frpc。

以下示例将会创建一个只有自己能访问到的 ssh 穿透服务代理。


frps.ini服务端配置

Bash

[common]bind_port = 7000
bind_udp_port = 7001
dashboard_port = 7500
log_file = /root/frp/frps.log
log_level = info
log_max_days = 3
authentication_timeout = 0
token = frp888
max_pool_count = 50


启动 frpc,转发内网的 ssh 服务,配置如下,不需要指定远程端口:

待对方访问

frpc.ini客户端配置

Bash

[common]server_addr = 服务端IP
server_port = 7000
token = frp888[client_A]type = stcp#SK跟访问者一致才能连通,可以自己随便设sk = abcdefg
local_ip = 127.0.0.1
local_port = 3389


在要访问这个服务的机器上启动另外一个 frpc,配置如下:

要访问对方

frpc.ini客户端配置

Bash

[common]server_addr = 服务端IP
server_port = 7000
token = frp888[client_A_visitor]type = stcp
role = visitor#server_name同上面[client_A]一致,待访问端和访问者client_A字段可以替换成自己想要的server_name = client_A
sk = abcdefg
bind_ip = 127.0.0.1
bind_port = 2222


说明:

bind_addr = 127.0.0.1绑定监听本地IP

bind_port = 2222绑定监听本地端口,可自定义。

本地SSH工具通过 127.0.0.1:2222,既可访问到已穿透的3389服务。

server_name = 要访问的穿透服务名称。

sk = 只有 sk 一致的用户才能访问到此服务,可自定义。

role = stcp 的访问者,可自定义。


注意:这是最精简使用的方法实例,如你有更多要求,请参考详细参数阅读。


国外vps穿透后远程桌面速度慢(想放视频),带宽不够.国内服务器贵的一匹
尝试以下方案
P2P点对点穿透(stcp)
连接速度取决访问端和客户端的带宽,与服务器无干

访问端--(服务器)--客户端(受访问的机器)

客户端配置

[common] 
server_addr = 47.98.250.160
server_port = 7000
token = P2QTwF6Lhn9W8kA0

[rdp]
type = stcp
 sk = abcdefg
 local_ip = 127.0.0.1
 local_port = 3389

访问端配置

[common]
server_addr = 47.98.250.160
server_port = 7000
token = P2QTwF6Lhn9W8kA0

[rdp]
type = stcp
role = visitor
server_name = p2p_rdp
sk = abcdefg 
bind_addr = 127.0.0.1
bind_port = 63389

服务器(vps)配置

服务器端不需要特别配置,只需要指定一个udp端口
即bind_udp_port = 7001
比如7001吧

在两台win10电脑上测试了,连接成功,但我这速度依然不理想,校园网背锅?
win10访问端只要打开windows附件里远程桌面填写地址127.0.0.1:63389即可
这个端口自己指定

刷了高恪,不带frp 路由未测试


什么是frp?

frp 是一个高性能的反向代理应用,可以帮助您轻松地进行内网穿透,对外网提供服务,支持 tcp, http, https 等协议类型,并且 web 服务支持根据域名进行路由转发。frp 是一款跨平台的内网穿透工具,支持 Windows、macOS 与 Linux,它需要你有一台拥有固定公网 IP 的电脑,VPS 最好,然后就能愉快的进行内网穿透了。还支持 https,甚至可以用它进行小程序开发。

frp项目的github地址

frp 的作用

  • 利用处于内网或防火墙后的机器,对外网环境提供 http 或 https 服务。

  • 对于 http 服务支持基于域名的虚拟主机,支持自定义域名绑定,使多个域名可以共用一个80端口。

  • 利用处于内网或防火墙后的机器,对外网环境提供 tcp 服务,例如在家里通过 ssh 访问处于公司内网环境内的主机。

  • 可查看通过代理的所有 http 请求和响应的详细信息。(待开发)

使用示例

根据对应的操作系统及架构,从 frp的Release 页面下载最新版本的程序。

将 frps 及 frps.ini 放到具有公网 IP 的机器上。

将 frpc 及 frpc.ini 放到处于内网环境的机器上。

然后配置frps.ini或frpc.ini 文件中的内容。

服务器端用命令frps -c frps.ini来启动frp。
客户端用命令frpc -c frpc.ini来启动frp。

frp的四种模式:tcp、udp、stcp、xtcp

  • tcp和udp:就是将普通的tcp端口或者udp端口映射到公网上,相当于你的设备直接向公网暴露了一个tcp端口。任何设备都可以尝试连接这个端口。这里就会有很大的安全风险。

  • stcp:出于安全和防止攻击的考虑,frp提供了使用密钥验证的tcp,这就是frp的Secret TCP(stcp)模式。示意图如下:

  • xtcp:目的是让两个客户具有直接相连。在正式运行时,其实并不需要服务端做什么事情。
    frp客户端就好比两个相亲的对象,frp服务端是媒婆。媒婆介绍完之后,就应该让两个相亲对象自己去聊天了。
    这个就是点对点模式(p2p)。在frp中,这个可以通过设置xtcp实现。
    这种模式的好处是不需要消耗服务器的带宽和网速,延时也较低。
    不过该模式还在继续开发完善阶段,目前使用起来并不太稳定,很多时候会出现连不上的情况。并且与两端的路由器防火墙、DMZ、UPNP设置都有一些关系。本人测试后发现直接连接不上,暂时还未解决该问题。

示意图如下:

frp 示意图:


其中,客户端B是需要做端口映射的电脑。Visitor是访问端的电脑,只用于stcp模式和xtcp模式。

服务器端的frps配置

[common]bind_addr = 0.0.0.0bind_port = 7000bind_udp_port = 7001privilege_token = frp888
dashboard_port = 7500dashboard_user = admin
dashboard_pwd = admin

服务器端用命令frps -c frps.ini来启动frp。
启动后输入http://[服务器ip]:7500,并输入所设置的账号(admin)和密码(admin)就可以看到以下管理界面:

客户端B的配置模式1:tcp

[common]server_addr = 自己服务器的ip
server_port = 7000[PC-RDP]type = tcp
local_ip = 127.0.0.1local_port = 3389remote_port = 13389

客户端用命令frpc -c frpc.ini来启动frp。

客户端的配置模式2:udp

[common]server_addr = 自己服务器的ip
server_port = 7000[UDP-test]type = udp
local_ip = 127.0.0.1local_port = 53remote_port = 10053

客户端用命令frpc -c frpc.ini来启动frp。

客户端的配置模式3:stcp

[common]server_addr = 自己服务器的ip
server_port = 7000[PC-RDP-stcp]type = stcp
sk=123456local_ip = 127.0.0.1local_port = 3389

客户端用命令frpc -c frpc.ini来启动frp。

客户端的配置模式4:xtcp

[common]server_addr = 自己服务器的ip
server_port = 7000[PC-RDP-xtcp]type = xtcp
sk=123456local_ip = 127.0.0.1local_port = 3389

客户端用命令frpc -c frpc.ini来启动frp。

总结

对于网站等公开内容,使用tcp比较合适。对于远程桌面和ssh等非公开应用,最好使用stcp。xtcp暂时不建议使用,因为本人测试后发现不稳定。

参考资料

1、fatedier/frp: A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.
2、使用frp实现P2P点对点内网穿透_FRP教程_电脑博士
3、frp – 你也能用的开源内网穿透工具,最简洁教程 – 小众软件
4、frp首页、文档和下载 – 内网穿透工具 – OSCHINA
5、FRP 内网穿透 – 知乎
6、内网穿透神器frp之进阶配置——stcp及p2p模式_网络_黄腾霄的博客-CSDN博客


有些朋友不太了解frp内网穿透服务器端frps.ini的配置参数,醒醒自己也对有些参数不太了解他的真正作用,有些只知道字面的意思,不了解其真正的作用,写这个文章记录一下自己的理解,同时也为其他朋友使用frp内网穿透工具搭建服务器端提供一些参考,也许本人理解的不对,希望跟朋友们交流。

醒醒搭建了一个免费的Frp服务器,欢迎大家测试交流 http://www.chuantou.org

# [common] 是必须设置的部分,它指明了frp内网穿透服务器端的基本配置信息
[common]
# binde_addr是指定frp内网穿透服务器端监听的IP地址,可以省略,默认为127.0.0.1,如果使用IPv6地址的话,必须用方括号包括起来,比如 “[::1]:80”, “[ipv6-host]:http” or “[ipv6-host%zone]:80”
bind_addr = 0.0.0.0

# bind_port 是frp内网穿透服务器端监听的端口,默认是7000
bind_port = 7000

# 下面两个选项是为了frp内网穿透服务器可以支持虚拟主机的http和https协议,是可选项,如果不需要可以不设置这两个参数,需要注意的是如果使用虚拟主机的http和https协议,使得多个虚拟主机都通过默认的80或443端口访问,必须解析域名,否则不同的虚拟主机只能通过不同的端口访问frp内网穿透服务。
vhost_http_port = 80
vhost_https_port = 443

# 这个是frp内网穿透服务器的web界面的端口,可以通过http://你的ip:7500查看frp内网穿透服务器端的连接情况,和各个frp内网穿透客户端的连接情况。
dashboard_port = 7500

# 以下是frp内网穿透服务器web界面访问的用户名和密码,根据需要修改即可。
dashboard_user = admin
dashboard_pwd = admin

# dashboard面板的静态文件目录,只用于frp内网穿透服务的debug模式,默认情况下是不启用的。
# assets_dir = ./static
# 日志的输入方式,如果设置log_file的话日志就输出到日志文件中保存在硬盘中,需要注意绝对路径和相对路径,还要注意Linux系统和Windows系统下 /  和 的区别。

log_file = ./frps.log

# 日志的记录级别,分为debug, info, warn, error四级,日志保存的天数,默认3天
log_level = info

log_max_days = 3

# 特权模式,大部分朋友都会用这种模式,因为frp内网穿透的特权模式下,增加客户端不需要修改服务端的配置文件,非常方便,所有的客户端配置都在客户端进行。
privilege_mode = true
privilege_token = 12345678

# 心跳配置,默认的心跳配置时间是30
# heartbeat_timeout = 30

#frp内网穿透服务端监听的端口,如果不设置的话,所有端口都可以连接使用,但为为了不占用系统使用的端口号,建议设置允许的坚挺端口,比如www.chuantou.org提供的内网穿透服务器就是开放50000-60000端口
privilege_allow_ports = 2000-3000,3001,3003,4000-50000

#连接池的数量,如果frp内网穿透客户端设置的连接池的数量大于下面的数值,就会修改frp客户端的连接池为下面的数值
max_pool_count = 100

# frp内网穿透服务端frps和frp内网穿透的客户端frpc两台电脑的时间差,如果设置为0的话,不校验时间差异,默认校验时间差为900秒。
authentication_timeout = 900

# 用于直接绑定二级域名到frp内网穿透服务,如果客户端的http或https模式设置次级域名为xxorg的话,访问地址就是http://xxorg.frp1.chuantou.org
subdomain_host = frp1.chuantou.org

#以下部分在特权模式下可以不在frp穿透服务器端设置,而在frp内网穿透的客户端设置。

# 方括号内的ssh是代理名称,在同一个frp穿透服务器下的代理名称不能重复,否则不能启动。bind_addr是frp客户端内网的ip,也可以是客户端内网同一局域网下的其他IP
[ssh]
type = tcp
auth_token = 123
bind_addr = 0.0.0.0
listen_port = 6000

[dns]
type = udp
auth_token = 123
bind_addr = 0.0.0.0
listen_port = 5353

[web01]
#http类型的内网穿透,必须设置vhost_http_port,并且所有的http类型的客户端都将通过同一个vhost_http_port访问。
type = http
auth_token = 123
# custom_domains是通过frp服务器端访问客户端的域名,必须输入完整的域名,并且不能是subdomain_host的子域名,否则frp服务不能启动,并且相应的域名需要解析到frp服务器端的公网IP并等待解析生效后,才可以使用。
custom_domains = web01.yourdomain.com,web01.yourdomain2.com

[web02]
#https类型的frp内网穿透与http类型的相似。
type = https
auth_token = 123
custom_domains = web02.yourdomain.com

frp内网穿透服务器端的配置大体就是上面的这些,但是并不是所有的参数都需要设置,根据自己的需求设置合适的参数即可,如果不方便自己搭建frp内网穿透服务器,我这里提供几台搭建好的frp内网穿透服务器供大家使用: www.chuantou.org ,使用中有什么问题或者搭建frp服务器过程中有什么问题,可以进入下方的QQ群交流。