专栏名称: 51CTO技术栈
有趣 | 有料 | 有内涵,为您提供最优质的内容,愿我们一起悦享技术,成就人生。
目录
相关文章推荐
51好读  ›  专栏  ›  51CTO技术栈

公司悄悄部署了一个东西,盯着你···

51CTO技术栈  · 公众号  · 程序员  · 2021-03-01 18:05

正文

送福利啦

关注 鸿蒙技术社区 ,回复 【鸿蒙】 价值 399元 的鸿蒙 开发板套件 (数量有限,先到先得) ,还可以 免费下载 鸿蒙 入门资料

👇 点击 立刻关注 👇

专注开源技术,共建鸿蒙生态


我是一个网络监控软件,我被开发出来的使命就是监控网络中进进出出的所有通信流量。


图片来自 Pexels


这个网络中所有人的上网内容我都看的清清楚楚,是不是很可怕?

我被一家公司老板买来运行在一个配置极高的 Linux 服务器上,这台服务器上的网卡可不得了,公司进出的网络数据包都得流经它,它源源不断的把数据包抓上来交给我来分析。


你们应该也知道,网络通信是分层的,最常见的就是那个 TCP/IP 协议体系了。


拿到数据包后,我就得按照这个协议规范,一层层的脱去协议的外壳,拿到它们的负载数据。

TCP 会话重组


我重点要照顾的是 TCP 协议,因为好多应用都要使用 TCP 来传输,像上网冲浪 HTTP、发邮件 SMTP、微信聊天等等。


我想要掌控网络中的通信,第一个就要拿 TCP 开刀,得想办法把 TCP 传输的一个个数据包给重组起来,形成一个完整的会话,这样我才好知道应用层传了什么东西,这个步骤叫做会话重组。


不过这个 TCP 协议有点复杂,抛开我们抓到的包本来就存在乱序的情况不说,它本身还有三次握手、四次挥手、超时重传、延迟回复等很多机制。


有时候还会遇到时间跨度很久的长连接,这无疑都给我想要重组 TCP 会话造成了很大的难度。


而我重组 TCP 会话的唯一线索就是数据包包头中的序列号 SEQ 和确认号 ACK。


不过我还是死磕 RFC 规范,把这些问题都攻克了,能够成功重组出一个个的 TCP 会话数据,成功率还蛮高的。


应用协议识别


TCP 会话重组出来了,我就可以拿到里面传输的数据了。接下来要做的一件事就是识别应用层到底是什么应用在传输的呢?


用我们的行话说,那就是做应用协议识别,这个时候我就得看一下端口了。


我根据三次握手数据包的方向,就可以确定出谁是客户端,谁是服务端。


再看一下服务端的端口号(这个在 TCP 包头里面就可以看到),就能知道这是一个什么服务了。


像常见的有下面这些:

  • 22: SSH 远程登陆

  • 25: 邮件服务

  • 53: 域名解析服务

  • 80: HTTP Web 服务

  • 3306: MySQL 数据库服务

  • 3389: 远程桌面连接服务

  • ······


最常见的就是 80 端口的 Web 服务了,人类每天上网都在用到。


有时候 Web 服务不走 80 端口,换成了别的,不过这难不倒我,我可以通过分析 TCP 的负载数据特征,看看有没有 HTTP 协议的特征出现,因为 HTTP 协议的特征实在是太明显啦!


到了后来,根据端口的经验出错的概率越来越大了,我就统一根据内容来进行识别判断,不再相信端口。


每个应用都有它们各自的协议特征,这个识别我可是下了点功夫,轻易不会透露。







请到「今天看啥」查看全文