Proxy를 만드는데 문제가 있습니다.

eurolim의 이미지

대강 구현은 끝났는데 미묘한(하지만 중대한) 문제가 있습니다.

대부분의 웹사이트의 문서와 파일들을 잘 읽는데 유독 파일을 못 읽는 사이트가있습니다.

주로 gif 파일 등으로 화려하게 장식된 일부 사이트에서, 각각 gif 파일 요청시 connection refuse 되면서 화면에 무수한 엑박이 뜨더군요. 어떤곳은 다 잘 나오는데 gif 파일 하나 두개 정도만 안뜨는 사이트도 있구요.

프로그램은 Mult-thread로 구현되어 있고, 미리 수십개 만들어 놓고 Accept에서 block 되어 있는 방식입니다.

느려서 그런건지, thread로 구현해서 생긴 문제인지 알수가 없네요.

그리고 평소에 잘 보이는 사이트도 proxy만 키면 절대 못 읽기도 하더군요. 분석해보니 TopPage 요청을 보내고 나서 recv에서 영영 block...;;

"클라이언트에서 요청을 받아서 서버에 넘겨주고, 서버의 패킷을 클라이언트에 넘겨준다" 라고 단순하게 생각했었는데 뭔가 구현상에서 생기는 문제가 있는건지...

최종적으로 문서 내용을 필터링 하는 Proxy를 만들 예정인데, 알아두면 좋은거라도 있으면, 알려주세면 정말 감사하겠습니다~ ^-^a

liongo의 이미지

흐흠 접속후 recv 후 블럭은 질문내용이 포괄적이어서 모르겠습니다만

보이고 안보이는 페이지 문제는 recv문제와 복합적인 문제일수도

있겠습니다만.. uri parsing.. 이 부분이 조금 의심이 가기도하네요...

저도 python으로 장난감이 필요해서.. proxy 프로그램을 만들었습니다..

참고하실건 브라우저가 프락시서버를 세팅하고 proxy서버에

요청하는 내용을 분석해서 파싱후 해당 웹서버에 재형식화해서

보내야하는데 이부분을 잘체크해보심이....

p.s 파이썬bbs는 왜 검색후 back하면 기간만료페이지가 ㅜ.ㅜ

' 형식이 내용을 규정한다. '

모지리의 이미지

우선 어떠한 방식으로 동작되는지를 자세히 설명해주실수 있으세요.? 저도 버그 투성이 프락시를 만들어 놓고 한참 고생을 했습니다. 지금 남아있는 문제는 dns 케싱 부분이 하나 있습니다. 이거는 dns 케싱을 따로 돌려서 해결할려고 합니다. 하여간 말씀 하신 내용들은 대부분 제가 만들어 본것 같으니 내용을 올려 주시면 어떨까요.? 한가지 미심쩍은 부분은..

브라우저 - 프락시 - 외부 서버

이렇게 있을때 투명 프락시(NAT로 하는거)가 아니라 브라우저에서 프락시 세팅하고 하고 요청을 하게 될 경우에는 헤더를 조작해주셔야만 합니다. 즉,

[정상]
GET posting.php?mode=reply&t=38175 HTTP/1.0
HOST : bbs.kldp.org

[프락시 세팅시]
GET http://bbs.kldp.org/posting.php?mode=reply&t=38175
HTTP/1.0
HOST : bbs.kldp.org
proxy-connection : Keep-alive

와 같이 오게 됩니다. 따라서 후자를 전자와 같이 조작해서 요청하셔야만 할겁니다. 대소문자를 아마 틀렸을거에요. 원래는 일반 http 서버들이 알아서들 잘 파싱해서 응답을 주는데 프락시 모듈을 올려 놓은 http 서버들은 자기가 프락시인줄 착각하고 이상하게 응답을 주는데 기인하게 됩니다.

그리고 필터링의 경우 저는 정규표현식을 썼는데 사용자가 많아지다 보니깐 아무래도 느린것은 어쩔수가 없드라구요. 또 다른 한가지는 에구 아니다.. 하여간 프락시가 간단히만 만들때는 한없이 간단하지만 이게 제대로 동작하게 할려면 오만 잡다한 기능을 다 고려해야 되니 조금 번거러운것 같습니다.

흐~ 자세히 상황을 올려 주시면 제가 아는 범위내에서만 대답해드리겠습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.