Downloading file (NDIS IM)

Home Forums Discussions General Downloading file (NDIS IM)

Viewing 10 posts - 1 through 10 (of 10 total)
  • Author
    Posts
  • #5089
    lexer666
    Participant

      Hello!
      I’ve a NDIS IM Driver (like passthru) and I need to save file from a special website (e.g. *ttp://sait.ru/file.txt) to a hard disc.
      How I can realize it? Be glad to see a sample.
      Thanks.

      (можно отвечать по-русски 😉 )

      #6218
      Vadim Smirnov
      Keymaster

        Весь сетевой трафик идет через IM драйвер, в том числе пойдут и данные скачиваемого файла. Правда построить файл из данных пакетов будет не просто, придется пропарсить TCP/HTTP заголовки и выделить данные принадлежащие файлу. По поводу парсинга заголовков копай в сторону сетвых сниферов в исходниках…

        #6219
        lexer666
        Participant

          Спасибо за ответ 🙂 С приемом пакета немного понятно, если пакет идет с определенного адреса, убираю заголовки и сохраняю пакеты в файл (и не пропускаю его выше). Вот с отправкой запроса, что-то не очень. Как нужно сформировать запрос (из NDIS IM), чтобы в ответ получить файл? (ясно нужно указать ip, что еще и где в пакете?)

          #6220
          Vadim Smirnov
          Keymaster

            Изначально я понял задачу несколько по другому: нужно сохранить копию некого файла, который другое приложение скачивает. Если речь о том чтобы из IM драйвера скачать файл по HTTP, то придется реализовать TCP/IP стек + HTTP протокол. Вместо реализации собственного TCP/IP можно использовать TDI оригинального стека, но HTTP писать придется по любому.

            #6221
            lexer666
            Participant

              Ясненько. Вот еще один вопрос. “Ссылка” (которую мы вводим в браузере, например google.ru) содержится где-то в определенном месте в пакете, те может где-то в начале пакета, до или после какой-нибудь определенной последовательности байт? Нужно найти слово в “ссылке”, но просматривать весь пакет очень долго. Хотелось бы сузить зону поиска.
              Заранее спасибо!

              #6222
              Vadim Smirnov
              Keymaster

                Вот типовой HTTP GET пакет. Где искать URL видно вполне наглядно. Детали смотри в спецификации HTTP.


                00000000 00 15 E9 76 C3 A0 00 16 E6 5C CA A8 08 00 45 00 ...v.........E.
                00000010 03 66 3C C2 40 00 80 06 9E A3 C0 A8 01 65 40 FB .f<.@........e@.
                00000020 19 24 43 FF 00 50 D1 1A 24 E5 1D 0E F2 A5 50 18 .$C..P..$.....P.
                00000030 FF FF 1F 85 00 00 47 45 54 20 2F 20 48 54 54 50 ......GET./.HTTP
                00000040 2F 31 2E 31 0D 0A 48 6F 73 74 3A 20 77 77 77 2E /1.1..Host:.www.
                00000050 6E 74 6B 65 72 6E 65 6C 2E 63 6F 6D 0D 0A 55 73 ntkernel.com..Us
                00000060 65 72 2D 41 67 65 6E 74 3A 20 4D 6F 7A 69 6C 6C er-Agent:.Mozill
                00000070 61 2F 35 2E 30 20 28 57 69 6E 64 6F 77 73 3B 20 a/5.0.(Windows;.
                00000080 55 3B 20 57 69 6E 64 6F 77 73 20 4E 54 20 35 2E U;.Windows.NT.5.
                00000090 31 3B 20 72 75 3B 20 72 76 3A 31 2E 38 2E 31 2E 1;.ru;.rv:1.8.1.
                000000A0 33 29 20 47 65 63 6B 6F 2F 32 30 30 37 30 33 30 3).Gecko/2007030
                000000B0 39 20 46 69 72 65 66 6F 78 2F 32 2E 30 2E 30 2E 9.Firefox/2.0.0.
                000000C0 33 0D 0A 41 63 63 65 70 74 3A 20 74 65 78 74 2F 3..Accept:.text/
                000000D0 78 6D 6C 2C 61 70 70 6C 69 63 61 74 69 6F 6E 2F xml,application/
                000000E0 78 6D 6C 2C 61 70 70 6C 69 63 61 74 69 6F 6E 2F xml,application/
                000000F0 78 68 74 6D 6C 2B 78 6D 6C 2C 74 65 78 74 2F 68 xhtml+xml,text/h
                00000100 74 6D 6C 3B 71 3D 30 2E 39 2C 74 65 78 74 2F 70 tml;q=0.9,text/p
                00000110 6C 61 69 6E 3B 71 3D 30 2E 38 2C 69 6D 61 67 65 lain;q=0.8,image
                00000120 2F 70 6E 67 2C 2A 2F 2A 3B 71 3D 30 2E 35 0D 0A /png,*/*;q=0.5..
                00000130 41 63 63 65 70 74 2D 4C 61 6E 67 75 61 67 65 3A Accept-Language:
                00000140 20 72 75 2D 72 75 2C 72 75 3B 71 3D 30 2E 38 2C .ru-ru,ru;q=0.8,
                00000150 65 6E 2D 75 73 3B 71 3D 30 2E 35 2C 65 6E 3B 71 en-us;q=0.5,en;q
                00000160 3D 30 2E 33 0D 0A 41 63 63 65 70 74 2D 45 6E 63 =0.3..Accept-Enc
                00000170 6F 64 69 6E 67 3A 20 67 7A 69 70 2C 64 65 66 6C oding:.gzip,defl
                00000180 61 74 65 0D 0A 41 63 63 65 70 74 2D 43 68 61 72 ate..Accept-Char
                00000190 73 65 74 3A 20 77 69 6E 64 6F 77 73 2D 31 32 35 set:.windows-125
                000001A0 31 2C 75 74 66 2D 38 3B 71 3D 30 2E 37 2C 2A 3B 1,utf-8;q=0.7,*;
                000001B0 71 3D 30 2E 37 0D 0A 4B 65 65 70 2D 41 6C 69 76 q=0.7..Keep-Aliv
                000001C0 65 3A 20 33 30 30 0D 0A 43 6F 6E 6E 65 63 74 69 e:.300..Connecti
                000001D0 6F 6E 3A 20 6B 65 65 70 2D 61 6C 69 76 65 0D 0A on:.keep-alive..
                ...
                #6223
                lexer666
                Participant

                  Привет. 😉

                  Можно как-нибудь быстрее добраться до url’a? Может есть какая-нибуть структура, хранящая его? Т.к. в разных браузерах url в пакете находится разных местах.. 😕

                  Вот еще, открываю я страничку, отправляется большой пакет (500-1000 байт) с запросом и отправляются еще штук 10 маленьких пакетиков по 60-80 байт (причем в них не содержатся слова GET или POST)….для чего они? Кто их шлет? Явно не браузер, тк перехватить и посмотреть их не получается…может какая-то проверка соединения…

                  Заранее спасибо за помощь.

                  #6224
                  Vadim Smirnov
                  Keymaster

                    Можно как-нибудь быстрее добраться до url’a? Может есть какая-нибуть структура, хранящая его? Т.к. в разных браузерах url в пакете находится разных местах..

                    RTFM спецификацию HTTP касательно GET.

                    Вот еще, открываю я страничку, отправляется большой пакет (500-1000 байт) с запросом и отправляются еще штук 10 маленьких пакетиков по 60-80 байт (причем в них не содержатся слова GET или POST)….для чего они? Кто их шлет? Явно не браузер, тк перехватить и посмотреть их не получается…может какая-то проверка соединения…

                    Кто шлет можно проверить с помощью Local Network Monitor http://www.ntkernel.com/w&p.php?id=24. Если в пакетах нет данных, то LNM их не покажет. Тогда это могут быть подтверждения приема данных, которые шлет стек. RTFM cпецификацию протокола TCP.

                    #6225
                    lexer666
                    Participant

                      Добрый день. Вообщем повкуривал я RFC по протоколам IP, TCP, HTTP. 😉 Мне нужно послать HTTP GET запрос примерно следующего содержания:

                      заголовки

                      GET / HTTP/1.1
                      Host: http://www.ntkernel.com

                      для этого я сперва собираю буфера TCP/IP пакета в один символьный массив. Затем инициализирую структуры Ethernet,IP,TCP заголовков, получаю длину всех заголовков и копирую их в новый массив.
                      Вопрос такой: как можно присоединить мои HTTP заголовки к массиву TCP/IP заголовков? Пробовал следующим образом, не получается, видимо проблема с символами перехода на новую строку (в хексе 0d0a):


                      char * myHTTPs;
                      myHTTPs = "GET / HTTP/1.1fnHost: www.ntkernel.com";
                      memcpy(pNewPayload + usHeaders,myHTTPs,sizeof(myHTTPs));

                      Для протоколов прикладного уровня как я понял не нужно инициализировать никакие структуры, или я не прав?

                      #6226
                      lexer666
                      Participant

                        Код исправил, но с отправкой пакета все равно проблемы.


                        char * myHTTPs;
                        myHTTPs = "HEAD / HTTP/1.1rnHost: www.ntkernel.com";
                        size = strlen(myHTTPs) + 1;
                        //копирую HTTP заголовки после TCP/IP заголовков
                        memcpy(pNewPayload + usHeaders,myHTTPs,size);
                      Viewing 10 posts - 1 through 10 (of 10 total)
                      • You must be logged in to reply to this topic.