HttpTunnel解读和防御

HTTPTunnel测试 HTTPTunnel 阅读详情
1. 简介

httptunnel是通过HTTP通道来传输其他协议数据的工具软件,下载地址为:http://www.http-tunnel.


com,目前最新版本3.0.5




2. htc


htc是客户端,安装在防火墙内部网络一侧


htc源文件包括htc.c, common.c, tunnel.c, http.c, base64.c这几个文件和port目录下的库


程序流程:

main.c (htc.c)

  parse_arguments (argc, argv, &arg); 解析命令行参数, htc.c


  如果转发端口 (arg.forward_port != -1),在此端口打开socket监听 s = server_socket (arg.forward_port, 0), 

      backlog=0, 其实不收连接, 注意用了SO_REUSEADDR选项, common.c;


  进入死循环 for (;;);

    如果定义输入输出的终端设备(arg.device),打开设备fd = open_device (arg.device),common.c;


    否则如果定义了转发端口(arg.forward_port != -1),输入输出通过连接的socket来进行fd = wait_for_connection_on_socket (s),就是accept() , htc.c;


    打开一个新的通道  tunnel = tunnel_new_client (arg.host_name, arg.host_port,

      arg.proxy_name, arg.proxy_port,

      arg.content_length); tunnel.c

    注意tunnel结构中的in_fd, out_fd都初始化为-1,表示没有连接, 缺省的content_length是100K字节.


    设置通道的一些选项:strict_content_length, keep_alive, max_connection_age, user_agent这些在HTTP头说明中会用到, 支持代理;  


    如果要进行代理认证(arg.proxy_authorization != NULL),将认证参数进行base64编码,作为通道的proxy_authorization参数;


    通道连接对方tunnel_connect (tunnel), tunnel.c, 建立http tunnel,主要是调用

      函数tunnel_write_request (tunnel, TUNNEL_OPEN, auth_data, sizeof auth_data)

        如果要写入和已经写入的数据长度超过content_length, 对tuenel进行填充;

          对于客户端已经连接好的tunnel,超时时进行断开;

          对于断开(或第一次连接)的客户端, 调用tunnel_out_connect (tunnel)发起连接

            调用do_connect()连接服务器(第一个连接), socket描述符为tunnel->out_fd.

            设置该socket的一些选项;

            调用shutdown(out_fd, 0), 不接收数据;

            调用http_post()函数向服务器发送HTTP的POST命令; http.c



          调用tunnel_write_data (tunnel, &request, sizeof request)函数向服务器写要执行的请求(此时为TUNNEL_OPEN)



          继续写data部分,先写长度,然后是数据(此时为dummy的auth_data=42, length=1)

          (即HTTP的POST命令向服务器写TUNNEL_OPEN命令和一个dummy数据)

          然后进行数据长度判断是否在此连接中数据写多了


      进入函数tunnel_in_connect (tunnel) , 数据进入的连接

        调用do_connect()连接服务器(第2个连接),socket描述符为tunnel->in_fd.

        设置该socket的一些选项;

        调用http_get()函数向服务器发送HTTP的GET命令; http.c

        调用shutdown(in_fd, 1), 不再写数据;

        调用http_parse_response (tunnel->in_fd, &response)解析HTTP服务器返回数据;

        处理统计信息

    此时tunnel_connect完成


    进入下一个循环

      poll选择用户的输入设备fd和网络tunnel的in_fd(第2条连接)数据,也就是用户的输入信息和服务器返回的信息进行对倒:

                        fd输入->tunnel->out_fd输出; tunnel->in_fd输入->fd输出.

      handle_input()

        handle_device_input()处理用户输入信息, common.c

      handle_input()

        handle_tunnel_input()处理来自通道的信息, common.c


客户端一共向服务器发起了两个连接, 第一个连接用于发送数据,第2个连接用于接收数据




3. hts


hts是服务器端,安装在外部网络一侧


hts源文件包括hts.c, common.c, tunnel.c, http.c这几个文件和port目录下的库


