[基於frp或nps的遠程遙控手機實現釘釘遠程打卡 - 劉念的個人博客](https://liunian.js.org/2020/04/24/%E5%9F%BA%E4%BA%8Efrp%E6%88%96nps%E7%9A%84%E8%BF%9C%E7%A8%8B%E6%89%8B%E6%9C%BA%E9%81%A5%E6%8E%A7/ )]
想要實現遠程控制手機已知比較好的商業解決方案有Teamviewer
和向日葵。不過價格對於我這種偶爾有需求的窮逼來講確實不太合適。索性自己搭建一個。
對比網上的其他方案優點就是:
- 直接控制手機,不光可以釘釘打卡,所有手機的操作都可以做。
- 控制是基於
adb
的,不存在釘釘更新后插件失效的問題,也沒有被檢測的風險。 - 一次搭建永久使用,不需要更新。
- 用的都是
10K+
開源,不存在廣告病毒之類的。
ADB
是什么?全稱Android Debug Bridge。安卓平台調試橋,是連接Android手機與PC端的橋梁,通過adb可以管理、操作模擬器和設備,如安裝軟件、查看設備軟硬件參數、系統升級、運行shell命令等。
理想狀態是手機直接控制手機,就像Teamviewer
或向日葵那樣,但是找了好幾天也沒看到有人做這個,無奈只能折中一下使用電腦來控制了。
經過研究方案有兩種,一種需要遠程設備(被控制端)連接電腦,第二種就是控制端是電腦。
基於frp
的方案
基本原理就是控制端 (手機,電腦,開發板等終端)通過frp
控制被控制端 (電腦,開發板等windows
或linux
系統的設備)然后被控制端通過adb
來控制手機。
在服務器上搭建frp
-
首先下載frp,在
release
中找到對應自己系統的版本。 -
解壓之后服務器需要的是
frps
和frps.ini
,其他文件可以刪掉了。 -
編輯
frps.ini
:1
2
3
4
5
6
7
8
9
10
11[common]
# 綁定端口,根據自己的情況修改
bind_port = 7000
# 管理面板的端口,根據自己的情況修改
dashboard_port = 7500
# 管理面板的用戶名,起一個別人猜不到的
dashboard_user = admin
# 管理面板的密碼
dashboard_pwd = 123456
# 自定義token
token = 123456 -
之后直接啟動就可以了
./frps -c ./frps.ini
-
在這我是用
pm2
來管理啟動項:1
pm2 start -x './frps' -n frp -- -c ./frps.ini
配置
frp
客戶端 -
還是下載對應系統的frp。我的客戶端是
win 10 x64
的,所以下載frp_0.32.1_windows_amd64.zip -
下載后解壓,客戶端需要的是
frpc.exe
和frpc.ini
,其他不需要的可以刪除了。 -
編輯配置文件
frpc.ini
:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16[common]
server_addr = 你的服務器ip
# 上面配置的bind_port
server_port = 7000
# 上面配置的自定義token
token=123456
[給你的客戶端起個名字,會顯示在管理面板中]
# 鏈接類型
type = tcp
# 本地ip
local_ip = 127.0.0.1
# 內網穿透的本地端口,因為需要使用windows遠程桌面,所以填默認的3389,如果你修改過mstsc的端口那就按照修改的填寫
local_port = 3389
# 遠程端口
remote_port = 7003 -
配置好之后可以啟動試試
frpc.exe -c ./frpc.ini
-
可以寫一個
bat
來一鍵啟動:1
2
3
4chcp 65001
@echo. ******點擊右上角關閉按鈕或連續兩次Ctrl+C關閉******
frpc.exe -c ./frpc.ini
pause
-
啟動成功后可以試着用其他設備控制這台電腦,
windows
直接啟動mstsc
,手機下載RD Client
。利用你的服務器ip
和上面設置的遠程端口(7003)微軟自家東西的配套做的還是非常良心的,免費、好用:- 連接成功后就可以使用電腦控制手機了。
- 在這下載scrcpy,這是一個開源免費在電腦顯示手機畫面並控制手機的工具 (投屏/錄屏/免Root)
- 如果你只有一個設備,直接雙擊
scrcpy.exe
就可以開始控制了,如果有多個設備則執行一下.\adb.exe devices
找到你的設備,之后.\scrcpy.exe -s 設備ID
就可控制了
到這一步就可以實現遠程控制了,但是如果遠程的電腦關機了就不行了。實現遠程關機很簡單,到網上隨便買個智能插座,然后把bios設置成通電自動開機就可以了。
基於nps
的方案
上面基於frp
的方案需要遠程有電腦,有的人可能不方便,基於nps
的可以免除遠程的電腦。
原理和frp
一樣,都是內網穿透,因為nps
提供安卓版本的,所以可以直接使用。
nps是一款輕量級、高性能、功能強大的內網穿透代理服務器。目前支持tcp、udp流量轉發,可支持任何tcp、udp上層協議(訪問內網網站、本地支付接口調試、ssh訪問、遠程桌面,內網dns解析等等……),此外還支持內網http代理、內網socks5代理、p2p等,並帶有功能強大的web管理端。
在服務器上搭建nps
-
根據你的系統下載nps
-
解壓,執行
sudo ./nps install
來安裝 -
nps
默認配置文件使用了80,443,8080,8024端口80與443端口為域名解析模式默認端口
8080為web管理訪問端口
8024為網橋端口,用於客戶端與服務器通信
-
服務器上肯定有其他項目,所以不能占用80和443等端口,在這修改
nps.conf
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82appname = nps
#Boot mode(dev|pro)
runmode = dev
#HTTP(S) proxy port, no startup if empty
http_proxy_ip=0.0.0.0
http_proxy_port=8001
https_proxy_port=8443
https_just_proxy=true
#default https certificate setting
https_default_cert_file=conf/server.pem
https_default_key_file=conf/server.key
##bridge
bridge_type=tcp
bridge_port=8024
bridge_ip=0.0.0.0
# Public password, which clients can use to connect to the server
# After the connection, the server will be able to open relevant ports and parse related domain names according to its own configuration file.
public_vkey=123
#Traffic data persistence interval(minute)
#Ignorance means no persistence
#flow_store_interval=1
# log level LevelEmergency->0 LevelAlert->1 LevelCritical->2 LevelError->3 LevelWarning->4 LevelNotice->5 LevelInformational->6 LevelDebug->7
log_level=7
#log_path=nps.log
#Whether to restrict IP access, true or false or ignore
#ip_limit=true
#p2p
#p2p_ip=127.0.0.1
#p2p_port=6000
#web
web_host=a.o.com
web_username=你的用戶名
web_password=你的密碼
web_port = 7501
web_ip=0.0.0.0
web_base_url=
web_open_ssl=false
web_cert_file=conf/server.pem
web_key_file=conf/server.key
# if web under proxy use sub path. like http://host/nps need this.
#web_base_url=/nps
#Web API unauthenticated IP address(the len of auth_crypt_key must be 16)
#Remove comments if needed
#auth_key=test
auth_crypt_key =1234567812345678
#allow_ports=9001-9009,10001,11000-12000
#Web management multi-user login
allow_user_login=false
allow_user_register=false
allow_user_change_username=false
#extension
allow_flow_limit=false
allow_rate_limit=false
allow_tunnel_num_limit=false
allow_local_proxy=false
allow_connection_num_limit=false
allow_multi_ip=false
system_info_display=false
#cache
http_cache=false
http_cache_length=100
#get origin ip
http_add_origin_header=false
#pprof debug options
#pprof_ip=0.0.0.0
#pprof_port=9999 -
啟動
nps
sudo nps start
。然后訪問
http://你的ip:7501/
,看到管理界面就是成功了。 -
然后再面板上新增一個客戶端,之后在
TCP隧道
中配置內網穿透:模式:
TCP
隧道服務端端口:7111(根據自己情況填寫)
目標 (IP:端口):5555 (
adb
的遠程調試端口) -
之后安裝安卓版的
nps
,填寫你的服務器ip:端口和剛才配置的唯一驗證密鑰 -
之后在你的控制端(比如你家里的電腦)打開scrcpy,執行:
1
.\scrcpy.exe -s 服務器IP:7004
-
現在你就可以成功在家控制在單位的手機了。
這種方案免除了被控制端的電腦,也就是被控制端(比如單位)只有一部手機就可以了,而且也不需要買智能插座了。
缺點就是軟件是直接運行在手機上的,某些系統會自動把進程殺掉,如果后台被清理了那就沒辦法了。
總結
frp
的方案是遠程控制你的電腦,然后通過遠程的電腦控制遠程的手機。控制端可以使電腦,手機等各種設備。
nps
是直接控制遠程的手機,但是控制端只能是電腦,而且被控制端可能存在殺后台等情況。
兩種方法各有利弊,大家可以根據自己的情況進行選擇。