起因

近期,我在自己维护的系统中遇到了和F5有关的问题,所以有幸研究了一下F5插入的cookie和IP地址之间的关系。该系统前端由F5进行负载均衡,并通过cookie插入的方式来做会话保持,后端有50台应用服务器。


原理

当F5采用cookie会话保持的方式进行应用分发时,会在请求中插入一条自己的cookie,用于判断分发到后端的哪台应用。当下次再次处理时,如果看到请求中带有自己插入的cookie,会按该cookie中包含的IP进行转发,进而保证用户能够分发到同一台应用。例如下面这条请求,F5插入了自己的cookie:BIGipServerLearning_tcp80_ap_pool=841232395.10531.0000

61.138.232.21 - - [02/Aug/2016:14:00:14 +0800] 193 "GET /asset/pickers/search.png HTTP/1.1" 304 - "http://xxxx.com/learning/catalog/browseForLearning.rdf" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3)" "dsloginTypeTips=3; cookieidTagFlag=1; tagInfoId=%26_000050%3D07; lastUpdateTime=2016-07-30%2015%3A21%3A55; halfLoginCustName=9AF10A20E294F15F258B2D760A35A5761156BBB5E8776CE8; halfLoginCustId=A84CABE8981F1D30425E8DA362BB9EE6; halfLoginShowName=9AF10A20E294F15F425E8DA362BB9EE6; tagInfoCustId=36356287; cityCodeFlag=0; cityName=%E7%9F%B3%E6%B2%B3%E5%AD%90; cityCode=659001; BIGipServerLearning_tcp80_ap_pool=841232395.10531.0000" "-"

其中该条cookie中:841232395.10531.0000,841232395所代表的是IP,10531为端口。当后端应用IP地址不变的情况下,该值是固定的,说明F5有一个算法来维系这种对应关系。


算法分析之IP转换

下面我们来还原一下这个算法:

拿出值:841232395

第一步:将该10进制值转换为16进制(得到一个8位的值,如果不够8位,前面补0)

    3224300B

第二步:将这个8位的值分为四段

    32 24 30 0B

第三步:按顺序将每段数字分别转换成10进制,分别得到4个数字

    32 → 50

    24 → 36

    30 → 48

    0B → 11

第四步:倒置顺序,分别做为IP地址的4段,即11.48.36.50

下面,再来转换一个:18875658

18875658->转换成16进制->120050A->不够8位,前面补0->0120050A->分成4段->01 20 05 0A->分别转换成10进制->1 32 5 10->倒置顺序->得到IP地址:10.5.32.1

代表端口的第二个字段:10531,是如何转换的呢?


算法分析之端口转换

下面将端口的算法进行还原:

第一步,将该10进制数字(10531),转换为16进制

    2923

第二步,将得到的数字分成两段

    29 23

第三步,倒置顺序

    23 29

第四步,将倒置后的4位数合在一起,转换为10进制

    9001

说明后端应用的端口为9001

转换顺序即简化为:

10531->转换成16进制->2923->分成两段->29 23->倒置顺序->2329->转换成10进制->9001


应用价值

当你知道这个转换关系时,就可以通过请求中得到的cookie来判断F5分发到了哪台应用上。


自动化转换脚本

本人将转换步骤写成了shell脚本,运行脚本即可得到转换后的结果。

请移至:http://down.51cto.com/data/2236815


下一篇将介绍如何将IP地址转换为F5插入cookie所用到的数字串。

链接:http://showing.blog.51cto.com/11976328/1841574