且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

我的网络开发之旅——TCP/IP协议分析

更新时间:2022-10-04 17:59:01

之前在当地的一期技术沙龙做了一个《网络开发那些事》的技术分享,讲述了自己职业生涯从事的与网络相关的开发工作。在接触这类开发之前一直在从事业务系统或者单机系统的开发,说真的那时感觉自己对程序员这个职业既没有兴趣也没有多大能力,但是接触了网络相关的开发之后,慢慢的激发出了自己对这个行业的热情和潜力,使自己找到了方向。到底这类开发工作有什么神奇的地方?来吧,咱一起来看看。


网络开发究竟有些什么?

从招聘网站上截取典型的几段:

  • 熟悉Socket编程,熟悉Tcp/Ip协议栈;

  • 熟悉TCP/IP协议、UDP协议,有相关的协议开发经验;

  • 熟悉网络编程/多线程编程技术;

我们提取出其中的几个关键词:TCP/IP、Socket、协议、多线程,其实做网络相关的开发也就是以这几个关键词为主线。

我做的第一份与网络有关的工作是与安全有关的:核心是基于TCP/IP 协议的分析,相关的工作与socket编程关系不大,但必须要求熟悉TCP/IP协议的原理,今天这篇文章我就以此为专题。

想必有些朋友曾经遇到过这样的情形:

  • 在公司不敢上无关网站,无聊!

  • 在公司不敢下电影,浪费大好带宽!

  • 在公司甚至都不敢发某些邮件,郁闷了吧!

其实这些都是“基于TCP/IP 协议的分析”惹的祸,这些结果都可以通过协议分析之后很直观的展现出来。大家可以看这么两幅图

我的网络开发之旅——TCP/IP协议分析

我的网络开发之旅——TCP/IP协议分析

正是TCP/IP协议栈这种良好的分层设计为我们进行协议分析提供了极大的便利,那么我们该如何动手呢?


我们需要站在“巨人"的肩膀之上——pcap,我们截取***上的定义来说明一下他:

In the field of computer network administration, pcap (packet capture) consists of an application programming interface (API) for capturing network traffic. Unix-like systems implement pcap in the libpcap library; Windows uses a port of libpcap known as WinPcap.

所以我们可以利用pcap库来对抓取的网络数据进行剥茧抽丝!

其实还有许多其他的”巨人“供我们继续踩:

  • snort的代码架构清晰,一些数据结构设计的非常巧妙;

  • tcpdump的代码短小精悍,使用方法为大家所熟知;

  • wireshark对各协议的分析最为全面。

从其中我们还可以学习到做协议分析在架构上一定要采用模块化设计,引入插件机制。


只是这么简单吗?当海量的网络数据”喷涌而来“时你会面临下面的困境

  • 作为入侵检测系统:海量数据的实时监测会成为难点(匹配算法——KMP算法)

  • 作为审计系统:大数据存储,挖掘会成为难点(分布式文件系统)


书籍推荐:

做好协议分析我认为只需读好一本书籍就好《TCP/IP详解 卷1:协议》

tip:我们的网络数据有多不安全——MSN消息是明文传输的(逝者已逝,不多说坏话了);曾经的有些邮箱也是明文,我曾经在办公网络中抓取到很多人的邮箱密码;另外现在用假wifi对手机钓个鱼的现象也时有发生......

我工作中利用网络协议分析来干什么?——”抓木马“,因为木马除了本地行为和特征外其实还有很突出的网络行为

  • 反向链接是木马最突出的一个行为特征,主要是为了应付各级防火墙的外出松内进紧的防控策略,但是我们可以利用这一特征来定位可疑的程序。

  • 端口复用:杀毒软件的端口扫描工具总是可以定位某些可疑端口,躲在某些知名端口的数据通道里干坏事就成为某些木马的生存之道。

  • 无端口技术:就如金庸笔下的风清扬一样,只闻其名未见其踪,从未抓到过。

以上各种行为再加上一些应用层协议的分析工作只能确定程序可疑,得靠上层的各种加权分析或者人为干预才能完全定性。但我一很牛的哥们(火星人)专门做木马样本的逆向工作,找出特征值把网络数据用匹配算法一比对一抓一个准。

正是这份与我们现实生活有很多交集的工作勾起了我对开发的兴趣,我记得我曾通过协议分析看哪个同事上***网站,通过木马植入做同事的恶作剧,还被亲戚要求帮忙监控孩子的网上行为......

本文转自永远的朋友博客51CTO博客,原文链接http://blog.51cto.com/yaocoder/1553513如需转载请自行联系原作者

yaocoder