开发者社区> 问答> 正文

借助Wireshark帮助定位调用阿里云OSS开发过程问题

云存储时代已经来临,程序员向云端转型是必需的一步。很多程序员同学在论坛中也抱怨OSS用不起来,我看了很多问题,都是一些基本的问题,比如endpoint域名填写不正确、bucket填写错误、object名字填写错误、授权计算错误等等,这些问题原本应该比较容易处理的,由于种种原因,很多人只是把代码贴到论坛上,也讲不出问题的现象,想要帮忙也无从下手,在这里,给大家共享一下我自己的一些方法。


首先介绍下自己的情况,我所在的公司是个创业公司,产品主要解决数据传输过程中的互联网跨国加速和网络QoS保障,因此就要找有大量数据传输交换的领域。2014年12月份开始接触公有云服务,了解到阿里云OSS,于是想看看OSS是否有应用我们传输加速产品的机会。

我是个C/C++程序员,而阿里云OSS并没有C/C++ SDK,因此刚开始学习阿里云OSS 主要靠官方的Http API手册,而在此之前我没有接触WEB和Http协议,入门还是比较吃力。当然,由于我以前的通信行业研发背景,读RFC标准和官方接口文档觉得比较理所当然。我花了2天的时间,一边读接口文档,一边使用官方提供的python osscmd工具尝试走通了所有的接口,同时我使用Wireshark抓了每个OSS操作接口的http报文,观察了OSS Http报文各字段的值设置,这样子OSS入门工作基本完成。

回过头来看这段过程,评心而论,阿里云OSS的文档质量其实还基本合格,每个接口都有提供了实际的http报文样例和详细说明,并没有论坛里很多激烈言论说的那么不堪。当然,大家可能对阿里云期望比较高,也可能很多人对OSS没有深入了解的兴趣,只是为了完成某个任务集成OSS,希望有样例可以拷贝一下、修改一下就可以运行。OSS作为云存储,其技术体系与之前的文件系统存储有较大区别,要入门还是必须先搞清楚一些基本概念才好。

前面介绍了这么多,马上进入正题: 如何使用Wireshark工具协助定位阿里云OSS开发过程的问题

首先介绍Wireshark,这是一款Windows的开源报文抓取工具,百度一下就可以下载到,使用也全部是图形界面,这里就不再介绍具体使用方法。

然后介绍一下OSS Http接口,阿里云以前提供的是pdf文档,最近网站帮助改版,好像只有html在线版了,
链接地址: 阿里云OSS API手册文档  

阿里云OSS所有的操作,最后都体现为客户端与阿里云OSS之间的Http交互,我这里说的操作是指 PutObject/HeadObject等等这些操作,并不特指某个SDK的编程API。

下面是一个Wireshark报文抓取的例子,这个报文包中包含了两个操作,
操作1:通过GET BUCKET获取指定Bucket下面的所有Object列表,这个操作得到了阿里云OSS的成功响应;
操作2:通过HEAD OBJECT获取指定Object的属性信息,这个操作得到了403的失败响应;


操作1请求报文图解

  
操作1响应报文图解,可以看到返回的是200 OK,这次操作成功了。
]



操作2请求报文图解




操作2响应报文图解,从下文可以看到,这个HEAD OBJECT响应返回了错误码403 Forbidden。




上面抓包注解是我使用C++开发cloudfs过程中的一个实际问题定位抓包。
当时的问题现象是有很多文件(上千个)去做head object操作,只有这个名为 libc++-6.dll文件失败了,通过抓包发现OSS返回的是403 Forbidden,这个响应码一般是指对象不允许访问,大多数时候是OSS没有找到对应的名字的Object。根据这个思路提示,我发现这个“libc++-6.dll”跟其他的文件名不一样的地方是有一个“-”符号,最后百度查找“-”符号,又重新对照OSS API手册,发现object名字是需要UTF-8编码,并且进行URL转义的,修改之后,问题解决。


当然,如果大家用的是阿里云OSS官方已经提供的SDK如Python、Java、.Net等等,像这种问题都不需要大家考虑,SDK内部已经封装好。
但是如果大家在调用官方SDK时,碰到问题通过可以抓包来获取交互的过程和OSS的响应返回,对问题定位的思路调整是很有帮助的;即使自己没有什么想法了,把抓包信息贴在论坛里面,这样别人也可以有更多的信息帮助你。


一点点使用OSS的方法分享,希望能够帮助到想使用OSS云存储却还没有找到方法的程序员同行们。


下面附件是文中用作样例描述的wireshark抓包文件,供对比参考。

展开
收起
云语科技 2015-04-12 14:18:02 13647 0
6 条回答
写回答
取消 提交回答
  • Re借助Wireshark帮助定位调用阿里云OSS开发过程问题
    和楼主的行业背景有点像,也是从通信行业转到移动互联网【28公司】,最近半年都在用C++写HTTP服务端程序,真心觉得 在Web世界里,C++是个中年怪叔叔,比如苹果推送和小米推送,都只提供了Java、php接口,想用C++开发,自己写JNI去吧。
    2015-06-08 16:53:21
    赞同 展开评论 打赏
  • Re借助Wireshark帮助定位调用阿里云OSS开发过程问题
    虽然不知道是什么,但是感觉很厉害的样子,,大神,,多指教。
    2015-04-14 22:27:06
    赞同 展开评论 打赏
  • Re借助Wireshark帮助定位调用阿里云OSS开发过程问题
    从抓出来的包来分析OSS,低层的调试应该很有用,赞一个
    2015-04-14 10:52:53
    赞同 展开评论 打赏
  • Re借助Wireshark帮助定位调用阿里云OSS开发过程问题
    赞一个,看不懂,求指导。
    2015-04-13 13:52:10
    赞同 展开评论 打赏
  • LT是个伪程序员
    赞一个,从网络数据包层玩编程的都是大神。
    2015-04-13 11:43:29
    赞同 展开评论 打赏
  • 赞原创,真实,适用就是最好的
    2015-04-12 15:58:21
    赞同 展开评论 打赏
滑动查看更多
问答排行榜
最热
最新

相关电子书

更多
阿里云云原生 Serverless 技术实践营 PPT 演讲 立即下载
阿里云产品十月刊 立即下载
基于阿里云构建博学谷平台实时湖仓 立即下载