《使用HTTPTunneling技术实现穿透网络防火墙的通信》由会员分享,可在线阅读,更多相关《使用HTTPTunneling技术实现穿透网络防火墙的通信(3页珍藏版)》请在金锄头文库上搜索。
1、第 25卷 第 8期 计 算 机 应 用 与 软 件 Vol125 No. 82008年 8月 Computer App lications and Software Aug. 2008使 用 HTTP Tunneling技 术 实 现 穿 透 网 络 防 火 墙 的 通 信张 方 田 鑫(北 京 工 业 大 学 应 用 数 理 学 院 北 京 100022)收 稿 日 期 : 2006 - 10 - 12。 张 方 ,副 教 授 ,主 研 领 域 :模 式 识 别 与 人工 智 能 。摘 要 近 年 来 ,防 火 墙 在 网 络 中 得 到 了 广 泛 的 应 用 。 它 能 够 比 较 有
2、 效 地 防 范 病 毒 与 黑 客 的 攻 击 ,保 护 网 络 的 安 全 。 但 是 也 带 来了 一 些 不 利 影 响 ,使 一 些 需 要 进 行 网 络 通 信 的 应 用 软 件 系 统 不 能 正 常 工 作 。 介 绍 一 个 解 决 方 案 ,并 且 重 点 介 绍 通 过 HTTP Tunneling技 术 使 用 基 于 文 本 的 HTTP协 议 传 送 二 进 制 数 据 的 方 法 。关 键 词 防 火 墙 HTTP tunnelingREAL IZAT IO N O F COMM UN ICAT IO N RUNN ING THRO UGH F IREW AL
3、LBY HTTP TUNNEL INGZhang Fang Tian Xin( Institute of Applied M athem atics and Physics, B eijing U niversity of Technology, B eijing 100022, China)Abstract In recent years, firewall is app lied extensively in internet. It can defend effectively the attack from virus and hacker and ensurethe security
4、 of internet. But it also brings a lot of p roblem s. The app lication that requiring Network communications can not work normally. Asolution to this p roblem is p rovided. The technique of HTTP turneling is introduced, and a method for binary data transm ission by HTTP p roto2col is mainly discusse
5、d.Keywords Firewall HTTP tunneling0 引 言出 于 安 全 的 考 虑 ,网 络 中 加 入 了 越 来 越 多 的 防 火 墙 。 在 防范 恶 意 攻 击 的 同 时 ,也 使 一 些 分 布 在 广 域 网 上 ,各 模 块 间 使 用TCP / IP协 议 通 信 的 应 用 软 件 系 统 受 到 了 影 响 。 虽 然 可 以 通 过配 置 防 火 墙 来 满 足 软 件 系 统 的 通 信 需 求 ,但 有 时 网 管 拒 绝 修 改防 火 墙 的 配 置 。 有 时 弄 不 清 防 火 墙 的 位 置 和 数 量 。 作 者 参 与 开发 的
6、一 些 应 用 软 件 系 统 就 遇 到 过 这 样 的 问 题 。实 际 上 ,防 火 墙 并 未 完 全 阻 止 网 络 通 信 。 例 如 ,防 火 墙 后 面的 计 算 机 可 以 通 过 防 火 墙 访 问 Internet。 这 一 功 能 一 般 通 过 运行 在 防 火 墙 后 面 的 代 理 服 务 器 来 实 现 。 这 就 提 醒 我 们 ,可 以 借助 HTTP协 议 ,通 过 代 理 服 务 器 来 实 现 应 用 系 统 中 各 模 块 之 间的 通 信 。 为 达 到 这 一 目 的 ,需 要 解 决 两 个 问 题 :第 一 ,借 助 HTTP协 议 ,通 过
7、 代 理 服 务 器 在 软 件 系 统 各 模 块 间 建 立 TCP / IP连 接 ,进 而 实 现 各 模 块 间 的 通 信 。 第 二 ,使 软 件 系 统 的 工 作 方 式 适 合这 种 通 信 模 式 。1 使 用 HTTP Tunneling技 术 穿 透 防 火 墙 通 信使 用 HTTP协 议 的 CONNECT方 法 可 以 通 过 代 理 服 务 器 建立 TCP / IP连 接 ,从 而 借 助 代 理 服 器 实 现 穿 透 防 火 墙 的 通 信 。 与POST、 GET等 方 法 不 同 , CONNECT方 法 不 是 通 过 代 理 服 务 器 转发 一
8、 个 请 求 ,而 是 请 求 通 过 代 理 服 务 器 建 立 到 目 标 地 址 的 连 接 。这 个 连 接 就 像 一 般 的 socket连 接 那 样 ,可 以 直 接 发 送 与 接 收 任意 格 式 的 数 据 。 具 体 做 法 是 :(1) 应 用 程 序 建 立 一 个 到 代 理 服 务 器 的 TCP连 接 。(2) 应 用 程 序 发 送 一 个 包 含 CONNECT方 法 的 HTTP请 求到 代 理 服 务 器 ,格 式 如 下 :CONNECT : . . .(3) 代 理 服 务 器 处 理 这 个 连 接 请 求 并 且 尝 试 建 立 到 : 的 T
9、CP / IP连 接 。(4) 代 理 服 务 器 向 应 用 程 序 发 回 一 个 HTTP响 应 :. . .如 果 code等 于 200,表 示 已 经 在 应 用 程 序 和 :之 间 建 立 了 一 个 “ tunnel” ,也 就 是 一 个 TCP连接 。 双 方 可 以 通 过 “ tunnel” 互 相 发 送 与 接 收 任 何 类 型 数 据 ,直到 连 接 关 闭 。如 果 code不 等 于 200,表 示 应 用 程 序 和 : 之 间 的 连 接 未 建 立 成 功 。(5) 如 果 成 功 地 建 立 了 “ tunnel” ,就 像 建 立 了 一 般 的
10、 socket连 接 那 样 ,使 用 (1)中 建 立 的 TCP连 接 ,通 过 “ tunnel” 发 送 与 接收 数 据 。(6)关 闭 到 代 理 服 务 器 的 连 接 ,这 也 意 味 着 “ tunnel” 被 关闭 。示 例 函 数 如 下 。 函 数 从 建 立 socket开 始 ,说 明 了 所 有 必 须的 步 骤 和 “ tunnel” 的 使 用 方 法 。 为 了 简 单 ,例 子 中 socket采 用 了阻 塞 模 式 ,代 码 中 没 有 进 行 错 误 处 理 。BOOL SendAndRecvThroughAProxyServer( char3 p
11、szProxyIP, / /代 理 服 务 器 IPint nProxyPort, / /代 理 服 务 器 端 口char3 p szDesIP, / /目 的 IPint nDesPort, / /目 的 端 口char3 szSendData, / /发 送 的 数 据int& nDataLen, / /发 送 /接 收 的 数 据 长 度char3 szRecvData) / /接 收 的 数 据BOOL bRes = FALSE;/ /建 立 socketSOCKET m_hSocket;m_hSocket = socket( PF_ INET, SOCK_STREAM, 0) ;/
12、 /转 换 代 理 服 务 器 的 IP地 址 和 端 口 号 到 规 定 格 式SOCKADDR_ IN sockAddr;sockAddr. sin_fam ily =AF_ INET;sockAddr. sin_addr. s_addr = inet_addr(p szProxyIP) ;/ /代 理 服 务 器 的 IP地 址sockAddr. sin_port = htons( nProxyPort) ; / /代 理 服 务 器 的 端 口 号/ /连 接 到 代 理 服 务 器connect(m_hSocket, ( SOCKADDR3 ) &sockAddr, sizeof(
13、sockAddr) ) ;char szL ine 1024 ;/ /建 立 一 个 仅 包 含 CONNECT方 法 的 HTTP请 求sp rintf( szL ine, CONNECT % s: % d HTTP /1. 0 r n r n , p szDesIP,nDesPort) ;/ /发 送 HTTP请 求send (m_hSocket, szL ine, str1en ( szL ine) , 0) ;/ /接 收 代 理 的 响 应 中 的 第 一 行 ,这 一 行 包 含 了 连 接 建 立 状 态 代 码for( int n = 0; recv(m_hSocket, &s
14、zL ine n , 1, 0) &szL ine n ! = n ; n + + ) ;szL ine + + n = 0;/ /查 看 代 理 服 务 器 的 响 应char3 pCode = strstr( szL ine, ) ;if( strncmp (pCode + 1, 200 , 3) = = 0) / /状 态 码 = = 200,到 目 的 IP:目 的 端 口 的 连 接 已 经 建 立/ /读 代 理 服 务 器 响 应 的 剩 余 行 ,不 必 处 理dofor( n = 0; recv(m _hSocket, &szL ine n , 1, 0) & ( szL i
15、ne n != n ; n + + ) ;szL ine + + n = 0;while ( ! ( ( n = = 2) &( szL ine 0 = = r ) &( szL ine 1 = n ) ) ) ;/ / tunne1已 经 建 立 ,可 以 象 一 般 的 socket那 样 接 收 或 发 送 数 据/ /发 送 数 据 到 目 的 IP:目 的 端 口send (m_hSocket, szSendData, nDataLen, 0) ;/ /从 目 的 IP:目 的 端 口 接 受 数 据nDataLen = recv(m_hSocket, szRecvData, nDa
16、taLen, 0) ;bRes = TRUE;/ /关 闭 socketclosesocket(m_hSocket) ;return bRes;需 要 特 别 指 出 的 是 。 一 旦 HTTP Tunnel建 立 ,接 收 、 发 送 数据 与 使 用 一 般 的 socket没 有 区 别 ,可 以 通 过 HTTP Tunnel发 送或 接 收 任 何 类 型 的 数 据 。 通 过 上 面 的 例 子 可 以 看 到 ,应 用 软 件改 变 为 使 用 HTTP Tunnel方 式 通 信 所 需 的 修 改 是 很 少 的 。2 调 整 软 件 系 统 的 工 作 模 式应 用 程 序 可 以 通 过 HTTP Tunnel穿 透 防 火 墙 自 由 地 通 信 。但 是 建 立 HTTP Tunnel需 要 先 连 接 到 代