Есть самописный снифер на C#, снифаю им пакеты браузера, затем необходимо отпарсить html текст, достав необходимую информацию. Проблема в том, что текст в пакета не очень читабелен. Можно ли как-нибудь привести пакет к читабельному виду? Вот, например, кусок пакета с хтмл странички ya.ru (русские буквы так вообще не отображаются) Code: HTTP/1.1 200 OK..Server: nginx..Date: Tue, 02 Feb 2010 15:38:23 GMT..Content-Type: text/html; charset=utf-8..Last-Modified: Tue, 12 Jan 2010 15:29:03 GMT..Transfer-Encoding: chunked..Connection: keep-alive....1362..<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><meta http-equiv=Content-Type content="text/html;charset=utf-8"><title>............</title><link rel="shortcut icon"href="http://img.yandex.net/i/favicon.ico"><base target="_top"><style type="text/css">*{font-size:100.01%;margin:0}body{font:.8em Arial,sans-serif;background:#fff url(http://www.tns-counter.ru/V13a****yandex_ru/ru/CP1251/tmsec=yandex_ya/0)}body,a{color:#999}a:hover{color:#f00!important}table{width:100%;height:100%}table table{width:65%;max-width:1000px;min-width:300px;margin:auto}table table td{padding:.25em}#text,#text input{font:100% Arial,sans-serif;width:100%}p{padding:5em 2.2em 13px}body,ul,li{padding:0;list-style:none}span{white-space:nowrap}#head{float:left;width:100%}#head li{font:85% Verdana,sans-serif;padding:5px 10px 7px 0}#head a{color:#000}#head .s{float:left;padding-left:10px}#head .s a{float:left;color:#ee7b00}#head .s i{position:absolute;width:16px;height:16px;margin-left:-19px;background:url(http://img.yandex.net/i/switch-yaru.png) no-repeat}#mail{float:right}#head .user,#head .user *{text-decoration:underline}#head .user *{color:#f00}#head .exit{color:#E03A3A}</style><!--[if IE]><style>.b-search__wrap{width:expression(document.body.clientWidth>1600 ? '1000px':document.body.clientWidth< 500 ? '300px':'65%')}#head .s i{cursor:hand}</style><![endif]--><style type="text/css"media="handheld">body{padding:.5em}tr,td{display:block}table,table table,td,p{padding:0;height:auto;width:100%;min-width:0;text-align:center}#text *{width:180px}input{margin:.5em 0}</style><script type="text/javascript">var ieHomeCheck={URL:"http://ya.ru/",linkId:"sethome",clids:[41124],_checkClids:function(){var D=-1;document.body.style.behavior="url(#default#homepage)";if(document.body.isHomePage("http://ya.ru/")||document.body.isHomePage(this.URL)){return 0}for(var C=0;C<this.clids.length;C++){if(document.body.isHomePage(this.URL+"?clid="+this.clids[C])){return this.clids[C]}}return D},_hide:function(){document.getElementById(this.linkId).style.display="none"},_cH:function(F,G){var E=function(C,A,B){return location.protocol+"//clck.yandex.ru/"+B+"/dtype="+C+"/pid=132/cid=2039/path="+A+"/rnd="+((new Date()).getTime()+Math.round(Math.random()*100))+"/*"+G};var H=document.createElement("script");H.src=E("stred",F,"jclck");document.documentElement.getElementsByTagName("head")[0].appendChild(H)},action:function(){this.URL=location.protocol+"//"+location.hostname+"/";var B=this._checkClids();if(B>0){this._hide();this._cH("nextdistrib.homepage."+B,this.URL)}else{if(B==0){this._hide();this._cH("nextdistrib.homepage",this.URL)}}}};function c(A,B,C){new Image().src=location.protocol+"//clck.yandex.ru/click/dtype=stred/pid="+B+"/cid="+C+"/rnd="+((new Date()).getTime()+Math.round(Math.random()*100))+"/*"+(A.href?A.href:"")}function setHome(A,B){try{A.style.behavior="url(#default#homepage)";A.setHomePage(B);return false}catch(C){}}function createElement(B,A){var D=document.createElement(B);for(var C in A){D[C]=A[C]}return document.getElementsByTagName("head")[0].appendChild(D)};</script><table cellspacing=0 cellpadding=0><tr><td valign=top colspan=2 height=1><ul id=head><li class=s><a id="sethome"href="http://help.yandex.ru/start/"onclick="c(this,17,1755);return setHome(this,'http://ya.ru/?clid='+(location.href.match(/clid=(\d+)/)?location.href.match(/clid=(\d+)/)[1]:'41124'))">.............. ..................</a><li id=mail><a href="http://mail.yandex.ru"onclick="c(this,17,1080)">..........................</a></ul><!--[if IE]><script type="text/javascript">ieHomeCheck.action();</script><![endif]--><tr><td align=center colspan=2><form action="http://yandex.ru/yandsearch"onsubmit='var clid=location.href.match(/clid=(\d+)/);location.href=this.action+"?text="+encodeURIComponent(this.text.value)+(clid?"&"+clid[0]:"");return false'><table class="b-search__wrap"><tr><td><a href="http://www.yandex.ru"onclick="c(this,17,1081)"><img src="http://ya.ru/logo.png"width=100 height=44 border=0 alt="............"></a><td id=text><div><input name=text size=50 maxlength=300></div><t
точки эти - 0d 0a - возврат строки перевод каретки а русский должен отображаться нормально, если в консоли отображаешь, - есть CharToOem и тд Можешь сделать для пакета WriteFile в какойнить файло и посмотри, только двоичные данные, - они так и будут нечитабельными, можешь фильтр добавить который будет писать только от 'a'-'z' 'A'-'Z' '0'-'9'
Неправильно задал вопрос, проблема немного в другом. В пакете текст и байты разделены на две "колонки" и ширина колонки с текстом вроде как всегда одна и если строка не помещается, она переносится на след. строку, то есть слово yandex например может там отобразиться и как Code: ya ndex и как Code: yan dex то есть парсить проблематично в этом плане. Вот может можно как-то сохранять только текст, без байтов. Ну это ладно полбеды. Сейчас еще с одной проблемой столкнулся, пришел такой вот пакет (частично) Code: 8A 2A CE 71 4A 79 76 5A 30 4D D1 CB ED 74 77 BA *ÎqJyvZ0MÑËítwº 8A CE 7C 57 6A 53 72 4B 64 88 51 69 82 EA D6 9E Î|WjSrKdQiêÖ B3 98 19 6C 0A 31 48 D7 22 47 55 52 D0 31 64 08 ³.l.1H×"GURÐ1d. D3 C9 E4 69 33 9C 83 8D 39 99 62 71 03 EF B6 B7 ÓÉäi39bq.ï¶· 75 A8 B2 EB 45 DF C7 AE CB 55 1D F6 D8 71 D3 2E u¨²ëEßÇ®ËU.öØqÓ. F6 30 5B A4 CD 5A 60 15 0E DD 6E A1 62 3C 20 56 ö0[¤ÍZ`..Ýn¡b< V 2C 2B B1 05 D4 1B 97 73 58 CB CB AD 03 83 5E 4C ,+±.Ô.sXËË*.^L 48 89 FA F3 F5 D5 17 7B CC 7F 5B B7 0F 44 1C 79 HúóõÕ.{Ì[·.D.y 15 85 07 B4 29 30 F2 0C 32 CD 53 0F 24 CB B1 CD . .´)0ò.2ÍS.$Ë±Í B0 92 14 57 79 91 21 D9 98 4A 12 0F 8C F8 69 97 °.Wy!ÙJ..øi E7 13 0F 72 B6 CE 50 2E 29 8D BC D7 93 89 F7 CE ç..r¶ÎP.)¼×÷Î 77 57 76 A5 08 6D E8 53 2A B2 38 6C 45 77 F4 D6 wWv¥.mèS*²8lEwôÖ 4F 45 23 23 6C A6 38 F0 33 21 7F F8 43 D8 6A AC OE##l¦8ð3!øCØj¬ 86 C4 D0 26 43 93 22 92 8D A5 1A 13 1B 1B 7F 1F ÄÐ&C"¥..... B5 BD E6 C6 F8 6D FF 9D FF 41 E3 BE B4 A3 B7 64 µ½æÆømÿÿAã¾´£·d По идеи тут ХТМЛ текст, подозреваю, что эти каракули из-за Accept-Encoding: gzip,deflate. Как их можно расшифровать?
ненене))) пакет может быть фрагментом че угодно - хоть картинки хоть хз. потому что вообще есть maximum transmission unit для лок сети который весит около полутра КБ. и если ты сгружаешь страницу - то получать ты будешь все пдоряд. тыб хоть сорс привел, откуда я знаю как ты его парсишь)
Ну сейчас я пытаюсь просто получить хтмл ya.ru. Параллельно снифаю через WPE-PRO, он все читает нормально. Поставил в своем сниффере фильтр, чтоб отображались только пакеты с ya.ru ну и в пакете с заголовками HTTP/1.1 200 OK и Content-Type: text/javascript, который в ВПЕ отображается нормально, у меня отображается вот так как я выше показал..
все прална .... идет анализ пожатого контента! Пожатый контент НИ ОДНИМ СНИФЕРОМ не просмотреть 8))) gzip жмет весь ФРАГМЕНТ и разжимает только ВЕСЬ .... а у тебя ПРИСМОТРИСЬ только часть .... фрагменты разбросаны в зависимости от MTU! ТС откажись от этой затеи...
потому что по видимому следит за потоком фрагментированных данных возьми Wireshark и посмотри для примера как к тебе данные приходят. а еще лучше - сам wpdpack. Code: // Open the adapter if ((adhandle= pcap_open_live(d->name, // name of the device 65536, // portion of the packet to capture. // 65536 grants that the whole packet will be captured on all the MACs. 1, // promiscuous mode (nonzero means promiscuous) 1, // read timeout (1ms to maximum performance) errbuf // error buffer )) == NULL){ printf("\nUnable to open the adapter. %s is not supported by WinPcap\n"); pcap_freealldevs(alldevs); return 3; } и поэкспериментируй с таймаутом я повторюсь - но - все приходит фрагментами, если правильно хочш выстроить, следи за tcp syn/ack
Кошмар, кошмаррр... я думал сложность сетевого анализа лишь в написании грамотного парсера, а оказываются еще пакеты фрагментированные идут не по порядку O_O. А как узнать фрагментирован ли пакет? и как их собрать ??? кошмарррр Ааааааа
да идет новичек по лесу .... думает ну через пеньки то я перепрыгну а тут фигак и лбом об столетний дуб! ... нада на форуме спросить какой высоты пеньки бувают!
2 Retimiled уффф )) все нашел )) http://rk6.bmstu.ru/electronic_book/progrws/tcpip.html#c3_3_ip_fragment я спокоен - структуры IP заголовков у меня есть... надо поискать теперь программную реализацию, что бы уж наверняка не ошибиться )