main() (hts.c)

  parse_arguments (argc, argv, &arg); 解析命令行参数, hts.c


  调用tunnel = tunnel_new_server (arg.port, arg.content_length)建立新的tunnel的服务端;

    初始化tunnel, in_fd, out_fd都为-1

    在tunnel->server_socket监听 server_socket (tunnel->dest.host_port, 1), backlog=1, 注意用了SO_REUSEADDR选项, common.c;


  设置通道的一些选项:strict_content_length, keep_alive, max_connection_age, 这些在HTTP头说明中会用到;  


  写PID文件


  进入死循环

    如果定义输入输出的终端设备(arg.device),打开设备fd = open_device (arg.device),common.c;

    tunnel_accept接受外部连接, tunnel.c

      accept()连接

      解析HTTP协议请求数据: http_parse_request (s, &request), http.c

        POST或PUT命令, 将此socket设置为tunnel的in_fd, 用于接收客户端的数据;

        GET命令, 将此socket设置为tunnel的out_fd, 用于发送去往客户端的数据;

    如果设置了转发端口(arg.forward_port != -1), 调用do_connect连接到这个端口,描述符为fd, 注意这个连接是本机的

         自己连自己的内部连接, hts起到代理转发作用, 目标端口也就是真正的被HTTP包裹的协议端口.

    进入下一个循环

      poll: fd 和tunnel->server_socket, 也就是网络通道数据和内部连接数据对倒

      handle_input()

        handle_device_input()处理fd输入信息, common.c

      handle_input()

        handle_tunnel_input()处理来自通道的信息, common.c


服务器端接收了客户端的两个连接, POST命令对应的连接服务器接收数据, GET命令对应的连接服务器


发送数据

    


4. 防御


对于http tunnel的防御, 可以根据以下方面(或的关系):

1)过滤POST/GET URL关键字: "/index.html?crap="

2)htc发的HTTP请求部分并不在一个包内发完, 分多次小包发送, 可以严格限制此类连接;

3)HTTP数据一般都是成比较大的块的,如果在连接中发现多次传输小包,可能是http tunnel;

4)根据数据行为检查,如果两机器间的HTTP同时存在POST/PUT和GET的连接,而且数据传输并不是很顺畅


,总有一定中断然后突发一阵,可能是http tunnel;


5. 总结


http tunnel利用HTTP的POST和GET两个命令建立了两个连接, 分别用于客户端向服务器发送和接收数


据, 而且考虑到了HTTP数据的合法性, 会随时检查所接收或发出的数据是否超过content-length规定


的长度, 如果是则填充完后重新开连接进行处理新的数据, 保证了数据始终是合法的HTTP数据, 完全


等价于客户端在同时用HTTP协议在上传和下载一个大文件, 文件数据中不需要不需要任何的HTTP命令


或HTML语言标志, 某篇文章中试图以此来检查是行不通的.


对于http tunnel的防御, 由于它完全遵守了HTTP协议, 用HTTP协议异常来检测是检测不到的, 防御


的1,2措施只是制标, 因为代码公开, 完全可以修改成其他URL和完整的HTTP包头一次发送; 防御3,4只


是理论上的,需要相当的智能化处理才有可能不误伤正常HTTP数据, 资源消耗大,更适合在IDS而非防火


墙上进行.

NSL-KDD入侵检测数据集完整使用指南:从解压到模型评估 网络入侵检测是网络安全领域的核心任务,机器学习模型需要高质量的数据集来训练和评估。NSL-KDD作为经典的入侵检测基准数据集,通过去除冗余样本和难度分级,有效解决了KDD Cup 99中模型“背样本”导致的评估失真问题,被广泛用于异常检测算法的对比研究。本文从数据集背景出发,详细解析其41维特征的四大分类——TCP连接基本特征、内容特征、基于时间与基于主机的统计特征,并给出标签映射、One-Hot编码、标准化以及测试集隔离等预处理关键步骤。在此基础上,以随机森林为例演示模型训练与评估流程,分析特征重要性及二 阅读详情

相关推荐

httptunnel:在HTTP请求中通过隧道传输的双向数据流

httptunnel:在HTTP请求中通过隧道传输的双向数据流

HttpTunnel技术介绍

1. 概述 HttpTunnel(也叫Http隧道,Http穿梭),是这样一种技术: 它用HTTP协议在要通信的Client和Server建立起一条”Tunnel”,然后Client和Server之间的通信,都是在这条Tunnel的基础之上。 HttpTunnel通常被用在受限的网络环境中,比如在NAT环境中的Client,受防火墙限制的环境中的Client等,在这样的环境中,Clie

kobejayandy的专栏 2977

用STM32F407做个USB声卡:从CubeMX配置到播放录音全功能实战(附源码)

