Я разрабатываю прокси в 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(
У кого-нибудь есть идеи относительно того, что я могу делать неправильно?