• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    winsock的buffer簡單解析

    發布: 2008-9-18 15:04 | 作者: sunshinelius | 來源: 51testing論壇 | 查看: 31次 | 進入軟件測試論壇討論

    領測軟件測試網

    為了理解socket機制和buffer原理,我錄制了一個從IE訪問web站點的winsock腳本,并對此腳本的數據簡單地解析了一下。
    在用VU訪問web的同時,我也在server端抓包,把兩個包進行對比。
    好,我啟動VU,選擇winsock協議,然后啟動IE,輸入URL,回車!
    在server上,我抓到的數據如下:
    IE -> web       TCP D=8888 S=15105 Syn Seq=2724368295 Len=0 Win=65535 Options=<mss 1332,nop,nop,sackOK>

               0: 0003 ba50 1f65 0008 74eb 7f05 0800 4500    ...P.e..t.....E.
              16: 0030 f9e3 4000 8006 8651 ac1c 10d4 ac1c    .0..@....Q......
              32: 1186 3b01 22b8 a262 8fa7 0000 0000 7002    ..;."..b......p.
              48: ffff 7949 0000 0204 0534 0101 0402         ..yI.....4....

          web -> IE TCP D=15105 S=8888 Syn Ack=2724368296 Seq=837817715 Len=0 Win=25308 Options=<nop,nop,sackOK,mss 1460>

               0: 0008 74eb 7f05 0003 ba50 1f65 0800 4500    ..t......P.e..E.
              16: 0030 cbac 4000 4006 f488 ac1c 1186 ac1c    .0..@.@.........
              32: 10d4 22b8 3b01 31f0 1573 a262 8fa8 7012    ..".;.1..s.b..p.
              48: 62dc 7ab5 0000 0101 0402 0204 05b4         b.z...........

    IE -> web       TCP D=8888 S=15105     Ack=837817716 Seq=2724368296 Len=0 Win=65535

               0: 0003 ba50 1f65 0008 74eb 7f05 0800 4500    ...P.e..t.....E.
              16: 0028 f9e5 4000 8006 8657 ac1c 10d4 ac1c    .(..@....W......
              32: 1186 3b01 22b8 a262 8fa8 31f0 1574 5010    ..;."..b..1..tP.
              48: ffff 5e19 0000 0000 0000 0000              ..^.........
    呵呵,可以看到在TCP層上,我們看到了server和client端的三次交互,但奇怪的是在winsock腳本中卻沒生成對應的函數和buffer。后來想想,這是TCP的三次握手,只是具有TCP的頭和尾,其中并沒有數據,可能lr將其忽略了。
    那各位就要問了憑什么你說那些十六進制數據就是TCP的頭尾,而不是真正有意義的數據呢,別著急,咱們往下看下一個真正的請求是什么樣子的。
    在server上,下一個數據包如下(數據包太大了,我們只看整個數據包的前部):
    IE -> web       TCP D=8888 S=15209     Ack=2865793660 Seq=3555244501 Len=401 Win=65535

               0: 0003 ba50 1f65 0008 74eb 7f05 0800 4500    ...P.e..t.....E.
              16: 01b9 02e9 4000 8006 7bc3 ac1c 10d4 ac1c    ....@...{.......
              32: 1186 3b69 22b8 d3e8 b9d5 aad0 8a7c 5018    ..;i"........|P.
              48: ffff d68c 0000 4745 5420 2f70 6f72 7461    ......GET /porta
              64: 6c38 3030 302f 6164 6d69 6e2e 6a73 7020    l8000/admin.jsp
              ................................................................
    這是一個http的get請求,各位注意看,這個數據包的offset從0-56是不是和第一個請求很象啊,沒錯,這支持了我們剛才的判斷,那只是tcp的頭,真正的數據是從get開始,即從57位開始。
    同時,我們VU中生成的send buffer如下:
    send  buf0
            "GET /portal8000/admin.jsp HTTP/1.1\r\n"
            "Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/v"
            "nd.ms-powerpoint, application/vnd.ms-excel, application/msword, applicatio"
            "n/x-shockwave-flash, */*\r\n"
            "Accept-Language: zh-cn,en;q=0.5\r\n"
            "Accept-Encoding: gzip, deflate\r\n"
            "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; (R1 1.3))\r"
            "\n"
            "Host: 172.28.17.134:8888\r\n"
            "Connection: Keep-Alive\r\n"
            "\r\n"
    在buffer0里已經沒有了0-56一些看不懂的數據,直接是get請求。這說明lr的winsock捕獲了tcp傳輸中的數據部分,而略去了tcp的頭。我們明白一點了。
    但是我們看到server端抓到的數據其實都是十六進制的數據,lr直接顯示的是文本,那lr是怎樣將其轉換為文本的呢(我用的是snoop命令在server端抓包,它也有自動將其轉換文本的功能,就是數據的右側文本)?
    我們知道在編碼過程中,一個英文字母用一個字節來表示,一個中文漢字則用兩個字節來表示。(有時lr不能正確地顯示中文,就是因為它不支持中文,無法知道怎樣去合并兩個字節成為中文漢字)
    那么我們試著去解析下面的一行
    64: 6c38 3030 302f 6164 6d69 6e2e 6a73 7020    l8000/admin.jsp
    snoop命令給我們已經解析好了,“l8000/admin.jsp”, 按一個英文字母對應一個字節的規則的話,英文字母l應該對應6c,6c是十六進制,轉化十進制是108,而l的ascii碼正是108。這個字母對上了。
    往下就簡單了,38對應8,30對應0,依次a d m i n . j s p都能對應下去。解析完畢!

    如果都能這樣解析,那么lr中的send buffer和receive buffer都應該能夠解析出來,不會出現亂碼。我們也能很輕松地去參數化buffer了。

    但是很不幸,看起來,lr犯了一個錯誤,在receive buffer和send buffer中。lr不管三七二十一,都按照此規則解析。解析不出來就顯示大段的亂碼。讓使用者無所適從。

    例如我在下面請求中,試圖get一個圖片,server端返回一個圖片,圖片是二進制的,用十六進制在網絡傳輸。但是lr還是試圖去解析這個圖片,結果得到了一大批的亂碼,讓我們都判斷不出來這段buffer的含義了。

    還有一種亂碼的情況,前不久和QA_BAY聊了用lr錄制QQ的例子,結果錄下來,發現滿篇都是亂碼,暈啊。如果都能象http協議這樣透傳的話,最起碼能夠錄到登陸口令的英文字母啊。所以我只好懷疑在上層加密了數據,導致socket層全是亂碼,解析不出來。

    先說到這里。希望大家能看懂。

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/

    TAG: winsock Winsock 解析 buffer


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>