请教大家一个方案,关于 TCP 流量识别以及匹配。

2024-03-06 15:48:23 +08:00
 rev1si0n

(以下是情况假设)有一台电脑,我设置了 wireshark 只抓浏览器的包,随后我通过浏览器访问 baidu.com ,抓到了访问百度首页的所有数据包。随后,设置 wireshark 抓取电脑全局流量,并随机使用电脑上安装的软件,其中我可能会访问 baidu.com 。最终,我想通过这个浏览器访问百度的流量包(全局流量的子集),解析出所有 TCP 包的时间大小相对时间协议等,在全局流量中通过滑动窗口去匹配哪个时间段访问了百度首页。这可能很麻烦,因为某些包可能并不一定会发出,其次,因为中间可能掺杂着其他流量,所以对于访问百度首页的数据包还要进行适当的 X 轴拉伸匹配。在此请教大家一下有没有什么好的实现方法或者类似的方案。

3596 次点击
所在节点    程序员
53 条回复
rrfeng
2024-03-06 15:52:58 +08:00
首先说明你为什么要抓包
lambdaq
2024-03-06 15:55:32 +08:00
wireshark 怎么实现只抓浏览器的包的。。。?
rev1si0n
2024-03-06 16:01:57 +08:00
@rrfeng
@lambdaq 为什么抓包,抓包就是为了说明上面的问题。怎么实现只抓浏览器的包,你是觉得不行吗,至少我,能想出来至少三种办法,我觉得,设置浏览器代理最适合你。
F7TsdQL45E0jmoiG
2024-03-06 16:03:02 +08:00
自己弄个代理,浏览器配代理,然后抓代理的包
liuhan907
2024-03-06 16:12:45 +08:00
你首先应该想一下怎么解 https 的流量
tool2d
2024-03-06 16:16:15 +08:00
我会选择用 windows 系统的防火墙来过滤,有一个 API 参数是 FWPM_CONDITION_ALE_APP_ID ,可以匹配浏览器的运行 PID 。

可能还需要装一个开源 VPN 虚拟网卡,作为抓包和转发的中转节点。

想想还是 linux 简单,iptables 需要匹配进程,一句--uid-owner 就搞定了。
lambdaq
2024-03-06 16:16:59 +08:00
@rev1si0n 我还以为 wireshark 原生支持了。。。。。
lxyv
2024-03-06 16:27:05 +08:00
可以考虑用微软的 network monitor 抓包,根据应用进程 pid 筛选
rev1si0n
2024-03-06 16:43:58 +08:00
@liuhan907 不考虑解,因为是无解的,也并不要求解析出访问内容只需要知道这个行为,所以打算从 tcp 层面进行分析。
rekulas
2024-03-06 17:13:36 +08:00
不如说说你真正想实现的是什么功能
rev1si0n
2024-03-06 17:24:50 +08:00
@rekulas 标题已经很明白了,TCP 流量匹配,根据一段特征流量从当日流量匹配出特征流量出现的时间点。
tool2d
2024-03-06 17:31:18 +08:00
@rev1si0n "解析出所有 TCP 包的时间大小相对时间协议等,在全局流量中通过滑动窗口去匹配哪个时间段访问了百度首页。"

TCP 滑动窗口值是动态变换的,网速好就大一点,网速卡就小一点,这个和用户是否访问百度又没必然联系。

用时间协议去匹配网站特征? 那你还不如用 TLS 浏览器指纹匹配,更靠谱一点。
thevita
2024-03-06 17:39:38 +08:00
你需要个 DPI, 比如 suricata, 给你解析到协议(会重组 tcp ,不用你自己“根据一段特征流量从当日流量匹配出特征流量出现的时间点”, 把各种你可能需要的内容提取出来,也能自己加些检测规则)

产生的数据流,要可用,可后面接写时序分析什么的,自由发挥
kkocdko
2024-03-06 17:43:14 +08:00
这种问题你应该去问代理协议的开发者相关的社区,在这里你只能获得上边几楼的那种质量的回答。

如果只是想拿来用,可以 OpenGFW ,由 hysteria 团队开发的 GFW 实现。

一般来说是 tls sni ,tls 指纹,dns 查询的 re-mapping 等。如果是你个人做着玩,我建议你选择类似 fakeip 的思路,然后劫持 dns ,弄一个比较大的地址池,这样的话比较不容易跟丢。
kkocdko
2024-03-06 17:45:22 +08:00
13 楼的回答也不错,dpi 的话考虑到楼主刚入门不一定能玩得来。
czfy
2024-03-06 17:58:17 +08:00
这题目让我想到这个帖子
🧱的测试 IP 和最近的新研究 https://v2ex.com/t/1021128
rev1si0n
2024-03-06 18:03:47 +08:00
@tool2d 确实网速是个因素,以及由于其他不需要的掺杂流量的影响,所以需要再对这个子集的流量进行时间上的伸缩(举个例子就像橡皮筋,橡皮筋上有 N 个不同间隔和大小的点,我可以拉伸或者缩短,就是每个包发送的时间变大或者变小再拿过去和当日流量匹配,如果包大小,间隔,协议等都能模糊匹配上,那就认定匹配成功了。当然这样做也不太现实),指纹的话,服务器 tls 指纹倒是可以引用一下,但是精细度就没法和直接流量级的比了(虽然能不能实现还是个问题)。
@thevita 多谢多谢,我看看,除了 GFW 里听说过还没了解过这个。

@kkocdko 今天至少没白问,这里开始涉及到盲区了,个人研究下是不是有可能,劫持只能对自己做,但是是想这个是可以做到通用的,指纹确实可以做到一些,但是精细度不够,或许也可以试一下指纹配合 TCP 特征。
liuhan907
2024-03-06 18:20:22 +08:00
@rev1si0n 你不解出来 https 流量怎么匹配 baidu 访问?
fano
2024-03-06 18:40:48 +08:00
你研究的问题是 Encrypted Traffic Fingerprinting / Website Fingerpinting ,可以 Google Scholar 一下研究现状
fano
2024-03-06 18:42:37 +08:00
@rev1si0n "像橡皮筋,橡皮筋上有 N 个不同间隔和大小的点,我可以拉伸或者缩短" Google 一下 Dynamic time warping 算法

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

https://tanronggui.xyz/t/1021138

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

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

© 2021 V2EX