本文详细介绍了如何使用STM32F407开发板实现USB音频设备的全功能实战,包括CubeMX配置、硬件连接、音频流处理和性能优化。通过双缓冲DMA机制和音频数据处理流程,开发者可以构建高质量的USB声卡系统,适用于录音和播放场景。附源码,助力快速上手STM32音频开发。

weixin_30301449的博客 516

13 | HTTP Tunnel:复杂网络下消息通道高可用设计的思考

在第 1 讲“架构与特性:一个完整的 IM 系统是怎样的?”中,有讲到即时消息系统中非常重要的几个特性:实时性、可靠性、一致性、安全性。实际上,这些特性的实现大部分依赖于通道层的稳定和高可用。对于即时消息系统来说,消息的通道主要承载两部分流量:一部分是用户发出的消息或者触发的行为,我们称为;一部分是服务端主动下推的消息和信令,我们称为。由此可见,消息通道如果不稳定,一来会影响用户发送消息的成功率和体验,二来也会影响消息的下推,导致用户没法实时收到消息。

qq_37756660的博客 1475

抖音直播间人气接口算法 抖音协议

抖音直播间人气接口算法 抖音协议 抖音算法

Q44804487的博客 1万+

HDFView安装及使用教程

简介:直接用记事本打开hdf5文件的话,是一团乱码。HDFView是用来查看hdf5文件的软件,可以免费使用,好多人都有闪退的情况,这是因为没有添加环境变量。

qq_43722079的博客 7万+

Http tunnel技术介绍

什么是http暗藏通道?什么是局域网安全,系统管理员怎样才能保障局域网的安全?这是一个不断变化的安全概念,很长的一个时期以来,在局域网与外界互联处放置一个防火墙,严格控制开放的端口,就能在很大程度上掌握安全的主动权,方便的控制网内外用户所能使用的服务。比如,在防火墙上仅仅开放80,53两个端口,那么无论是内部还是外面的恶意人士都将无法使用一些已经证明比较危险的服务。  但要注意一点,防火墙在某种意...

G 6213

手把手教你学Simulink--H桥逆变器的PWM控制设计与仿真

本文详细介绍了如何在Simulink环境中设计和仿真一个基于PWM控制的H桥逆变器。H桥逆变器广泛应用于电机驱动、UPS和可再生能源系统等领域,通过PWM技术可以有效控制输出电压的幅度和频率,减少谐波失真,提高系统效率和稳定性。文章首先介绍了所需的工具和环境,包括MATLAB/Simulink和SimscapeElectrical工具箱。接着,详细阐述了从定义任务需求、创建Simulink项目、建立基础电气模型、集成传感器模型、实现PWM控制算法到设置仿真参数和运行仿真的完整步骤。最后,文章总结了通过Sim

MHD0815的博客 718

HTTP协议中的Tranfer-Encoding:chunked编码解析

 当不能预先确定报文体的长度时,不可能在头中包含Content-Length域来指明报文体长度,此时就需要通过Transfer-Encoding域来确定报文体长度。    通常情况下,Transfer-Encoding域的值应当为chunked,表明采用chunked编码方式来进行报文体的传输。chunked编码是HTTP/1.1 RFC里定义的一种编码方式,因此所有的HTTP/1.1应用都应当支

牧码人的专栏 2687

CondaHTTPError: HTTP 404 not found for url https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs解决方案

本文主要介绍了CondaHTTPError: HTTP 404 not found for url https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main解决方案,希望能对使用xx的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 17万+

让 SAP HANA 查询飞起来:彻底避开隐式类型转换的性能暗礁

SAP HANA性能优化:警惕隐式类型转换陷阱 隐式类型转换是SAP HANA项目中常见的性能隐患。当SQL表达式两侧数据类型不匹配时,系统会自动进行类型转换,这种看似便利的操作可能导致: 过滤条件无法下推,扫描范围扩大 列存引擎优势丧失,触发中间结果物化 执行计划走向低效路径 治理方案包括: 从源头统一数据类型,确保常用比较字段类型一致 将显式转换应用于常量而非整列 使用生成列预先转换存储,避免运行时计算 排查方法: 通过SQL Plan Cache定位高频查询 分析执行计划中的转换迹象 重点关注VARC

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 11万+

Http Trunked协议使用

1. 为什么要使用Http Trunked协议? 一般http通信时会使用content_length头信息来表示服务器发送的文档内容长度,这是因为我们已经提前知道了文档内容的长度,但 有时候我们无法提前知道我们需要传输的文档的长度,这时我们就要采用分块传输的方式来发送内容,也就是通过我们的http trunked协议。 Http1.1x协议的chunked编码方式,可以确保接...

