基於frp或nps的遠端遙控手機實現釘釘遠端打卡
[基於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
是直接控制遠端的手機,但是控制端只能是電腦,而且被控制端可能存在殺後臺等情況。
兩種方法各有利弊,大家可以根據自己的情況進行選擇。
基於frp或nps的遠端遙控手機實現釘釘遠端打卡