严正声明: 本文仅用于技术探讨, 严禁用于其他非法途径.
0*00 前言
在 N 年前看《窃听风云》时, 里面的窃听环节就深深吸引着我, 让我记忆深刻.
在 N 年前对于普通的我们想要实现远程窃听技术需要购买昂贵的设备才能实现.
但最近科技发展飞速, 一般家庭宽带的网速已经达到了 100M, 同时手机的 4G 已经普及, 5G 也开始商用了(加油华为, 加油 china), 在这样的环境下实现电影里面的窃听技术就比较容易得多了.
下面请随我一起开始窃听之旅.
0*01 所需材料
1. 树莓派
2.USB 麦克风
3.VPS 服务器
一般家庭的宽带都不是公网 IP, 外网无法直接连接, 所以需要使用 VPS 服务器来实现 FRP 内网穿透, 这样就可以直接访问家庭内部主机了.
我使用的是 vultr 的 VPS 服务器(最便宜的 3.5 美元 / 月就可以, 不用买贵的), 注册地址(打个广告, 可以忽略): https://www.vultr.com/?ref=7521512
5.VLC App
VLC 是一款自由, 开源的跨平台多媒体播放器及框架, 可播放大多数多媒体文件, 以及 DVD, 音频 CD,VCD 及各类流媒体协议.
6. 耳机
0*02 技术介绍
本文所使用的到的主要技术有: 使用 nginx+rtmp 搭建音频直播流媒体服务器和 FRP 内网穿透.
什么是 nginx?
Nginx 是一个高性能的 HTTP 和反向代理 web 服务器, 同时也提供了 IMAP/POP3/SMTP 服务.
什么是 RTMP?
RTMP 协议是 Real Time Message Protocol(实时信息传输协议)的缩写, 它是由 Adobe 公司提出的一种应用层的协议, 用来解决多媒体数据传输流的多路复用 (Multiplexing) 和分包 (packetizing) 的问题. 随着 VR 技术的发展, 视频直播等领域逐渐活跃起来, RTMP 作为业内广泛使用的协议也重新被相关开发者重视起来.
什么是 FRP?
FRP 是 fast reverse proxy 的缩写, 简单地说, FRP 就是一个反向代理软件, 它具有体积轻量且功能强大特点, 可以使处于内网或防火墙后的设备对外界提供服务.
0*03 环境搭建
3.1 在树莓派上使用 nginx+rtmp 搭建音频直播流媒体服务器
1. 安装所需要的依赖
sudo apt-get install build-essential libpcre3 libpcre3-dev libssl-dev
2. 安装 nginx 和 rtmp
- wget http://nginx.org/download/nginx-1.17.0.tar.gz
- wget
- tar -zxvf nginx-1.17.0.tar.gz
- unzip master.zip
- cd nginx-1.17.0
- ./configure --with-http_ssl_module --add-module=../nginx-rtmp-module-master
- make
- sudo make install
3. 修改 nginx 配置文件
执行 sudo nano /usr/local/nginx/conf/nginx.conf, 追加如下内容.
- # RTMP 协议
- rtmp {
- # 创建一个服务, 监听 1935 端口, 这个是 RTMP 默认的端口
- server {
- listen 1935; #默认端口
- chunk_size 4096;
- # 创建了一个名为 live 的应用, 支持直播
- application live {
- live on;
- }
- }
- }
4. 启动 nginx+rtmp 流媒体服务器
sudo /usr/local/nginx/sbin/nginx
5. 安装 FFMPEG
sudo apt install FFMPEG
6. 将 usb 麦克风插入到树莓派的 usb 口, 启动 FFMPEG 从 usb 麦克风实时采集音频, 并推流到树莓派上搭建好的 nginx+rtmp 流媒体服务器上.
FFMPEG -f alsa -ac 2 -i hw:1,0 -ar 44100 -f flv rtmp://192.168.1.150/live/audio
参数说明
主要参数:
-f 设定输出格式
-i 设定输入流(hw:1,0 为外接的 usb 音频采集卡设备, hw:1,0 的 1 指的是第一个外部设备, 因为树莓派内部没有声卡, 所以只能使用外部的 usb 音频采集卡);
-ar 设定采样率(因为输出为 flv 格式, 所以采样率只能选择 44100,22050,11025 这三种);
注意: 192.168.1.150 为树莓派的 IP 地址.
7. 在 Windows 客户端中使用 VLC 软件打开网络串流, 地址为 "rtmp://192.168.1.150/live/audio", 即可收听到树莓派麦克风上捕获到的声音.
当前, 可以在树莓派相同的 Wi-Fi 网络下, 可以实现窃听, 如果想要实现在任何地方的外网收听, 还需要实现下面的 FRP 内网穿透.
3.2 在树莓派上搭建 FRP 内网穿透服务
3.2.1 服务端 - frps(VPS 服务器)
1. 下载程序
我的 VPS 服务器是 unbuntu 系统, 使用的是 arm64 架构, 所以需要下载 arm64 架构的 frp 软件.
- wget --no-check-certificate https://github.com/fatedier/frp/releases/download/v0.20.0/frp_0.20.0_linux_amd64.tar.gz
- # 解压
- tar -xzvf frp_0.20.0_linux_amd64.tar.gz
- # 新建文件夹
- sudo mkdir -p /usr/local/frp
- # 移动
- sudo mv frp_0.18.0_linux_amd64 /usr/local/frp
- cd /usr/local/frp
- # 确保 frps 程序具有可执行权限
- chmod +x frps
说明: 目录下只主要关注 4 个文件, 分别是 frpc,frpc.INI 和 frps,frps.INI, 前者两个文件是客户端所关注文件, 后者两个文件是服务端所关注两个文件.
2. 配置程序
首先删掉 frpc,frpc.INI 两个文件, 然后再进行配置, nano ./frps.INI:
- [common]
- bind_port = 9000 #与客户端绑定的进行通信的端口
- auto_token = hell.world #客户端连接服务器端的口令
验证 frps 是否安装成功:
./frps -c frps.INI
如果没有出现错误提示就说明配置没有问题, 可以正常使用.
接着按下 Ctrl + C 终止程序运行.
3. 使 frps 开机启动
编辑 / etc/rc.local 文件, 将启动那句命令加到 exit 0 语句之前(如果有):
nohup /usr/local/frpfrps -c /usr/local/frp/frps.INI &
3.2.2 客户端 - frpc (树莓派)
1. 下载 FRP:
wget https://github.com/fatedier/frp/releases/download/v0.20.0/frp_0.20.0_linux_arm.tar.gz
2. 修改 frpc.INI 文件:
- [common]
- server_addr = XXX.XXX.XXX.XXX #VPS 服务器的公网 IP
- server_port = 9000 #与服务端 bind_port 一致
- auto_token = hello.world #客户端连接服务器端的口令
- [RTMP]
- [RTMP]
- type = tcp #连接协议
- local_ip = 127.0.0.1 #内网服务器 ip
- local_port = 1935 #RTMP 默认的端口
- remote_port = 6000 #自定义的访问内部 RTMP 端口号
3. 启动 frpc:
执行./frpc -c ./frpc.INI 启动, 这是前台启动, 后台启动命令为:
nohup ./frpc -c ./frpc.INI &
到此, FRP 内网穿透就搭建完了.
0*04 开始远程监听
使用手机下载 VLC Media Player, 并将耳机连接到手机上(除非你想让窃听的内容被周围的人听到, 当然也可以不连接耳机).
手机上打开 VLC 软件, 打开网络串流, 地址为 "rtmp://XXX.XXX.XXX.XXX:6000/live/audio".
说明: XXX.XXX.XXX.XXX 为 VPS 服务器的 IP 地址.
稍等一会, 在耳机中即可听到远程的实时声音. 注意, 声音是有延迟的, 对于我的网络大概延迟 2s 左右, 具体需要自行测量.
备注: 如果连接不成功, 可以关闭 VLC 软件, 重试几次即可.
0*05 结束语
当从耳机中听到远程的声音时, 内心是无比激动的, 希望我的这份愉悦与大家一起分享.
喜欢的话, 支持一下吧.
来源: http://www.tuicool.com/articles/EjeMjue