weixin_34014555的博客 822

把 ABAP ALE Change Pointers 讲透:从 CDHDR/CDPOS 到 BDCP2,再到 RBDMIDOC 的自动分发链路

摘要:SAP ALE Change Pointers机制在系统集成中实现业务变更与数据分发的解耦。它记录业务对象变更(如SAP主数据修改),但不立即发送,而是由后续分发逻辑决定发送时机和方式。该机制包含两层:Change Documents记录审计级变更明细,Change Pointers标记需分发的关键变更。配置核心包括全局开关、消息类型激活和字段选择。典型应用如零售价格条件变更自动推送至POS系统,通过BDCP2表存储待处理队列,由RBDMIDOC程序定时评估生成IDoc。运维需关注定期清理和性能优化,

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 209

Http chunk方式传输数据

Http协议 响应格式: HTTP/1.1 200 OK\r\n [HeaderKey]:[空格][HeaderValue]\r\n [HeaderKey]:[空格][HeaderValue]\r\n [HeaderKey]:[空格][HeaderValue]\r\n ......这里省略很多 \r\n [数据区] 请求格式: GET/POST[空格][相对或者绝对路径][空格]H

naruto_Mr的专栏 8434

复现论文《基于Retinex理论和深度学习的低照度图像增强算法研究》

本研究提出两种基于Retinex理论和深度学习的低照度图像增强算法。第一种算法在HSV色彩空间中进行处理,采用Res2Block和CBAM-Res2block模块增强多尺度特征表示;第二种算法使用多尺度残差U型网络结构。复现代码展示了Res2Block、CBAM注意力机制等核心模块的实现,包括多尺度特征提取、通道和空间注意力机制。实验结果表明,所提算法能有效解决低照度图像存在的亮度低、对比度不足、颜色失真和细节丢失等问题,显著提升图像质量。

max500600的博客 388

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

什么是HTTP协议中的隧道(Tunneling)?

想象一下,你正在玩一个穿越地下隧道的游戏。在这个游戏里,隧道可以帮助你从一个地方安全地到达另一个地方,而不会被人发现。HTTP协议中的隧道,就像这样一个虚拟的、安全的通道。

长风破浪会有时的博客 444

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

几种建立http-tunnel的方法

基本概念不多解释了,直入主题。GNU HTTP Tunnel (http://www.nocrew.org/software/httptunnel.html)是一个开源的http-tunnel项目,包括了tunnel server(hts命令)和tunnel client(htc命令),有(x)nix和windows版本。我们就用它来建立自己的tunnel。1。静态tunnel。        h

Builder的空间 8047

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

HTTP隐蔽隧道工具--pystinger流量特征检测分析

毒刺(pystinger)通过webshell实现可直接用于metasploit-framework,viper,cobalt strike上线.主体使用python开发,当前支持php,jsp(x),aspx三种代理脚本.

qq_36259703的博客 484

HTTP Tunnel使用的几种使用 经典

HTTP Tunnel使用的几种使用 经典

gftygff的博客 1万+

http隧道

http权威指南对于隧道的解释是: 隧道(tunnel) 是建立起来之后, 就会在两条连接之间对原始数据进行盲转发的HTTP 应用程序。 HTTP 隧道通常用来在一条或多条 HTTP 连接上转发非 HTTP 数据, 转发时不会窥探数据。HTTP 隧道的一种常见用途是通过 HTTP 连接承载加密的安全套接字层(SSL,Secure Sockets Layer) 流量, 这样 SSL 流量就可以穿过...

yydounai的博客 5651

你了解HTTP协议吗?(四)

前面博客简单的介绍完了代理服务器的长短连接,HTTP消息在服务器端的路由,代理服务器转发消息时的相关头部,请求与响应的上下文,内容协商和资源表述,HTTP包体的传输方式,HTML form 表单提交时的协议格式,断点续传与多线程下载如何做到,Cookie的格式与约束,Session的工作的原理。今天我们继续看剩下的内容。为什么需要同源策略同一个浏览器发出的请求,未必都是用户自愿发出的请求只有page.html是用户发出的,其他请求是浏览器自动发出的站点domain-b.com收到的来自同一浏览器的请求,可能

了不起的盖茨比的博客 814
上一篇: 在TCP三次握手后插入伪造的TCP包
下一篇: 伪造TCP连接进行数据传输的D.o.S
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值