Фильтрация страницы в IE

Тема в разделе "WASM.WIN32", создана пользователем corehook, 2 май 2011.

  1. corehook

    corehook New Member

    Публикаций:
    0
    Регистрация:
    28 мар 2011
    Сообщения:
    19
    Доброе время суток.
    в IE 8 перехватываем InternetConnectW,HttpOpenRequestW,HttpSendRequestW,InternetConnectW,InternetQueryDataAvailable,InternetReadFile.
    Цель : с помощью regexp найти некоторые данные в загруженной из интернета странице.
    Необходимо анализировать все полученные данные вместе, а не кусочками которые мы "видим" в InternetReadFile, соответственно была мысль:
    Перехват InternetQueryDavaAvailable в обработчике которой мы сливаем все данные из Handle и сохраняем их. Позже в InternetReadFile мы просто отдаем буфер и слитые данные. НО проблема в том что когда реальная InternetQueryDataAvailable возвращает 0, мы сливаем не все данные. Т.е. по идеет возврат 0 означает что больше данных нет в буфере, но это не так. Смотрим лог :

    New_InternetConnectW : Connect to [ www.mail.ru ]:80, Handle 0x00CC0008
    New_HttpOpenRequestW : Handle 0x00CC000C, File /
    New_HttpSendRequestW : Handle 0x00CC000C, HeadersLen -1, OptionalHeadersLen 0
    New_InternetQueryDataAvailable : Handle 0x00CC000C, ReadyBytes 560
    New_InternetReadFile : Handle 0x00CC000C, Read 560 bytes, Readed 560
    New_InternetQueryDataAvailable : Handle 0x00CC000C, ReadyBytes 5635
    New_InternetReadFile : Handle 0x00CC000C, Read 1488 bytes, Readed 1488
    New_InternetReadFile : Handle 0x00CC000C, Read 4147 bytes, Readed 4147
    New_InternetQueryDataAvailable : Handle 0x00CC000C, ReadyBytes 0 <- вот тут мы получаем ноль, т.е. данных больше нет.
    New_InternetReadFile : Handle 0x00CC000C, Read 1997 bytes, Readed 1997 <- О БОЖЕ, Откуда, бл8дь IE берет эту цифру ? 1997 байт ?
    New_InternetReadFile : Handle 0x00CC000C, Read 2288 bytes, Readed 2288 затем ещё !!
    New_InternetQueryDataAvailable : Handle 0x00CC000C, ReadyBytes 10715 а вот тут он ещё раз проверяет нет ли данных, ну шо за хня ? :dntknw:
    New_InternetReadFile : Handle 0x00CC000C, Read 5904 bytes, Readed 5904
    New_InternetReadFile : Handle 0x00CC000C, Read 4811 bytes, Readed 4811
    New_InternetQueryDataAvailable : Handle 0x00CC000C, ReadyBytes 0 реальный конец данных.


    Была мысль что дополнительные данные ( 1997 байт ) он узнает из обращений к handle с помощью функции HttpQueryInfo , но перехват и анализ всех возвращенных им данных ничего не дал.

    Есть идеи ?
     
  2. corehook

    corehook New Member

    Публикаций:
    0
    Регистрация:
    28 мар 2011
    Сообщения:
    19
    P.S. есть идея в New_InternetQueryDataAvailable вызывать настоящую InternetQueryDataAvailable несколько раз даже если она вернула ноль. Сейчас попробуем.
     
  3. corehook

    corehook New Member

    Публикаций:
    0
    Регистрация:
    28 мар 2011
    Сообщения:
    19
    http://www.everfall.com/paste/id.php?8hu7m6a5m4e5 - mail.ru
     
  4. corehook

    corehook New Member

    Публикаций:
    0
    Регистрация:
    28 мар 2011
    Сообщения:
    19
    http://www.everfall.com/paste/id.php?g0hrw0j41p90 - mail.ru + hook InternetStatusCallback
     
  5. fsd

    fsd New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2010
    Сообщения:
    353
    непонятно зачем вы всё это делаете, фильтровать нужно только опираясь на разбор http
     
  6. corehook

    corehook New Member

    Публикаций:
    0
    Регистрация:
    28 мар 2011
    Сообщения:
    19
    Дело в том что если фильтровать в InternetReadFile, то фильтруемные данные мы будем видеть кусками, а мне необходимо пробежаться фильтром по всей странице.

    Можете уточнить свой вопрос, если честно не совсем понял "только опираясь на разбор http"
     
  7. fsd

    fsd New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2010
    Сообщения:
    353
    длину тела сообщения нужно определять, как указано в спецификации (HTTP/1.1)и при получении страницы руководствоваться только этим, не важно что возвращают API (если только это не разрыв соединения)
     
  8. corehook

    corehook New Member

    Публикаций:
    0
    Регистрация:
    28 мар 2011
    Сообщения:
    19
    Прошу прощения, видать Я виноват в том что не могу донести до Вас в чем моя проблема. Причем тут rfc вообще ? httpd имеет прав вообще не вставлять этот "content-length", если вы об этом

    p.s. урл не открылся, что то инет у меня совсем колхозит :dntknw:
     
  9. corehook

    corehook New Member

    Публикаций:
    0
    Регистрация:
    28 мар 2011
    Сообщения:
    19
    проблема решена:
    Код (Text):
    1. New_InternetQueryDataAvailable : Handle 0x00CC000C, ReadyBytes 561
    2. New_InternetReadFile : Handle 0x00CC000C, Read 561 bytes, Readed 561
    3. New_InternetQueryDataAvailable : Handle 0x00CC000C, ReadyBytes 5649
    4. New_InternetReadFile : Handle 0x00CC000C, Read 1487 bytes, Readed 1487
    5. New_InternetQueryOptionA : hFile 0x00CC000C, Option 33 (INTERNET_OPTION_DATAFILE_NAME)
    6. New_InternetReadFile : Handle 0x00CC000C, Read 4162 bytes, Readed 4162
    7. New_InternetQueryDataAvailable : Handle 0x00CC000C, ReadyBytes 0
    8. New_InternetStatusCallback : hFile [ 0x00CC000C ], Status [ INTERNET_STATUS_REQUEST_COMPLETE : 0x00000064 ], Recieved 1 bytes, Len 8
    9.  
    10. +------------------------------------------------+
    11. 0x034BF8B4  01 00 00 00 F9 0E 00 00  ........
    12. |[INTERNET_STATUS_REQUEST_COMPLETE]
    13. +------------------------------------------------+
    14. New_InternetQueryOptionA : hFile 0x00CC000C, Option 23 (INTERNET_OPTION_REQUEST_FLAGS)
    15. New_InternetQueryOptionA : hFile 0x00CC000C, Option 31 (INTERNET_OPTION_SECURITY_FLAGS)
    16. New_InternetQueryOptionA : hFile 0x00CC000C, Option 66 (UNKNOWN)
    17. New_InternetReadFile : Handle 0x00CC000C, Read 1982 bytes, Readed 1982
    18. New_InternetReadFile : Handle 0x00CC000C, Read 1851 bytes, Readed 1851
     
  10. fsd

    fsd New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2010
    Сообщения:
    353
    HTTP/1.1 RFC (4.4 Message Length)
     
  11. corehook

    corehook New Member

    Публикаций:
    0
    Регистрация:
    28 мар 2011
    Сообщения:
    19
    fsd
    До Вас к сожалению так и не достучалась моя проблема, которую уже решил :) Все равно спасибо за внимание.