Исключение некорректного пакета HTTP - PullRequest
1 голос
/ 27 февраля 2012

Я разрабатываю прокси в node.js.Я разработал аддон, который анализирует пакеты и почти всегда меняет длину пакетов.Вот код:

var http = require('http');
var eamorr=require('./Eamorr_addon/out/Release/Eamorr_addon');

http.createServer(function(request,response){
    var proxy=http.createClient(80,request.headers['host']);
    var proxy_request=proxy.request(request.method,request.url,request.headers);
    proxy_request.addListener('response',function(proxy_response){
        proxy_response.addListener('data',function(chunk){
            var x=eamorr.analyse(chunk);
            if(proxy_response.headers['content-length'] || proxy_response.headers['Content-Length']){
                proxy_response.headers['content-length']=x.length;
            }
            response.writeHead(proxy_response.statusCode,proxy_response.headers);
            response.write(x,'binary');
        });
        proxy_response.addListener('end',function(){
            response.end();
        });

    });
    request.addListener('data',function(chunk){
        proxy_request.write(chunk,'binary');
    });
    request.addListener('end',function(){
        proxy_request.end();
    });
}).listen(10002);

Проблема в том, что я продолжаю получать искаженные http-пакеты на принимающей стороне.Он отлично работает для пакетов с определенной длиной содержимого, но не для фрагментированных ответов.

Вот дамп из Wireshark, который по некоторым причинам обнаруживается как некорректный пакет:

