- 首发:2023-03-14 00:21:40
- 教程
- 3713
frp是一个高性能的反向代理工具,它可以帮助我们穿透NAT和防火墙,实现内网穿透。它采用客户端-服务器模式,在内网中部署客户端程序,将需要访问的端口映射到公网上的服务器上,即可通过公网地址访问内网服务。同时,frp还可以作为正向代理使用,从而实现某些特定场景下的代理功能。frpc是frp的客户端程序。
在本文中,我们本文将详细介绍如何编译开源项目frpc的安卓版本。在禁用CGO的情况下,编译一个适用于Android操作系统、基于ARM64架构的可执行文件,同时使用 -trimpath
和 -ldflags "-s -w"
选项来减小二进制文件的大小,并在安卓设备上运行它,以实现在嵌入式设备(自助终端设备)上使用frpc的功能。
环境搭建
在开始编译之前,需要先确保环境已经正确搭建。具体来说,需要满足以下条件:
- 安装Go语言环境,并配置好GOPATH和GOROOT等相关变量。
- 安装Android platform-tools(adb)https://developer.android.com/studio/releases/platform-tools?hl=zh-cn
如果还没有完成以上步骤,请先完成相关配置后再继续进行后续操作。
克隆frpc
首先,我们需要从GitHub上克隆frp项目:
git clone https://github.com/fatedier/frp.git
cd frp
编译frpc
接下来,我们只需要执行下述命令即可编译frpc。编译完成后,我们可以在./release
目录下找到生成的frpc_android_arm64
可执行文件。
env CGO_ENABLED=0 GOOS=android GOARCH=arm64 go build -trimpath -ldflags "-s -w" -o ./release/frpc_android_arm64 ./cmd/frpc
编译命令解析
现在,我们来分析一下这个编译命令的各个部分:
env
这个命令用于设置环境变量。在这个例子中,我们用它来设置CGO_ENABLED的值为0,以禁用CGO库。
CGO_ENABLED=0
CGO是Go语言提供的一种机制,用于在程序中调用C代码。但是,在交叉编译时,由于不同平台的C库的差异性,会导致CGO编译失败。因此,通过将CGO_ENABLED的值设置为0,我们可以禁用CGO,避免这种问题的发生。
GOOS=android
GOOS是一个环境变量,用于指定目标操作系统的名称。在这个例子中,我们将其设置为android,表示要编译出一个适用于Android系统的可执行文件。
GOARCH=arm64
GOARCH是一个环境变量,用于指定目标CPU架构的类型。在这个例子中,我们将其设置为arm64,表示要编译出一个基于ARM64架构的可执行文件。
go build
这个命令用于编译Go语言程序。在这个例子中,我们将用它来编译frpc的安卓版本。
-trimpath
这个选项用于削减可执行文件中的路径信息。由于路径信息可能包含机器的敏感信息,因此我们可以使用这个选项来删除它们,提高二进制文件的安全性。
-ldflags "-s -w"
这个选项用于在编译时设置链接器的参数。其中,-s选项表示省略符号表和调试信息,-w选项表示省略DWARF调试信息。这两个选项可以有效地减小二进制文件的大小。
-o ./release/frpc_android_arm64
这个选项用于指定编译输出的文件名和路径。在这个例子中,我们将编译结果保存到 ./release/frpc_android_arm64 文件中。
./cmd/frpc
这个参数用于指定要编译的Go语言程序的相对路径。在这个例子中,我们将编译 cmd 目录下的 frpc 程序。
在安卓设备上运行frpc
将生成的frpc_android_arm64
文件复制到安卓设备上,并赋予执行权限:
adb push ./release/frpc_android_arm64 /data/local/tmp/frpc
adb shell chmod +x /data/local/tmp/frpc
然后,在安卓设备上启动frpc:
adb shell /data/local/tmp/frpc -c /sdcard/frpc.ini
注意,我们需要提供一个配置文件frpc.ini
,该文件包含了frpc所需要的配置项。具体的配置项可以参考frp的官方文档。
总结
本文介绍了如何使用 go build
命令编译开源项目frpc的安卓版本。通过该命令,我们可以指定目标操作系统和CPU架构,并禁用CGO以避免交叉编译时的问题。同时,使用 -trimpath
和 -ldflags "-s -w"
选项可以有效地减小二进制文件的大小。希望本文能够帮助读者更好地理解这个编译过程,并为大家提供参考。
当然,在实际使用过程中,我们还需要考虑一些安全问题。例如,如何保证frpc配置文件的安全性?如何避免frpc被滥用造成的安全风险?这些问题需要我们在实际操作中进行综合考虑和处理。
暂无内容
老师你好,我希望能用一个openwrt路由器实现IPv4和IPv6的桥接,请问我该如何实现?我尝试了直接新增dhcpv6的接口,但是效果不甚理想(无法成功获取公网的ipv6,但是直连上级路由的其他设备是可以获取公网的ipv6地)
![%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE20241205230845.png](https://cdn.wyr.me/visitor-files/2024-12-05/1733411344287屏幕截图 2024-12-05 230845.png)你好
,为什么我这里是0039 813C 0600 0075 16xx xx xx,只有前6组是相同的,博客中要前8位相同,这个不同能不能照着修改呢?我系统版本是Win1124H2
大神你好,win11专业版24h2最新版26100.2033,文件如何修改?谢谢
win11专业版24h2最新版26100.2033,Windows Feature Experience Pack 1000.26100.23.0。C:\Windows\System32\termsrv.dll系统自带的这个文件,39 81 3C 06 00 00 0F 85 XX XX XX XX 替换为 B8 00 01 00 00 89 81 38 06 00 00 90。仍然无法远程连接。原来是win11 21h2系统,是可以远程链接的。共享1个主机,2个显示器,2套键鼠,各自独立操作 各自不同的账号,不同的桌面环境。
博主,win11专业版24h2最新版,C:\Windows\System32\termsrv.dll系统自带的这个文件,找不到应该修改哪个字段。我的微信:一三五73二五九五00,谢谢