學寫 HTTP Tunnel
来源:互联网 发布:极限脱出 知乎 编辑:程序博客网 时间:2024/05/16 06:54
我有位朋友, 佢做嘅公司 block 咗所有 IM 同 Web IM. 唯一可以用嘅就係 Gmail 入面嘅 Google Talk. 但係近幾日, Gmail 去倒, 但係 Google Talk 就 block 咗. 要同佢傾計, 唯有狂 send Gmail 啦...
我想學一下點寫 HTTP push, 所以好快手咁寫咗個 HTTP Tunnel 出黎, 仲可以係 IIS 同 UltiDev Cassini 上面行, 亦都學咗好多嘢, 我想係呢度 conclude 一下學咗啲咩. 係 conclude 之前想提返大家少少關於 tunneling 嘅嘢.
- HTTP 係 half-duplex, 要 tunnel 一條 full-duplex TCP, 就要用兩條 HTTP connection
- Client 個程式 listen 住 localhost:12345, 咁所有 traffic 開去呢個 port, 就會 encapsulate 落 HTTP packet 入面, 再 send 去 tunnel server
- Server 接到 packet, 就會用 blocking 嗰條 HTTP push channel, 去 send 返俾 client
- 理論上, 雖然係開 local resources 嘅嘢, 但係 IIS 唔應該會有問題
咁以下就係學倒嘅嘢
- 有兩條 HTTP, 一條係 Client -> Server, 另一條係 Server -> Client
- Client -> Server, 呢條只不過係普普通通嘅 Web Services 都得, 因為係 client 去 server, 就好似 HTTP model 咁, 亦都唔會 blocking
- Server -> Client, 呢條就會 block 住, 直到有 data 或者 timeout
- 如果用 Web Services 寫第二條, 佢會 block 住之後所有嘅 request, 即係第一條係唔俾人 block connect, 唔知點解, 我亦唔可以開兩個 Worker Process (因為 socket 只會 bind 住其中一個)
- 要咁寫, 一定要用 .ASHX (Generic Handler), 唔一定要 IHttpAsyncHandler, 普通嘅 IHttpHandler 都得
- 如果 send 唔用 .ASHX, 就會有機會 block 住 receive, 所以兩個都應該寫 .ASHX
- HttpWebRequest.Proxy 唔 set 嘅話, 係唔會行倒 ISA server 嘅 NTLM authentication
- WinInet 開嘅 HTTP connection 係有限制, 去 HTTP 1.1 最多兩條, HTTP 1.0 最多四條
- Local server 係無呢個 limit
- Registry 有得 set, 不過唔係好 work
- FireFox 有可能會開 8 條, 最少 2 條, 可以人手較, 但係唔方便, 亦都唔係 workaround, 因為我想用 MSN Messenger
- 寫個程式時要 limit 只係會開 2 條, 張 N 條嘅 connection encapsulate 入呢兩條入面
- 用 observer pattern 去管理 connection 嘅 closure
- 因為 WinSock 有兩種 closure: graceful 同 reset
- 又因為你有兩個 socket 可以收 closure
- 所以, 你有 4 種 closure 方法
- 用 observer pattern 最簡單, 不過你最好寫個 manager 去做管理, 唔可以只係一個 List<> 就攪掂
最終, 訓咗兩晚覺就攪掂咗個程式, 仲可以行 HTTPS. 用咗大概 42 小時, 但係實際落手做只係做咗 11 個鐘左右.
p.s. 有 PortReverser + HttpTunnel, 就可以夾埋做一個 traverse NAT/HTTP firewall 嘅 package
- 學寫 HTTP Tunnel
- http tunnel使用简介
- http-tunnel使用简介
- http tunnel && http connect method
- HTTP-Tunnel Technology 客户端解决方案
- http tunnel(for penetrating firewall)
- tunnel
- 几种建立http-tunnel的方法
- 几种建立http-tunnel的方法
- 几种建立http-tunnel的方法
- 几种建立http-tunnel的方法
- 几种建立http-tunnel的方法
- convert ssh tunnel to http proxy
- http tunnel 原理 及 穿透防火墙方法
- 突破防火墙的限制http tunnel
- Http隧道(tunnel)技术与Proxy
- http tunnel 原理 及 穿透防火墙方法-1
- HTTP Tunnel 原理 及 穿透防火墙方法-2
- Win2003服务器下的完全克隆
- gridview 实现在GridView内部进行单行编辑
- 打微软补丁的一份代码
- 简单易用的 commons-email-1.1.jar
- C/C++ 相关笔试题(1)
- 學寫 HTTP Tunnel
- C#:C#的多线程机制探索
- linux下mysql的安装步骤,
- 动态修改SiteMapPath(整理)
- DEELX 正则表达式引擎
- PHP 常用正则表达式收集
- VC 注册表操作(转载)
- arcobjects,IRing与Ipolygon转换
- 平淡生活:调查最简单的cn网址