严正声明:本文仅用于技术探讨,严禁用于其他非法途径。
在N年前看《窃听风云》时,里面的窃听环节就深深吸引着我,让我记忆深刻。
在N年前对于普通的我们想要实现远程窃听技术需要购买昂贵的设备才能实现。
但最近科技发展飞速,一般家庭宽带的网速已经达到了100M,同时手机的4G已经普及,5G也开始商用了(加油华为,加油china),在这样的环境下实现电影里面的窃听技术就比较容易得多了。
下面请随我一起开始窃听之旅。
一般家庭的宽带都不是公网IP,外网无法直接连接,所以需要使用VPS服务器来实现FRP内网穿透,这样就可以直接访问家庭内部主机了。
我使用的是vultr的VPS服务器(最便宜的3.5美元/月就可以,不用买贵的),注册地址(打个广告,可以忽略):https://www.vultr.com/?ref=7521512
VLC 是一款自由、开源的跨平台多媒体播放器及框架,可播放大多数多媒体文件,以及 DVD、音频 CD、VCD 及各类流媒体协议。
本文所使用的到的主要技术有:使用nginx+rtmp搭建音频直播流媒体服务器和FRP 内网穿透。
Nginx 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。
RTMP协议是Real Time Message Protocol(实时信息传输协议)的缩写,它是由Adobe公司提出的一种应用层的协议,用来解决多媒体数据传输流的多路复用(Multiplexing)和分包(packetizing)的问题。随着VR技术的发展,视频直播等领域逐渐活跃起来,RTMP作为业内广泛使用的协议也重新被相关开发者重视起来。
FRP是fast reverse proxy的缩写,简单地说,FRP就是一个反向代理软件,它具有体积轻量且功能强大特点,可以使处于内网或防火墙后的设备对外界提供服务。
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 https://github.com/arut/nginx-rtmp-module/archive/master.zip
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”,即可收听到树莓派麦克风上捕获到的声音。
当前,可以在树莓派相同的wifi网络下,可以实现窃听,如果想要实现在任何地方的外网收听,还需要实现下面的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]
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内网穿透就搭建完了。
使用手机下载VLC Media Player,并将耳机连接到手机上(除非你想让窃听的内容被周围的人听到,当然也可以不连接耳机)。
手机上打开VLC软件,打开网络串流,地址为“rtmp://XXX.XXX.XXX.XXX:6000/live/audio”。
说明:XXX.XXX.XXX.XXX为VPS服务器的IP地址。
稍等一会,在耳机中即可听到远程的实时声音。注意,声音是有延迟的,对于我的网络大概延迟2s左右,具体需要自行测量。
备注:如果连接不成功,可以关闭VLC软件,重试几次即可。
当从耳机中听到远程的声音时,内心是无比激动的,希望我的这份愉悦与大家一起分享。
喜欢的话,支持一下吧。
*本文原创作者:xutiejun,本文属于FreeBuf原创奖励计划,未经许可禁止转载