以前在当地的一期技术沙龙作了一个《网络开发那些事》的技术分享,讲述了本身职业生涯从事的与网络相关的开发工做。在接触这类开发以前一直在从事业务系统或者单机系统的开发,说真的那时感受本身对程序员这个职业既没有兴趣也没有多大能力,可是接触了网络相关的开发以后,慢慢的激发出了本身对这个行业的热情和潜力,使本身找到了方向。到底这类开发工做有什么神奇的地方?来吧,咱一块儿来看看。html
从招聘网站上截取典型的几段:程序员
熟悉Socket编程,熟悉Tcp/Ip协议栈;算法
熟悉TCP/IP协议、UDP协议,有相关的协议开发经验;编程
熟悉网络编程/多线程编程技术;安全
咱们提取出其中的几个关键词:TCP/IP、Socket、协议、多线程,其实作网络相关的开发也就是以这几个关键词为主线。网络
我作的第一份与网络有关的工做是与安全有关的:核心是基于TCP/IP 协议的分析,相关的工做与socket编程关系不大,但必需要求熟悉TCP/IP协议的原理,今天这篇文章我就以此为专题。数据结构
想必有些朋友曾经遇到过这样的情形:多线程
在公司不敢上无关网站,无聊!架构
在公司不敢下电影,浪费大好带宽!app
在公司甚至都不敢发某些邮件,郁闷了吧!
其实这些都是“基于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库来对抓取的网络数据进行剥茧抽丝!
其实还有许多其余的”巨人“供咱们继续踩:
从其中咱们还能够学习到作协议分析在架构上必定要采用模块化设计,引入插件机制。
只是这么简单吗?当海量的网络数据”喷涌而来“时你会面临下面的困境
做为***检测系统:海量数据的实时监测会成为难点(匹配算法——KMP算法)
做为审计系统:大数据存储,挖掘会成为难点(分布式文件系统)
书籍推荐:
作好协议分析我认为只需读好一本书籍就好《TCP/IP详解 卷1:协议》
tip:咱们的网络数据有多不安全——MSN消息是明文传输的(逝者已逝,很少说坏话了);曾经的有些邮箱也是明文,我曾经在办公网络中抓取到不少人的邮箱密码;另外如今用假wifi对手机钓个鱼的现象也时有发生......
我工做中利用网络协议分析来干什么?——”抓***“,由于***除了本地行为和特征外其实还有很突出的网络行为
反向连接是***最突出的一个行为特征,主要是为了应付各级防火墙的外出松内进紧的防控策略,可是咱们能够利用这一特征来定位可疑的程序。
端口复用:杀毒软件的端口扫描工具老是能够定位某些可疑端口,躲在某些知名端口的数据通道里干坏事就成为某些***的生存之道。
无故口技术:就如金庸笔下的风清扬同样,只闻其名未见其踪,从未抓到过。
以上各类行为再加上一些应用层协议的分析工做只能肯定程序可疑,得靠上层的各类加权分析或者人为干预才能彻底定性。但我一很牛的哥们(火星人)专门作***样本的逆向工做,找出特征值把网络数据用匹配算法一比对一抓一个准。
正是这份与咱们现实生活有不少交集的工做勾起了我对开发的兴趣,我记得我曾经过协议分析看哪一个同事上***网站,经过***植入作同事的恶做剧,还被亲戚要求帮忙监控孩子的网上行为......