<strike id="uc6q2"><menu id="uc6q2"></menu></strike>
  • <strike id="uc6q2"></strike>
  • <strike id="uc6q2"></strike>
  • http tunnel 原理 及 穿透防火墻方法

    2012年01月13日    點擊數: 31751    字體:     

    http tunnel 原理穿透防火墻方法-1

    tunnel很多文章解釋為"隧道", "通道".

    這里所謂的tunnel 是指一種繞過防火墻端口屏蔽的通訊方式, 可以有效地解決防火墻對端口的屏蔽作用.

    原理:
    防火墻兩端的數據包封裝在防火墻所允許通過的數據包類型或是端口上,然后穿過防火墻與對端通訊,當封裝的數據包到達目的地時,再將數據包還原,并將還原后的數據包交送到相應的服務進程上。 

    舉例如下:
    A 主機系統在防火墻之后,受防火墻保護。防火墻配置的訪問控制原則是只允許80端口的數據進出,屏蔽了其他的所有端口.  B主機系統在防火墻之外,是開放的。現在假設需要從A 系統Telnet到B系統上去,怎么辦?
    使用正常的Telnet肯定是不可能了,但我們知道可用的只有80端口,那么這個時候使用http Tunnel,就是一個好的辦法。思路如下:  在A 機器上運行一個Tunnel 的Client端,讓它偵聽本機的一個不被使用的任意指定端口(Port>1024 and port < 65535),如1234. 同時將來自1234端口上的數據導向到遠端(B機)的80端口上(注意,是80端口,防火墻允許通過),然后在B機上運行一個tunnel Server,同樣在80端口上監聽,然后把80 端口上接收到的數據(數據由tunnel client傳來)轉到本機的Telnet 服務端口23,這樣就ok了。

    根據剛才的設置, 數據流程大概是:

    [telnet.exe:任意端口] ---> [tunnel client.exe:1234] ---->[Firewall]---->[tunnel server.exe:80]---->[telnet Server.exe:23]

    說明:
    telnet.exe 和tunnel client.exe 是在同一個機器上的.
    tunnel server.exe 和telnet Server.exe 是在同一臺機器上的.

    按照流程圖:
    telnet.exe:           把發送的數據轉向到tunnel client.exe 的1234 端口
    tunnel client.exe     把數據發送給tunnuel server.exe:80 ( 這次連接外網機器的80端口了, 防火墻應該是沒有異議吧)
    Friewall              只允許80 端口的數據進出.
    tunnel server.exe     負責把接收到的數據轉發給telnet 的服務進程, 并可以接收telnet 服務進程的數據
    telnet Server.exe     把要發送的數據轉給tunnel server.exe,由它把數據經80 端口發給tunnel client.exe.

    HTTP Tunnel原理穿透防火墻方法-2

    這篇文章提供一個通過代理服務器建立TCP 連接來繞過防火墻的方法.
    通常情況下防火墻限制了很多端口的連接,但是HTTP 的連接還是允許的(否則誰也上不了網)。


    協議指定了一個  CONNECT 請求方法. Client 可以使用這個方法通知Proxy Server 連接指定的服務器IP和端口號. Proxy Server
    在接收到這個請求后與指定的服務器IP和端口號建立連接,如果連接失敗會通知Client 并關閉連接,成功則給Client 發送
    "Coonection Established" 并保持連接. 在與Client 和Real Server 建立連接后,Proxy Server 就不關心數據的內容了,此時就表現為tunnel 了.

    [Client]----[FireWall]------>[Proxy Server:80]------->[Real Server]
       |            |               |                           |  
      Src   只允許80端口數據通過   數據轉發                       Dest


    相關協議:

    在Client一端, 我們只對CONNECT 方法感興趣.  在Client 和ProxyServer 建立連接后, Client 必須發送CONNECT 請求.
    格式如下:

    CONNECT :


    ...


    Proxy Server 處理來自Client 的請求, 然后和destionation_address:destination_port 建立連接.


    proxy server 給Client 返回HTTP 回應.
    格式如下:



    ...

    如果Proxy Server 分析Client 請求格式有誤或者與destionation_address:destination_port 連接失敗,都會關閉連接.
    如果成功則可以轉發數據, 作為tunnel 使用.

     

     

     

     

    HTTP隧道(HTTP代理Socket客戶)

     

    HTTP 隧道(HTTP代理Socket客戶)

    環境: VC6

    mr ans


    ※HTTP 隧道※
    --------
    HTTP是基于文本的通過瀏覽器檢索網頁的協議。大多數情況下你躲在代理服務器的后面,通過LAN接入互聯網。在IE的Connection Option中,你給出你的LAN的設置。這個代理服務器運行著基于文本的協議,你從它那里可以得到外界的網絡HTTP相關的數據。是的,用HTTP通過它上面的小的望孔可以連接到外部世界,并用二進制協議得到你想要的數據,或者甚至是你的協議。它通過HTTP。

    字串8

    ※HTTPS 解釋※
    ---------
    在HTTPS中,數據以一種安全的方式從瀏覽器到服務器和從服務器到瀏覽器。它是二進制的協議;當他穿過代理時,代理不知道是什么。代理僅僅允許二進制流打開,讓服務器和客戶兩者之間交換數據。代理服務器認為我們在進行某個安全的會話。

    字串9


    對于HTTPS, 你的瀏覽器連接到代理服務器,并送出一個命令字串9

    CONNECT neurospeech.com:443 HTTP/1.0
    HOST neurospeech.com:443
       【...如果需要,HTTP頭部的其它行以結束】
        // 最后的空行mr ans


    接下來,代理服務器把它作為某個HTTP安全會話,打開一個到需求服務器和端口的二進制流。如果連接確立,代理服務器返回如下回應:m r a n s


    HTTP/1.0 200 Connection Established
             【...忽略所有HTTP頭部的其它行以結束,】
        // 最后的空行

    字串7

    現在,瀏覽器連接到了終端服務器,可以用二進制和安全的方式交換數據了。字串8


    ※怎樣做這個※
    -------------
    現在是你的程序任務去愚弄代理服務器,行為如IE一樣進行Secure HTTP。mr ans

    1. Connect to Proxy Server first.
    2. Issue CONNECT Host:Port HTTP/1.1.
    3. Issue .
    4. Wait for a line of response. If it contains HTTP/1.X 200 , the connection is successful.
    5. Read further lines of response until you receive an empty line.
    6. Now, you are connected to outside world through a proxy. Do any data exchange you want.

    mrans


    示例源代碼www.mrans.com

      // You need to connect to mail.yahoo.com on port 25
      // Through a proxy on 192.0.1.1, on HTTP Proxy 4480
      // CSocketClient is Socket wrapping class
      // When you apply operator << on CString, it writes CString
      // To Socket ending with CRLF
      // When you apply operator >> on CString, it receives
      // a Line of response from socket until CRLF mrans


      try
      {
        CString Request,Response;
        CSocketClient Client;

    字串8

        Client.ConnectTo("192.0.1.1",4480);

    字串8

        // Issue CONNECT Command
        Request = "CONNECT mail.yahoo.com:25 HTTP/1.0";
        Client<

    字串6

        // Issue empty line
        Request = "";
        Client<

        // Receive Response From Server
        Client>>Response;

    m r a n s

        // Ignore HTTP Version

    字串7

        int n = Response.Find(' ');
        Response = Response.Mid(n+1); mr ans

        // Http Response Must be 200 only
        if(Response.Left(3)!="200")
        {
          // Connection refused from HTTP Proxy Server
          AfxMessageBox(Response);
        }

    字串7


        // Read Response Lines until you receive an empty line.
        do
        {
          Client>>Response;
          if (Response.IsEmpty())
            break;
        }while (true);

    字串6


        // Coooooooool.... Now connected to mail.yahoo.com:25
        // Do further SMTP Protocol here.. mrans.com

      }
      catch (CSocketException * pE)
      {
        pE->ReportError();
      }

    mrans.com

      字串6

    ※庫源碼※
    -------------
    文件Dns.h包含所有所有DNS相關的源代碼。它利用了其它的庫,如SocketEx.h, SocketClient.h, 和NeuroBuffer.h 字串6


    ※CSocketEx※
    -------------

    字串6

    作為一個Socket功能的包裹(wapper)類。(如果你不是確切知道CSocket怎樣工作的,它是非常笨重和不可信的)所有的函數根CSocket同名。你可以直接應用這個類

    字串8

    ※CSocketClient※
    -----------------

    mrans.com

    派生自CSocketEx,并且根據詳細的Winsock錯誤拋出適當地例外(exceptions). 為了方便的發送和接收,它定義了兩個操作符, >> 和<<;如果需要它也交換網絡序為主機序和主機序為網絡序。字串8


    ※CHttpProxySocketClient※
    ----------------- www.mrans.com

    派生自CSocketClient, 你可以調用SetProxySettings(ProxyServer, Port) 方法和做代理設置。接下來,你可以連接到你想要的主機和端口。ConnnectTo 方法被覆蓋,它自動的實現了HTTP代理協議并無爭論的給你了一個連接。

    字串6

     

    字串8

    ※怎樣利用CHttpProxySocketClient※
    ---------------------------------
      // e.g. You need to connect to mail.yahoo.com on port 25
      // Through a proxy on 192.0.1.1, on HTTP Proxy 4480
      // CSocketClient is Socket wrapping class
      // When you apply operator << on CString, it writes CString
      // To Socket ending with CRLF
      // When you apply operator >> on CString, it receives
      // Line of response from socket until CRLF
      try
      {
        CHttpProxySocketClient Client;

    字串9

        Client.SetProxySettings("192.0.1.1",1979);

    m r a n s

        // Connect to server mail.yahoo.com on port 25
        Client.ConnectTo("mail.yahoo.com",25);

    m r a n s

        // You now have access to mail.yahoo.com on port 25
        // If you do not call SetProxySettings, then
        // you are connected to mail.yahoo.com directly if
        // you have direct access, so always use
        // CHttpProxySocketClient and no need to do any
        // extra coding. 字串8

      }
      catch(CSocketException * pE) {
        pE->ReportError();
      } 字串7

     

     

     

     

     

     

     

     

     

     

     
    100% ( 4 )
    0% ( 0 )
     

    典型案例

    • 江蘇新寧現代物流股份有限

      江蘇新寧現代物流股份有限公司(以下簡稱“公司”),前身是昆山新寧公共保稅倉儲有限公司,公司始建于1997年,2000年4...

    • 北京中坤投資集團有限公司

      北京中坤投資集團有限公司成立于1995年,目前擁有資產高出800多億人民幣,歷經十余年穩健發展,現已成長為在地產、度假產...

    • QQ客服: 點擊這里給我發消息
    • 用戶Q群:87444984
    Copyright ? 2007-2021 匯訊Wiseuc. 粵ICP備10013541號    
    展開
    日韩精品久久无码人妻中文字幕 | 日韩一区二区三区精品| 成人区人妻精品一区二区三区| 亚洲精品高清视频| 99久久精品国产高清一区二区 | 热久久这里是精品6免费观看| 国产日韩视频一区| 国产剧情精品在线| 日本加勒比在线精品视频| 久久夜色精品国产噜噜亚洲a| 亚洲精品综合久久中文字幕| 久久精品视频免费看| 精品四虎免费观看国产高清午夜| 中文字幕一区精品| 久久精品无码免费不卡| jizz国产精品网站| 亚洲国产综合精品一区在线播放 | 久久无码国产专区精品| 久久精品日日躁精品| 国产国产精品人在线观看| 亚洲精品高清国产一线久久| 97视频在线观看这里只有精品| 精品91自产拍在线观看| 国产精品亚洲视频| segui久久综合精品| 在线观看日韩精品| 无码欧精品亚洲日韩一区 | 日韩在线视频观看| 国产乱人伦偷精品视频下| 国产精品一区二区香蕉| 国产精品一区二区AV麻豆| 国产精品国语对白露脸在线播放| 热久久综合这里只有精品电影| 国产69精品麻豆久久久久| 国产精品99久久久久久人四虎| 亚洲国产综合精品中文第一| 日韩免费精品视频| 久久精品亚洲日本波多野结衣| 超碰97久久国产精品牛牛| 国产精品亚洲а∨无码播放麻豆| 精品免费久久久久久成人影院|