如何获取一个 app 所有使用的端口?

2022-09-19 13:53:53 +08:00
 diwenx

请问一下,如何找到一个 app 所有正在进行中的网络连接以及端口呢?比如该 app 与 8.8.8.8 有保持 tcp 连接 ( 127.0.0.1:34555 <-> 8.8.8.8:53 ), 如何能够获取到该信息呢?

谢谢!

9544 次点击
所在节点    Android
9 条回复
diwenx
2022-09-19 13:56:22 +08:00
我尝试使用过 adb shell cat /proc/PID/net/{tcp/udp},类似于这种:

sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode
37: 03EC1BAC:96A9 080D3C17:01BB 08 00000000:00000000 00:00000000 00000000 10005 0 543533 1 0000000000000000 22 3 26 10 1400
38: 03EC1BAC:F6C9 6276000A:0035 06 00000000:00000000 03:0000033A 00000000 0 0 0 3 0000000000000000
39: 03EC1BAC:0DD3 6276000A:0035 06 00000000:00000000 03:0000048D 00000000 0 0 0 3 0000000000000000

但发现虽然有些条目的 uid 可以知道是是哪个进程创建的 (比如#37 的 10005 ),但有些条目的 uid 为 0 (比如#38 ,#39 ),对于 uid 为 0 的条目,如何知道是哪个进程创建的该连接呢?

如果 cat /proc/PID/net/{tcp/udp}是错误的途径,也请指出哪个文件包含着该信息,谢谢!
AoEiuV020CN
2022-09-19 16:30:47 +08:00
直觉判断 app 自身没有权限获取这个,
另外你都进入 /proc/PID 了, 这里面的连接自然都是这个 PID 进程创建的连接了,
brader
2022-09-19 17:19:06 +08:00
使用代理实现?你可以使用一些代理软件,要高度定制的话,就自己写一个代理程序,然后手机使用代理上网,这样所有网络行为都会被代理记录下来
diwenx
2022-09-20 04:36:11 +08:00
@AoEiuV020CN 有些连接的信息会同时在不同的 /proc/PID/出现,所以才会想去使用 uid
diwenx
2022-09-20 04:37:09 +08:00
@brader 你好,我是这样做了后想区分 pcap 里的某些 flow 是由哪个 app 发出来的。请问这有什么办法能实现吗?谢谢
tramm
2022-09-20 09:08:20 +08:00
不知道手机里有没有 lsof
brader
2022-09-20 09:15:27 +08:00
@diwenx 这个我平时都是靠观察,多关闭打开几次 APP ,人工观察记录下它总是会请求哪些域名和 IP
brader
2022-09-20 09:24:54 +08:00
@diwenx 对了,我以前用过一个安卓版的抓包工具,VNET ,它抓包可以设置只抓某个 APP 的包,你可以试试合用不合用
meetcw
2022-09-20 12:17:20 +08:00
@tramm 昨天好奇测试了下,安卓的 lsof 好像是个阉割版。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/881247

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX