В процедуре хука не могу получить html-контент. В структуре TCPHeader есть поле dataoffset. К чему этот оффсет? Навскидку прилепил его к указателю на структуру. Получаю только обрывки html-контента, которые перемежаются нечитабельными данными. Т.е. один пакет с html-кодом, затем несколько нечитабельных пакетов, затем снова кусок html, и снова нечитабельные пакеты. Те пакеты, в которых код, между собой не стыкуются, т.е. фрагменты кода произвольно выдраны из html-кода страницы. Как получить весь контент? Код (Text): //TCP = 6 if(ipp->ipProtocol == 6){ tcph=(TCPHeader *)Packet; pBuffer = (char*)Packet; pBuffer += tcph->dataoffset; DbgPrint("BUFFER: %s\n", pBuffer); if(!(tcph->flags & 0x02)) return PF_FORWARD; } И что за urgentPointer в структуре TCPHeader?
Data Offset (смещение данных) - Количество 32-битных слов в TCP заголовке. Указывает на начало поля данных. TCP заголовок всегда кончается на 32-битной границе слова, даже если он содержит опции. Urgent Pointer (указатель срочности) Поле сообщает текущее значение указателя срочности. Последний является смещением относительно номера очереди данного сегмента. Указатель сообщает номер очереди для октета, следующего за срочными данными. Это поле интерпретируется только в том случае, когда в сегменте выставлен контрольный бит URG. ...что собственно и должно было случиться. Сначала идет служебная инфа, затем данные, затем снова служебные данные заголовка. Читай данные просто с dataoffset.
Т.е. я правильно делаю, считывая данные с адреса Packet+dataoffset ? Тогда вопрос: где html-код? Например html-код страницы имеет размер 9 кб. Я же смог отследить передачу только 3 кб, и то не подряд, а несвязанные между собой куски. Где искать остальное???? Вот те 3 кб, полученые из DbgView: Код (Text): BUFFER: f13 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> <!-- --> <META HTTP-EQUIV="Pragma" CONTENT="no-cache"> <script type="text/javascript" language="javascript"> document.write('<link href="s'+ screen.width.toString() +'.css" type=text/css rel=stylesheet>'); </script> BUFFER: width='100%' cellpadding='0' cellspacing='0' style='background:#5e697b; padding:0; margin:0; font:bold 13px Tahoma, Arial;'> <tr> <td align='center' style='width:33%;'> <a href="index.php" class='mlink'><div>AEAAIA </div></a> </td> <td align='center' style='width:33%; border-left:1px solid #ffffff; border-right:1px solid #ffffff;'> <a href="index.php" class='mlink'><div>IIAINOE</div></a> BUFFER: hp" onfocus='this.blur()'>Iai oaiaaiea e iaoa eaeu</a></li> <li><a href="comp.php" onfocus='this.blur()'>Eiiiu oa u e i aoaoieea</a></li> <li><a href="home.php" onfocus='this.blur()'>Iaaaeu e auoiaay oaoieea</a></li> <li><a href="fone.php" onfocus='this.blur()'>Oaeaoiiu e naycu</a></li> <li><a href="food.php" onfocus='this.blur()'>I iaoeou ieoaiey</a></li> </td> <td align='center BUFFER: <li><a href="misc.php" onfocus='this.blur()'> aciia</a></li> <li style='width:150px;'></li> </ul> </div> </div> </td> </tr> </table> </td> </tr> </table> </td> <td id='mrqcell' style=''> <table align=center cellpadding='0' cellspacing='0' style='height:100%; padding:0; margin:0; border: 2px solid #5e697b;'> <tr BUFFER: </tr> </table> </center> </marquee> <!-- <img src='http://informer.gismeteo.ru/37212-9.GIF' border=0> --> </td> </tr> </table> </td> </tr> </table> <table width=100% border=0 style='height:8; font-size:6px; border-collapse:collapse; border-color:a0a0a0;'><tr><td> </td></tr></table> <table id='content' align=center width='100%' cellpadding='0' cellspacing='0' border=0 style='height:65%;'> <tr> <td width=1 BUFFER: " border="0"> </td> <td style='width:136; padding:3px;'> height:8; font-size:6px; border-collapse: collapse; collapse; border-color: a0a0a0; </td> </tr> <tr> <td align='left' style='padding:2px;'> <img src="img/tvsport.gif" width="40" height="32" alt="" border="0"> </td> <td style='width:136; padding:3px;'> dddddd </td> </tr> <tr> <td colspan=2 align='center' style='padding:5 0 8 0 BUFFER: r-left:1px solid #ffffff; border-right:1px solid #ffffff;'> aciauaiea aeeaiu</td>"); document.write("<td width='25%' align='center' style='border-left:1px solid #ffffff; border-right:1px solid #ffffff;'>Aiaaaeaiea iauyaeaiey</td>"); document.write("<td width='25%' align='center' style=''> ac aaioea naeoa - crstudio</td>"); document.write("</tr></table>"); </script> <br><br> --> <table id='footer' width='100%' align=center cellpadding='0' cellspacing='0' border=1 style='b Здесь видно, что куски не идут подряд, просто произвольные части.
При чём здесь размер pBuffer? Это указатель, размер - дворд... Буфера как такового я не выделяю, и ничего туда не копирую, чтобы туда могло что-то не влезть. Просто читаю данные с указателя. В коде ж написано: pBuffer = (char*)Packet; Сколько есть данных - столько и выводится в DbgView. До первого нуля.
а не проще ли Код (Text): tcp_header=(TCPHeader *)Packet; pBuffer += tcp_header->dataoffset; У меня этот код нормально работает
Не верю. Html-код страницы, открываемой браузером, полностью выводится в DbgView? И чем инициализирован указатель pBuffer перед тем как к нему прибавлен tcp_header->dataoffset? Или ты прибавляешь к неинициализированному указателю ???
То, что есть некий буфер, в котором находится искомые данные - это понятно. Данные не могут быть не в буфере. Я говорю о том, что сам никаких буферов не выделяю и не заполняю. Только читаю то, что пришло готовое. В общем вопрос по-прежнему в силе: почему не удается отследить все передаваемые данные, отслеживаются только отдельные несязанные куски. Может те обрывки, которые я наблюдаю - это всего лишь неосвобожденная память от каких-то других каналов передачи данных и я на них попадаю случайно, и в callback'е искать html-контент бесполезно? Т.е. фильтровать траффик можно только по значению ip, но не по содержимому?