Internet Protocol filter driver's callback: где передаваемые данные???

Тема в разделе "WASM.NT.KERNEL", создана пользователем cresta, 18 янв 2008.

  1. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    В процедуре хука не могу получить html-контент.

    В структуре TCPHeader есть поле dataoffset. К чему этот оффсет? Навскидку прилепил его к указателю на структуру. Получаю только обрывки html-контента, которые перемежаются нечитабельными данными. Т.е. один пакет с html-кодом, затем несколько нечитабельных пакетов, затем снова кусок html, и снова нечитабельные пакеты.
    Те пакеты, в которых код, между собой не стыкуются, т.е. фрагменты кода произвольно выдраны из html-кода страницы.
    Как получить весь контент?

    Код (Text):
    1. //TCP = 6
    2. if(ipp->ipProtocol == 6){
    3.     tcph=(TCPHeader *)Packet;
    4.     pBuffer = (char*)Packet;
    5.     pBuffer += tcph->dataoffset;
    6.     DbgPrint("BUFFER: %s\n", pBuffer);
    7.    
    8.     if(!(tcph->flags & 0x02))   return PF_FORWARD;
    9. }
    И что за urgentPointer в структуре TCPHeader?
     
  2. steelfactor

    steelfactor New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    501
    Data Offset (смещение данных) -
    Количество 32-битных слов в TCP заголовке. Указывает на начало поля данных.
    TCP заголовок всегда кончается на 32-битной границе слова, даже если он содержит опции.
    Urgent Pointer (указатель срочности)
    Поле сообщает текущее значение указателя срочности. Последний является смещением относительно номера очереди данного сегмента. Указатель сообщает номер очереди для октета, следующего за срочными данными. Это поле интерпретируется только в том случае, когда в сегменте выставлен контрольный бит URG.
    ...что собственно и должно было случиться. Сначала идет служебная инфа, затем данные, затем снова служебные данные заголовка. Читай данные просто с dataoffset.
     
  3. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Т.е. я правильно делаю, считывая данные с адреса Packet+dataoffset ?

    Тогда вопрос: где html-код? Например html-код страницы имеет размер 9 кб.
    Я же смог отследить передачу только 3 кб, и то не подряд, а несвязанные между собой куски.
    Где искать остальное????

    Вот те 3 кб, полученые из DbgView:

    Код (Text):
    1. BUFFER: f13
    2. <html>
    3.  <head>
    4.   <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    5.   <!-- --> <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
    6.   <script type="text/javascript" language="javascript">
    7.    document.write('<link href="s'+ screen.width.toString() +'.css" type=text/css rel=stylesheet>');
    8.   </script>
    9.  
    10.  
    11. BUFFER: width='100%' cellpadding='0' cellspacing='0' style='background:#5e697b; padding:0; margin:0; font:bold 13px Tahoma, Arial;'>
    12.          <tr>
    13.           <td align='center' style='width:33%;'>
    14.            <a href="index.php" class='mlink'><div>AEAAIA </div></a>
    15.           </td>
    16.           <td align='center' style='width:33%; border-left:1px solid #ffffff; border-right:1px solid #ffffff;'>
    17.            <a href="index.php" class='mlink'><div>IIAINOE</div></a>
    18.  
    19. BUFFER: hp" onfocus='this.blur()'>Iai oaiaaiea e iaoa eaeu</a></li>
    20.                                 <li><a href="comp.php" onfocus='this.blur()'>Eiiiu oa u e i aoaoieea</a></li>
    21.                                 <li><a href="home.php" onfocus='this.blur()'>Iaaaeu e auoiaay oaoieea</a></li>
    22.                                 <li><a href="fone.php" onfocus='this.blur()'>Oaeaoiiu e naycu</a></li>
    23.                                 <li><a href="food.php" onfocus='this.blur()'>I iaoeou ieoaiey</a></li>
    24.           </td>
    25.           <td align='center
    26.  
    27.  
    28. BUFFER:       <li><a href="misc.php" onfocus='this.blur()'> aciia</a></li>
    29.                                 <li style='width:150px;'></li>
    30.                               </ul>
    31.                             </div>
    32.                  </div>
    33.           </td>
    34.          </tr>
    35.         </table>
    36.        </td>
    37.       </tr>
    38.      </table>
    39.     </td>
    40.     <td id='mrqcell' style=''>
    41.      <table align=center cellpadding='0' cellspacing='0' style='height:100%; padding:0; margin:0; border: 2px solid #5e697b;'>
    42.       <tr
    43.  
    44.  
    45. BUFFER:    </tr>
    46.          </table>
    47.          </center>
    48.  
    49.        </marquee>
    50.        <!-- <img src='http://informer.gismeteo.ru/37212-9.GIF' border=0> -->
    51.        </td>
    52.       </tr>
    53.      </table>
    54.     </td>
    55.    </tr>
    56.   </table>
    57.   <table width=100% border=0 style='height:8; font-size:6px; border-collapse:collapse; border-color:a0a0a0;'><tr><td>&nbsp;</td></tr></table>
    58.  
    59.   <table id='content' align=center width='100%' cellpadding='0' cellspacing='0' border=0 style='height:65%;'>
    60.    <tr>
    61.     <td width=1
    62.  
    63. BUFFER: " border="0">
    64.        </td>
    65.        <td style='width:136; padding:3px;'>
    66.         height:8; font-size:6px; border-collapse: collapse; collapse; border-color: a0a0a0;
    67.        </td>
    68.       </tr>
    69.       <tr>
    70.        <td align='left' style='padding:2px;'>
    71.         <img src="img/tvsport.gif" width="40" height="32" alt="" border="0">
    72.        </td>
    73.        <td style='width:136; padding:3px;'>
    74.         dddddd
    75.        </td>
    76.       </tr>
    77.       <tr>
    78.        <td colspan=2 align='center' style='padding:5 0 8 0
    79.  
    80. BUFFER: r-left:1px solid #ffffff; border-right:1px solid #ffffff;'> aciauaiea  aeeaiu</td>");
    81.     document.write("<td width='25%' align='center' style='border-left:1px solid #ffffff; border-right:1px solid #ffffff;'>Aiaaaeaiea iauyaeaiey</td>");
    82.     document.write("<td width='25%' align='center' style=''> ac aaioea naeoa - crstudio</td>");
    83.     document.write("</tr></table>");
    84.   </script>
    85.   <br><br>
    86.   -->
    87.   <table id='footer' width='100%' align=center cellpadding='0' cellspacing='0' border=1 style='b
    Здесь видно, что куски не идут подряд, просто произвольные части.
     
  4. steelfactor

    steelfactor New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    501
    размер pBuffer какой? Такое впечатление что, у тебя просто в буффер не все влезает
     
  5. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    При чём здесь размер pBuffer?
    Это указатель, размер - дворд...
    Буфера как такового я не выделяю, и ничего туда не копирую, чтобы туда могло что-то не влезть. Просто читаю данные с указателя. В коде ж написано: pBuffer = (char*)Packet; Сколько есть данных - столько и выводится в DbgView. До первого нуля.
     
  6. steelfactor

    steelfactor New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    501
    а не проще ли
    Код (Text):
    1. tcp_header=(TCPHeader *)Packet;
    2. pBuffer += tcp_header->dataoffset;
    У меня этот код нормально работает
     
  7. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Не верю. Html-код страницы, открываемой браузером, полностью выводится в DbgView?

    И чем инициализирован указатель pBuffer перед тем как к нему прибавлен tcp_header->dataoffset?
    Или ты прибавляешь к неинициализированному указателю ???
     
  8. steelfactor

    steelfactor New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    501
    Не верь, дело твое. Я работаю не с указателем, а с буфером.
     
  9. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    То, что есть некий буфер, в котором находится искомые данные - это понятно. Данные не могут быть не в буфере.
    Я говорю о том, что сам никаких буферов не выделяю и не заполняю. Только читаю то, что пришло готовое.

    В общем вопрос по-прежнему в силе: почему не удается отследить все передаваемые данные, отслеживаются только отдельные несязанные куски.
    Может те обрывки, которые я наблюдаю - это всего лишь неосвобожденная память от каких-то других каналов передачи данных и я на них попадаю случайно, и в callback'е искать html-контент бесполезно?
    Т.е. фильтровать траффик можно только по значению ip, но не по содержимому?