Ubuntu 22.04下如何追踪应用与外部API的通信内容?
Ubuntu 22.04下如何追踪应用与外部API的通信内容?
嗨,我明白你现在的困扰——看不到应用和API之间的通信细节确实让人头疼。其实Ubuntu上有不少工具能帮你搞定这个,我给你整理几个实用的方法,从简单到进阶都有:
1. 用strace追踪网络系统调用(适合看底层交互)
你之前尝试的strace其实是可行的,只是可能没用到正确的参数。strace能追踪应用发起的所有系统调用,其中网络相关的connect、send、recv等调用就能帮你看到应用和API的交互动作。
操作步骤:
- 先找到应用的进程ID(PID):用
pgrep <你的应用名称>,比如pgrep myapp,返回的数字就是PID。 - 运行strace追踪网络调用:
sudo strace -e trace=network -s 1024 -p <PID>-e trace=network:只过滤网络相关的系统调用,避免输出太多无关内容-s 1024:设置显示的字符串长度(默认只有32字节,会截断内容)-p <PID>:附加到已经运行的应用进程上
如果你的应用是从命令行启动的,也可以直接在启动时就加上strace:sudo strace -e trace=network -s 1024 <应用启动命令>
注意:strace只能看到底层的字节流,看不到格式化的HTTP请求/响应内容,适合确认应用是否真的发起了网络请求,以及目标地址。
2. 用tcpdump抓包(适合分析原始网络数据包)
tcpdump是命令行的抓包工具,可以直接捕获应用和API之间的所有网络数据包。
基本用法:
- 如果知道API的域名或IP:
sudo tcpdump -i any host <API域名或IP> -w api_capture.pcap-i any:监听所有网卡-w api_capture.pcap:把抓到的包保存到文件,方便后续分析
- 如果不知道API地址,可以先抓所有HTTP/HTTPS流量:
sudo tcpdump -i any port 80 or 443 -w http_capture.pcap
查看抓包内容:
- 直接在命令行查看:
sudo tcpdump -r api_capture.pcap - 更直观的方式是用Wireshark打开pcap文件,方便过滤和分析。
注意:如果API用的是HTTPS(443端口),tcpdump抓到的是加密后的内容,需要额外步骤解密才能看到明文。
3. 用Wireshark可视化分析(图形界面,更友好)
Wireshark是图形化的抓包工具,操作比tcpdump简单,适合新手。
操作步骤:
- 安装Wireshark:
sudo apt install wireshark - 运行Wireshark:
sudo wireshark(需要sudo权限才能抓包) - 在界面中选择要监听的网卡(推荐选
any监听所有网卡) - 设置过滤规则:
- 要抓HTTP流量:输入
http并回车 - 要抓HTTPS流量:输入
tls并回车 - 要针对特定API:输入
ip.addr == <API的IP地址>并回车
- 要抓HTTP流量:输入
- 点击开始抓包按钮,然后操作你的应用触发API调用,抓包完成后停止即可。
如果要解密HTTPS流量,需要在Wireshark中配置SSL密钥,或者配合mitmproxy使用(下面会讲)。
4. 用mitmproxy解密HTTPS流量(适合看明文的API请求/响应)
如果API是HTTPS的,前面的工具只能看到加密内容,mitmproxy作为中间人代理,可以帮你解密并查看完整的HTTP请求和响应。
操作步骤:
- 安装mitmproxy:
sudo apt install mitmproxy - 启动mitmproxy:直接在命令行输入
mitmproxy,它会在本地启动一个代理服务(默认地址127.0.0.1:8080) - 让应用通过mitmproxy代理访问API:
- 如果应用有代理设置选项,直接填入
http://127.0.0.1:8080 - 如果应用没有代理设置,先设置系统环境变量,再启动应用:
export http_proxy=http://127.0.0.1:8080 export https_proxy=http://127.0.0.1:8080 <你的应用启动命令>
- 如果应用有代理设置选项,直接填入
- 安装mitmproxy的根证书(避免应用报SSL错误):
- 证书文件在
~/.mitmproxy/mitmproxy-ca-cert.pem - 复制证书到系统信任目录:
sudo cp ~/.mitmproxy/mitmproxy-ca-cert.pem /usr/local/share/ca-certificates/mitmproxy.crt - 更新系统证书:
sudo update-ca-certificates
- 证书文件在
完成后,操作应用触发API调用,mitmproxy的界面就会显示所有明文的请求和响应内容,包括URL、请求头、请求体、响应状态、响应体等,非常直观。
备注:内容来源于stack exchange,提问作者plpm
相关产品推荐
相关产品推荐