0000  48 54 54 50 2f 31 2e 31  20 32 30 30 20 4f 4b 0d   HTTP/1.1  200 OK.
0010  0a 64 61 74 65 3a 20 4d  6f 6e 2c 20 32 37 20 46   .date: M on, 27 F
0020  65 62 20 32 30 31 32 20  30 38 3a 32 31 3a 33 38   eb 2012  08:21:38
0030  20 47 4d 54 0d 0a 65 78  70 69 72 65 73 3a 20 2d    GMT..ex pires: -
0040  31 0d 0a 63 61 63 68 65  2d 63 6f 6e 74 72 6f 6c   1..cache -control
0050  3a 20 70 72 69 76 61 74  65 2c 20 6d 61 78 2d 61   : privat e, max-a
0060  67 65 3d 30 0d 0a 63 6f  6e 74 65 6e 74 2d 74 79   ge=0..co ntent-ty
0070  70 65 3a 20 74 65 78 74  2f 68 74 6d 6c 3b 20 63   pe: text /html; c
0080  68 61 72 73 65 74 3d 55  54 46 2d 38 0d 0a 73 65   harset=U TF-8..se
0090  72 76 65 72 3a 20 67 77  73 0d 0a 78 2d 78 73 73   rver: gw s..x-xss
00a0  2d 70 72 6f 74 65 63 74  69 6f 6e 3a 20 31 3b 20   -protect ion: 1; 
00b0  6d 6f 64 65 3d 62 6c 6f  63 6b 0d 0a 78 2d 66 72   mode=blo ck..x-fr
00c0  61 6d 65 2d 6f 70 74 69  6f 6e 73 3a 20 53 41 4d   ame-opti ons: SAM
00d0  45 4f 52 49 47 49 4e 0d  0a 74 72 61 6e 73 66 65   EORIGIN. .transfe
00e0  72 2d 65 6e 63 6f 64 69  6e 67 3a 20 63 68 75 6e   r-encodi ng: chun
00f0  6b 65 64 0d 0a 43 6f 6e  6e 65 63 74 69 6f 6e 3a   ked..Con nection:
0100  20 6b 65 65 70 2d 61 6c  69 76 65 0d 0a 0d 0a 34    keep-al ive....4
0110  39 65 0d 0a 0a fd 09 08  00 11 00 00 00 00 00 00   9e...... ........
0120  00 00 1a fd 09 3c 21 64  6f 63 74 79 70 65 20 68   .....<!d octype h
0130  74 6d 6c 3e 3c 68 74 6d  6c 20 69 74 65 6d 73 63   tml><htm l itemsc
0140  6f 70 65 20 69 74 65 6d  74 79 70 65 3d 22 68 74   ope item type="ht
0150  74 70 3a 2f 2f 73 63 68  65 6d 61 2e 6f 72 67 2f   tp://sch ema.org/
0160  57 65 62 50 61 67 65 22  3e 3c 68 65 61 64 3e 3c   WebPage" ><head><
0170  6d 65 74 61 20 68 74 74  70 2d 65 71 75 69 76 3d   meta htt p-equiv=
0180  22 63 6f 6e 74 65 6e 74  2d 74 79 70 65 22 20 63   "content -type" c
0190  6f 6e 74 65 6e 74 3d 22  74 65 78 74 2f 68 74 6d   ontent=" text/htm
01a0  6c 3b 20 63 68 61 72 73  65 74 3d 55 54 46 2d 38   l; chars et=UTF-8
01b0  22 3e 3c 6d 65 74 61 20  69 74 65 6d 70 72 6f 70   "><meta  itemprop
01c0  3d 22 69 6d 61 67 65 22  20 63 6f 6e 74 65 6e 74   ="image"  content
01d0  3d 22 2f 69 6d 61 67 65  73 2f 67 6f 6f 67 6c 65   ="/image s/google
01e0  5f 66 61 76 69 63 6f 6e  5f 31 32 38 2e 70 6e 67   _favicon _128.png
01f0  22 3e 3c 74 69 74 6c 65  3e 47 6f 6f 67 6c 65 3c   "><title >Google<
0200  2f 74 69 74 6c 65 3e 3c  73 63 72 69 70 74 3e 77   /title>< script>w
0210  69 6e 64 6f 77 2e 67 6f  6f 67 6c 65 3d 7b 6b 45   indow.go ogle={kE
0220  49 3a 22 45 6a 31 4c 54  5f 72 38 4e 64 43 32 68   I:"Ej1LT _r8NdC2h
0230  41 66 58 5f 4b 32 4c 44  67 22 2c 67 65 74 45 49   AfX_K2LD g",getEI
0240  3a 66 75 6e 63 74 69 6f  6e 28 61 29 7b 76 61 72   :functio n(a){var
0250  20 64 3b 77 68 69 6c 65  28 61 26 26 21 28 61 2e    d;while (a&&!(a.
0260  67 65 74 41 74 74 72 69  62 75 74 65 26 26 28 64   getAttri bute&&(d
0270  3d 61 2e 67 65 74 41 74  74 72 69 62 75 74 65 28   =a.getAt tribute(
0280  22 65 69 64 22 29 29 29  29 61 3d 61 2e 70 61 72   "eid"))) )a=a.par
0290  65 6e 74 4e 6f 64 65 3b  72 65 74 75 72 6e 20 64   entNode; return d
02a0  7c 7c 67 6f 6f 67 6c 65  2e 6b 45 49 7d 2c 68 74   ||google .kEI},ht
02b0  74 70 73 3a 66 75 6e 63  74 69 6f 6e 28 29 7b 72   tps:func tion(){r
02c0  65 74 75 72 6e 20 77 69  6e 64 6f 77 2e 6c 6f 63   eturn wi ndow.loc
02d0  61 74 69 6f 6e 2e 70 72  6f 74 6f 63 6f 6c 3d 3d   ation.pr otocol==
02e0  22 68 74 74 70 73 3a 22  7d 2c 6b 45 58 50 49 3a   "https:" },kEXPI:
02f0  22 33 31 32 31 35 2c 33  33 35 35 31 2c 33 34 33   "31215,3 3551,343
0300  32 34 2c 33 34 39 30 34  2c 33 35 30 35 35 2c 33   24,34904 ,35055,3
0310  35 32 31 33 2c 33 36 36  30 34 2c 33 36 36 38 33   5213,366 04,36683
0320  2c 33 36 39 34 32 2c 33  37 30 31 37 2c 33 37 31   ,36942,3 7017,371
0330  30 32 22 2c 6b 43 53 49  3a 7b 65 3a 22 33 31 32   02",kCSI :{e:"312
0340  31 35 2c 33 33 35 35 31  2c 33 34 33 32 34 2c 33   15,33551 ,34324,3
0350  34 39 30 34 2c 33 35 30  35 35 2c 33 35 32 31 33   4904,350 55,35213
0360  2c 33 36 36 30 34 2c 33  36 36 38 33 2c 33 36 39   ,36604,3 6683,369
0370  34 32 2c 33 37 30 31 37  2c 33 37 31 30 32 22 2c   42,37017 ,37102",
0380  65 69 3a 22 45 6a 31 4c  54 5f 72 38 4e 64 43 32   ei:"Ej1L T_r8NdC2
0390  68 41 66 58 5f 4b 32 4c  44 67 22 7d 2c 61 75 74   hAfX_K2L Dg"},aut
03a0  68 75 73 65 72 3a 30 2c  0a 6d 6c 3a 66 75 6e 63   huser:0, .ml:func
03b0  74 69 6f 6e 28 29 7b 7d  2c 70 61 67 65 53 74 61   tion(){} ,pageSta
03c0  74 65 3a 22 23 22 2c 6b  48 4c 3a 22 65 6e 22 2c   te:"#",k HL:"en",
03d0  74 69 6d 65 3a 66 75 6e  63 74 69 6f 6e 28 29 7b   time:fun ction(){
03e0  72 65 74 75 72 6e 28 6e  65 77 20 44 61 74 65 29   return(n ew Date)
03f0  2e 67 65 74 54 69 6d 65  28 29 7d 2c 6c 6f 67 3a   .getTime ()},log:
0400  66 75 6e 63 74 69 6f 6e  28 61 2c 64 2c 66 2c 68   function (a,d,f,h
0410  29 7b 76 61 72 20 65 3d  6e 65 77 20 49 6d 61 67   ){var e= new Imag
0420  65 2c 67 3d 67 6f 6f 67  6c 65 2c 6b 3d 67 2e 6c   e,g=goog le,k=g.l
0430  63 2c 69 3d 67 2e 6c 69  2c 6d 3d 22 22 3b 65 2e   c,i=g.li ,m="";e.
0440  6f 6e 65 72 72 6f 72 3d  28 65 2e 6f 6e 6c 6f 61   onerror= (e.onloa
0450  64 3d 28 65 2e 6f 6e 61  62 6f 72 74 3d 66 75 6e   d=(e.ona bort=fun
0460  63 74 69 6f 6e 28 29 7b  64 65 6c 65 74 65 20 6b   ction(){ delete k
0470  5b 69 5d 7d 29 29 3b 6b  5b 69 5d 3d 65 3b 69 66   [i]}));k [i]=e;if
0480  28 21 66 26 26 64 2e 73  65 61 72 63 68 28 22 26   (!f&&d.s earch("&
0490  65 69 3d 22 29 3d 3d 2d  31 29 6d 3d 22 26 65 69   ei=")==- 1)m="&ei
04a0  3d 22 2b 67 6f 6f 67 6c  65 2e 67 65 74 45 49 28   ="+googl e.getEI(
04b0  68 29 3b 76 61 72 20 6a  3d 66 7c 7c 22 2f 67 65   h);var j =f||"/ge
04c0  6e 5f 32 30 34 3f 61 74  79 70 3d 69 26 63 74 3d   n_204?at yp=i&ct=
04d0  22 2b 61 2b 22 26 63 61  64 3d 22 2b 64 2b 6d 2b   "+a+"&ca d="+d+m+
04e0  22 26 7a 78 3d 22 2b 67  6f 6f 67 6c 65 2e 74 69   "&zx="+g oogle.ti
04f0  6d 65 28 29 2c 62 3d 2f  5e 68 74 74 70 3a 2f 69   me(),b=/ ^http:/i
0500  3b 69 66 28 62 2e 74 65  73 74 28 6a 29 26 26 67   ;if(b.te st(j)&&g
0510  6f 6f 67 6c 65 2e 68 74  74 70 73 28 29 29 7b 67   oogle.ht tps()){g
0520  6f 6f 67 6c 65 2e 6d 6c  28 6e 65 77 20 45 72 72   oogle.ml (new Err
0530  6f 72 28 22 47 4c 4d 4d  22 29 2c 66 61 6c 73 65   or("GLMM "),false
0540  2c 7b 73 72 63 3a 6a 7d  29 3b 0a 64 65 6c 65 74   ,{src:j} );.delet
0550  65 20 6b 5b 69 5d 3b 72  65 74 75 72 6e 7d 65 2e   e k[i];r eturn}e.
0560  73 72 63 3d 6a 3b 67 2e  6c 69 3d 69 2b 31 7d 2c   src=j;g. li=i+1},
0570  6c 63 3a 5b 5d 2c 6c 69  3a 30 2c 6a 3a 7b 65 6e   lc:[],li :0,j:{en
0580  3a 31 2c 6c 3a 66 75 6e  63 74 69 6f 6e 28 29 7b   :1,l:fun ction(){
0590  67 6f 6f 67 6c 65 2e 66  6c 3d 74 72 75 65 7d 2c   google.f l=true},
05a0  65 3a 66 75 6e 63 74 69  6f 6e 28 29 7b 67 6f 6f   e:functi on(){goo
05b0  67 6c 0d 0a 48 54 54 50  2f 31 2e 31 20 32 30 30   gl..HTTP /1.1 200
05c0  20 4f 4b 0d 0a 64 61 74  65 3a 20 4d 6f 6e 2c 20    OK..dat e: Mon, 
05d0  32 37 20 46 65 62 20 32  30 31 32 20 30 38 3a 32   27 Feb 2 012 08:2
05e0  31 3a 33 38 20 47 4d 54  0d 0a 65 78 70 69 72 65   1:38 GMT ..expire
05f0  73 3a 20 2d 31 0d 0a 63  61 63 68 65 2d 63 6f 6e   s: -1..c ache-con
0600  74 72 6f 6c 3a 20 70 72  69 76 61 74 65 2c 20 6d   trol: pr ivate, m
0610  61 78 2d 61 67 65 3d 30  0d 0a 63 6f 6e 74 65 6e   ax-age=0 ..conten
0620  74 2d 74 79 70 65 3a 20  74 65 78 74 2f 68 74 6d   t-type:  text/htm
0630  6c 3b 20 63 68 61 72 73  65 74 3d 55 54 46 2d 38   l; chars et=UTF-8
0640  0d 0a 73 65 72 76 65 72  3a 20 67 77 73 0d 0a 78   ..server : gws..x
0650  2d 78 73 73 2d 70 72 6f  74 65 63 74 69 6f 6e 3a   -xss-pro tection:
0660  20 31 3b 20 6d 6f 64 65  3d 62 6c 6f 63 6b 0d 0a    1; mode =block..
0670  78 2d 66 72 61 6d 65 2d  6f 70 74 69 6f 6e 73 3a   x-frame- options:
0680  20 53 41 4d 45 4f 52 49  47 49 4e 0d 0a 74 72 61    SAMEORI GIN..tra
0690  6e 73 66 65 72 2d 65 6e  63 6f 64 69 6e 67 3a 20   nsfer-en coding: 
06a0  63 68 75 6e 6b 65 64 0d  0a 43 6f 6e 6e 65 63 74   chunked. .Connect
06b0  69 6f 6e 3a 20 6b 65 65  70 2d 61 6c 69 76 65 0d   ion: kee p-alive.
06c0  0a 0d 0a 62 32 35 0d 0a  0a fd 16 08 00 11 00 00   ...b25.. ........
06d0  00 00 00 00 00 00 1a fd  16 65 2e 66 6c 3d 74 72   ........ .e.fl=tr
06e0  75 65 7d 2c 62 3a 6c 6f  63 61 74 69 6f 6e 2e 68   ue},b:lo cation.h
06f0  61 73 68 26 26 6c 6f 63  61 74 69 6f 6e 2e 68 61   ash&&loc ation.ha
0700  73 68 21 3d 22 23 22 2c  62 76 3a 32 31 2c 63 66   sh!="#", bv:21,cf
0710  3a 22 6f 73 62 22 2c 70  6d 3a 22 70 22 2c 70 6c   :"osb",p m:"p",pl
0720  3a 5b 5d 2c 6d 63 3a 30  2c 73 63 3a 30 2e 35 2c   :[],mc:0 ,sc:0.5,
0730  75 3a 22 65 64 30 31 37  30 65 35 22 7d 2c 54 6f   u:"ed017 0e5"},To
0740  6f 6c 62 65 6c 74 3a 7b  7d 2c 79 3a 7b 7d 2c 78   olbelt:{ },y:{},x
0750  3a 66 75 6e 63 74 69 6f  6e 28 61 2c 64 29 7b 67   :functio n(a,d){g
0760  6f 6f 67 6c 65 2e 79 5b  61 2e 69 64 5d 3d 0a 5b   oogle.y[ a.id]=.[
0770  61 2c 64 5d 3b 72 65 74  75 72 6e 20 66 61 6c 73   a,d];ret urn fals
0780  65 7d 7d 3b 28 66 75 6e  63 74 69 6f 6e 28 29 7b   e}};(fun ction(){
0790  76 61 72 20 61 3d 67 6f  6f 67 6c 65 2e 6a 3b 77   var a=go ogle.j;w
07a0  69 6e 64 6f 77 2e 6f 6e  70 6f 70 73 74 61 74 65   indow.on popstate
07b0  3d 0a 66 75 6e 63 74 69  6f 6e 28 29 7b 61 2e 70   =.functi on(){a.p
07c0  73 63 3d 31 7d 3b 66 6f  72 28 76 61 72 20 64 3d   sc=1};fo r(var d=
07d0  30 2c 66 3b 66 3d 5b 22  61 64 22 2c 22 62 63 22   0,f;f=[" ad","bc"
07e0  2c 22 69 6e 70 72 22 2c  22 69 73 22 2c 22 70 22   ,"inpr", "is","p"
07f0  2c 22 70 61 22 2c 22 61  63 22 2c 22 70 63 22 2c   ,"pa","a c","pc",
0800  22 70 61 68 22 2c 22 70  68 22 2c 22 73 61 22 2c   "pah","p h","sa",
0810  22 73 69 66 70 22 2c 22  73 6c 70 22 2c 22 73 70   "sifp"," slp","sp
0820  66 22 2c 22 73 70 6e 22  2c 22 78 78 22 2c 22 7a   f","spn" ,"xx","z
0830  63 22 2c 22 7a 7a 22 5d  5b 64 2b 2b 5d 3b 29 28   c","zz"] [d++];)(
0840  66 75 6e 63 74 69 6f 6e  28 68 29 7b 61 5b 68 5d   function (h){a[h]
0850  3d 66 75 6e 63 74 69 6f  6e 28 29 7b 61 2e 70 6c   =functio n(){a.pl
0860  2e 70 75 73 68 28 5b 68  2c 61 72 67 75 6d 65 6e   .push([h ,argumen
0870  74 73 5d 29 7d 7d 29 28  66 29 7d 29 28 29 3b 69   ts])}})( f)})();i
0880  66 28 21 77 69 6e 64 6f  77 2e 63 68 72 6f 6d 65   f(!windo w.chrome
0890  29 77 69 6e 64 6f 77 2e  63 68 72 6f 6d 65 3d 7b   )window. chrome={
08a0  7d 3b 77 69 6e 64 6f 77  2e 63 68 72 6f 6d 65 2e   };window .chrome.
08b0  73 76 3d 31 2e 30 30 3b  28 66 75 6e 63 74 69 6f   sv=1.00; (functio
08c0  6e 28 29 7b 76 61 72 20  61 3d 0a 67 6f 6f 67 6c   n(){var  a=.googl
08d0  65 2e 6b 45 49 3b 77 69  6e 64 6f 77 2e 70 70 5f   e.kEI;wi ndow.pp_
08e0  74 6f 73 3d 7b 7d 3b 76  61 72 20 64 3d 64 6f 63   tos={};v ar d=doc
08f0  75 6d 65 6e 74 2e 64 6f  6d 61 69 6e 2e 72 65 70   ument.do main.rep
0900  6c 61 63 65 28 2f 2e 2a  3f 28 67 6f 6f 67 6c 65   lace(/.* ?(google
0910  5c 2e 2e 2a 29 2f 2c 22  24 31 22 29 3b 66 75 6e   \..*)/," $1");fun
0920  63 74 69 6f 6e 20 66 28  29 7b 76 61 72 20 62 3d   ction f( ){var b=
0930  30 3b 74 72 79 7b 76 61  72 20 63 3d 64 6f 63 75   0;try{va r c=docu
0940  6d 65 6e 74 2e 63 6f 6f  6b 69 65 2e 6d 61 74 63   ment.coo kie.matc
0950  68 28 2f 50 50 5f 54 4f  53 5f 41 43 4b 3d 28 5b   h(/PP_TO S_ACK=([
0960  5e 3b 5d 2a 29 2f 29 3b  62 3d 63 26 26 21 69 73   ^;]*)/); b=c&&!is
0970  4e 61 4e 28 63 5b 31 5d  29 3f 63 5b 31 5d 3a 30   NaN(c[1] )?c[1]:0
0980  7d 63 61 74 63 68 28 6c  29 7b 65 28 22 65 72 72   }catch(l ){e("err
0990  6f 72 22 2c 22 72 65 61  64 5f 63 6f 6f 6b 69 65   or","rea d_cookie
09a0  22 29 7d 72 65 74 75 72  6e 20 62 7d 66 75 6e 63   ")}retur n b}func
09b0  74 69 6f 6e 20 68 28 62  29 7b 76 61 72 20 63 3d   tion h(b ){var c=
09c0  66 28 29 3b 69 66 28 63  3e 3d 30 29 7b 67 28 2b   f();if(c >=0){g(+
09d0  2b 63 29 3b 69 66 28 66  28 29 3e 30 26 26 21 62   +c);if(f ()>0&&!b
09e0  29 6d 28 29 7d 7d 66 75  6e 63 74 69 6f 6e 20 65   )m()}}fu nction e
09f0  28 62 2c 63 29 7b 76 61  72 20 6c 3d 6e 65 77 20   (b,c){va r l=new 
0a00  49 6d 61 67 65 3b 63 3d  63 3f 22 26 65 6d 73 67   Image;c= c?"&emsg
0a10  3d 22 2b 63 3a 22 22 3b  6c 2e 73 72 63 3d 5b 22   ="+c:""; l.src=["
0a20  2f 2f 22 2c 64 2c 22 2f  67 65 6e 5f 32 30 34 3f   //",d,"/ gen_204?
0a30  61 74 79 70 3d 69 26 63  74 3d 70 70 5f 74 6f 73   atyp=i&c t=pp_tos
0a40  26 63 64 3d 22 2c 62 2c  22 26 73 6f 75 72 63 65   &cd=",b, "&source
0a50  3d 22 2c 22 77 65 62 22  2c 22 26 65 69 3d 22 2c   =","web" ,"&ei=",
0a60  61 2c 63 5d 2e 6a 6f 69  6e 28 22 22 29 3b 77 69   a,c].joi n("");wi
0a70  6e 64 6f 77 2e 70 70 5f  74 6f 73 2e 62 65 61 63   ndow.pp_ tos.beac
0a80  6f 6e 3d 6c 7d 66 75 6e  63 74 69 6f 6e 20 67 28   on=l}fun ction g(
0a90  62 29 7b 76 61 72 20 63  3d 6e 65 77 20 44 61 74   b){var c =new Dat
0aa0  65 28 28 6e 65 77 20 44  61 74 65 29 2e 67 65 74   e((new D ate).get
0ab0  54 69 6d 65 28 29 2b 35  31 38 34 30 30 30 30 30   Time()+5 18400000
0ac0  30 29 3b 0a 74 72 79 7b  76 61 72 20 6c 3d 22 50   0);.try{ var l="P
0ad0  50 5f 54 4f 53 5f 41 43  4b 3d 22 2b 62 2b 22 3b   P_TOS_AC K="+b+";
0ae0  20 65 78 70 69 72 65 73  3d 22 2b 63 2e 74 6f 47    expires ="+c.toG
0af0  4d 54 53 74 72 69 6e 67  28 29 2b 22 3b 20 70 61   MTString ()+"; pa
0b00  74 68 3d 2f 3b 20 64 6f  6d 61 69 6e 3d 22 2b 64   th=/; do main="+d
0b10  3b 64 6f 63 75 6d 65 6e  74 2e 63 6f 6f 6b 69 65   ;documen t.cookie
0b20  3d 6c 7d 63 61 74 63 68  28 6e 29 7b 65 28 22 65   =l}catch (n){e("e
0b30  72 72 6f 72 22 2c 22 77  72 69 74 65 5f 63 6f 6f   rror","w rite_coo
0b40  6b 69 65 22 29 7d 7d 66  75 6e 63 74 69 6f 6e 20   kie")}}f unction 
0b50  6b 28 29 7b 67 28 2d 31  29 3b 65 28               k(){g(-1 );e(

У кого-нибудь есть идеи относительно того, что я могу делать неправильно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...