求助! wireshark抓取分析http数据包 看不懂?

人见人厌 2013-07-08 10:49:53
最近有个任务,就是基于libpcap库写个抓包程序,来获取我在论坛上发帖回帖的内容。本来觉得应该挺简单的,可是在我分析http数据包时感觉有些凌乱了,看不懂呀。


如下图,我在CSDN论坛上回了个帖子,应该是post的提交方式吧,肯定是下图第一个数据包。并且长度为 930字节。



双击数据包可以看得到详情。 第一个是物理层的封装的帧头吧 14个字节。


接下来是IP包头,20个字节。


接下来是TCP的包头信息吧 20个字节。并且红线划出的部分显示TCP的内容为876个字节。按照我的理解就是http数据包封装在TCP数据包里,那么HTTP协议(包括包头和正文信息)总共应该是 876个字节?


可是接下来的Reassembled 3 TCP segments(3796bytes) ,这个我非常难以理解啊,TCP分成三段? 第一张图片明明说了总长度为930字节,这怎么又3796字节了呢?


上图中的3796bytes 又分成了下面两段,hyper transfer protocol 和 line based test data。



而具体的HTTP协议告诉我的提交的正文内容为 2026个字节 。



我的疑问就在上面,http协议好复杂啊 !求高手帮我解释解释呀,这到底什么意思呢? 到底哪一部分才是我想要的论坛上的回帖内容呢? 有没有什么好的方法能够快速获取呢?
还有post提交内容时的encoding方式为 gzip, 即使我得到了我想要的内容,是不是还有进行gzip解码才能得到我要得结果呀?




...全文
54887 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jlzw2014 2015-04-12
  • 打赏
  • 举报
回复
我也是遇到了同样的问题,希望有人能帮我解决下,要不真的不知如何是好!
qq_18294385 2014-07-23
  • 打赏
  • 举报
回复
因为数据分段的原因 ,你看到的876是这个数据包的数据长度,3796是整个数据的长度,因为数据过大,所以传输时需要分段。
a007nankeyimeng 2014-05-14
  • 打赏
  • 举报
回复
时间过了这么久了 也许你已经得到答案了,今天无意中看到了你这个帖子,我是这样理解的:
你的这个http数据包是由3个tcp分段来承载的,分别是段 #28 #29 #30,其中你标记3796字节的时候,这个分段是#30,
也就是说这个时候此次会话的http数据你已经全部收到了,在#30段的时候只是把之前的数据也加进来进行了显示,
这个是wireshark做的,实际上这个分段还是876字节的,
蓝天630902 2013-07-22
  • 打赏
  • 举报
回复
自己去修改一下ExcelVba的:


Sub ExcelVba_获取论坛上发帖回帖的内容()
    Set hf = CreateObject("htmlfile")
    Set oDoc = CreateObject("htmlfile")
    With CreateObject("Microsoft.XMLHTTP")
        .Open "GET", "http://my.csdn.net/hu83369766", False
        .send
        hf.body.innerhtml = Split(Split(.responsetext, "个人动态</h2>")(1), "</div>")(0)
        Set r = hf.all.tags("a")
        mm = r(1).href
        k = 0
        For p = 1 To r.Length - 1 Step 2
            .Open "GET", r(p).href, False
            .send
            oDoc.body.innerhtml = .responsetext
            Set s = oDoc.all.tags("table")
            For i = 1 To s.Length - 1
                If s(i).all.tags("a")(0).href Like "*hu83369766" Then
                    k = k + 1
                    Set t = s(i).all.tags("div")
                    For j = 0 To t.Length - 1
                        If t(j).classname = "post_body" Then
                            Cells(k, 1) = r(p).href
                            Cells(k, 2) = r(p).innertext
                            Cells(k, 3) = t(j).innertext
                        End If
                    Next j
                End If
            Next i
        Next p
    End With
End Sub

BeanJoy 2013-07-08
  • 打赏
  • 举报
回复
之前用smsniff分析过HTTP数据包,encoding也为gzip,后面数据确实需要用用gzip编码才能看到HTML的内容。
ArcRain 2013-07-08
  • 打赏
  • 举报
回复
你就直接用Chrome浏览器的开发者工具,看网络请求不就行了... wireshark能从各个层面分析网卡所有出入的数据流,因此最好筛选下。
人见人厌 2013-07-08
  • 打赏
  • 举报
回复
求助啊! 顶顶!!

18,363

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