Локальный прозрачный прокси

Тема в разделе "WASM.NETWORKS", создана пользователем psu, 19 ноя 2008.

  1. psu

    psu New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2006
    Сообщения:
    198
    Пишу прогу для фильтрации http-траффика. Идея: слушаем 127.0.0.1:<порт>, настраиваем браузер на использование прокси 127.0.0.1:<порт>. Все запросы, не анализируя, отправляем по назначению, ответы фильтруем как угодно. Пробую реализовать на синхронных сокетах.

    Код (Text):
    1. bind( sock, ( sockaddr* )&addr, sizeof( addr ) );
    2. ..
    3. listen( sock, 100 )
    4.  
    5. while(1)
    6. {
    7. ..
    8. sock_in = accept( sock, ( sockaddr* )&inaddr, &sz );
    9.  
    10. //создаю поток, реализующий прозрачный http прокси
    11. }
    В потоке опять же цикл: не завершаю поток, пока сервер или браузер не закроют соединение.
    Вот.
    А проблема вот в чем: в определенный момент то-ли браузер перестает слать запросы, то-ли прокси перестает их принимать. Все как-бы висит, через некоторое время запросы могут возобновиться ( "ctrl+f5"-подобные действия в браузере ). Что здесь не так? Может не стоит держать соединения, а закрывать сокет зразу после завершения приема-передачи? Но тогда прокси будет медленнее работать, как мне кажется, да и http 1.1 протокол по умолчанию работает с постоянным соединением.
     
  2. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    может стоит поставить таймаут на разрыв соединения (т.е сокет закрывать при том что нет ответа определенное время)
     
  3. psu

    psu New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2006
    Сообщения:
    198
    На сколько я вижу по своим логам, ответ есть. Перепроверю еще раз, но, кажется, проблема не в этом. Еще раз поясню. Есть цикл:
    1. принять запрос от браузера (recv 1 )
    2. соединиться с сервером (connect)
    3. переслать запрос серверу(send 1)
    4. получить ответ от сервера(recv 2)
    5. переслать ответ браузеру(send 2)

    После этого, если все connect/recv/send завершились без ошибок, возврат к п.1, не закрывая соединения. Т.е, на следующем цикле пропускаю соединение ( п.3 ). Так до тех пор пока нет ошибок приема/передачи. После этого закрываю сокеты и завершаю поток.
    Где здесь ошибка?
     
  4. psu

    psu New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2006
    Сообщения:
    198
    Поставлю вопрос по-другому: надо ли закрывать сокет после завершения каждого приема-передачи? Или браузер попробует использовать тот же сокет ( = соединение ) для следующего запроса?
    З.Ы. Протокол хттп знаю
     
  5. osrootd

    osrootd New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    1.086
    Надо.
    И поток очищать тоже надо.
     
  6. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    если хттп 1 - то да
    если хттп 1.1 и кипалайв - то нет
     
  7. osrootd

    osrootd New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    1.086
    wsd
    Он сказал что знает HTTP, и я думаю что знает про KEEP-ALIVE
     
  8. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    osrootd
    плохо наверно
    кроме нас c тобой(osrootd) здесь никто(в этом топике) не знает ;)
     
  9. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    wsd
    Самомнение -- великая вещь!
     
  10. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    censored
    йой
    так тебя здесь не было, когда это говорилось :)
     
  11. Com[e]r

    Com[e]r Com[e]r

    Публикаций:
    0
    Регистрация:
    20 апр 2007
    Сообщения:
    2.624
    Адрес:
    ого..
    и меня (:
     
  12. psu

    psu New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2006
    Сообщения:
    198
    А вот это, ты, наверное, тоже читал
    http://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html#sec8.1.2
    http://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html#sec8.1.2.1
     
  13. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824