内网穿透-ICMP协议

 

ICMP协议


 

通常我们的ping、tracert命令是可以无视防火墙进行出网的,而ping、tracert 就是利用的ICMP协议

 

ICMP协议是Internet控制报文协议。它属于网络层协议,是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。

 

ICMP报文格式如下啊,可以看到icmp是有数据data部分的

 

 

我们ping一下8.8.8.8并抓个icmp的包看看

 

 

ICMP报文里面的类型、代码、校验和什么的我们不用管,重要的是数据部分(data)

 

可以看到啊,我们ping了8.8.8.8,icmp报文的data竟然是abcd......,一看就是没用的填充字符啊

 

返回包也是abcd.....这些填充字符

 

ICMP隧道技术


 

可以看出ICMP的数据是没用的,如果我们能利用这点空间将abcd改为我们的信息,俩主机互相ping就能传递信息了!

而且ICMP报文是由系统内核处理不占用任何端口,随便你防火墙拦截端口,又拦不住我ICMP。

 

所以现在的ICMP隧道技术,基本采用修改ICMPECHO和ICMPECHOREPLY两种报文,把消息隐藏在数据中,利用ping或 tracert 命令建立隐蔽通道。

 

工具


 

常用的ICMP隧道工具有:icmpsh、Pingtunnel、powershell icmp 、icmptunnel

 

Icmptunnel

linux工具icmptunnel, 可以将IP流量封装到ICMP echo请求和回复(ping)包中, 通过icmp建立通道穿透防火墙出网

项目地址:https://github.com/jamesbarlow/icmptunnel

项目地址:http://github.com/DhavalKapil/icmptunnel

 

场景:一台我的vps主机A(192.168.10.1),一台linux目标主机B,只能ICMP协议出网

 

AB主机先git下来然后编译该工具

git clone https://github.com/jamesbarlow/icmptunnel.git
make

AB主机都需要禁用自带的icmp

sysctl -w net.ipv4.icmp_echo_ignore_all=1
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

 

A主机为服务器端,以root权限进行监听

./icmptunnel -s
(ctrl-z  bg)

这时他会创建一个隧道接口tun0,我们需要分配一个ip地址

/sbin/ifconfig tun0 10.10.1.1 netmask 255.255.255.0

 

B主机进行回连A主机

./icmptunnel
opened tunnel device: tun0
connection established.
(ctrl-z  bg)

连接成功同样创业一个隧道接口tun0,需要配置一下ip

/sbin/ifconfig tun0 10.10.1.2 netmask 255.255.255.0

 

这样我们就有了icmp协议搭建的隧道,我们就可以使用此10.10.1.0/24网段访问B主机

 

比如ssh连接B主机

ssh xiaogang@10.10.1.2

 

或者使用ssh的端口转发开启socks代理,可见《内网穿透-ssh转发技术》

ssh -CfNg xiaogang@10.10.1.2 -D 127.0.0.1:1080

这样就可以设置浏览器代理或全局代理连接 socks://VPS:1080

 

下面是我用浏览器连接A主机的1080端口,访问B主机的web页面

看到这里的大佬,动动发财的小手 点赞 + 回复 + 收藏,能【 关注 】一波就更好了

我是一名渗透测试工程师,为了感谢读者们,我想把我收藏的一些网络安全/渗透测试学习干货贡献给大家,回馈每一个读者,希望能帮到你们。

干货主要有:

① 2000多本网安必看电子书(主流和经典的书籍应该都有了)

② PHP标准库资料(最全中文版)

③ 项目源码(四五十个有趣且经典的练手项目及源码)

④ 网络安全基础入门、Linux运维,web安全、渗透测试方面的视频(适合小白学习)

⑤ 网络安全学习路线图(告别不入流的学习)

 渗透测试工具大全

⑦ 2021网络安全/Web安全/渗透测试工程师面试手册大全

各位朋友们可以关注+评论一波 然后加下QQ群:581499282  备注:优快云  联系管理大大即可免费获取全部资料

注意


 

我们想通过ICMP协议打通隧道,需要服务端和客户端都能使用ICMP协议,也就是能互相ping通。

### 无公网IP的内网穿透解决方案 在没有公网IP的情况下,实现内网穿透可以通过多种技术手段完成。以下是几种常见的方案及其适用场景: #### 1. 使用第三方内网穿透服务 第三方内网穿透服务如 ngrok[^4] 提供了简单易用的解决方案,用户无需拥有公网IP即可实现内网服务的外网访问。ngrok 支持 HTTPS 和自定义域名,并且内置了访问控制功能以增强安全性。然而,需要注意的是,ngrok 更适合开发和测试环境,生产环境中应谨慎使用,因为可能存在安全性和稳定性问题。 #### 2. 借助拥有公网IP的中间服务器 如果没有直接的公网IP,可以借用一台拥有公网IP的中间服务器作为中转站。FRP(Fast Reverse Proxy)[^2] 是一种高效的内网穿透工具,它通过将内网服务的流量转发到中间服务器上,从而实现外网访问。FRP 的配置相对简单,支持多种协议和端口转发,适用于大多数场景。 #### 3. 利用 DNS 隧道技术 DNS 隧道是一种通过 DNS 协议传输数据的技术[^1]。即使网络环境对其他协议进行了严格限制,通常也会允许 DNS 请求通过。通过构建 DNS 隧道,可以绕过防火墙的限制,使内网主机与外部通信。不过,DNS 隧道的带宽和延迟性能较差,仅适用于特定场景。 #### 4. 反向代理结合 Nginx 如果需要同时管理多个内网服务,可以考虑使用 Nginx 作为反向代理[^3]。Nginx 能够将外网请求转发到不同的内网服务端口,从而实现更灵活的流量管理。在这种架构下,FRP 或 Ngrok 可以作为后端服务运行,而 Nginx 则负责前端流量分发。 #### 5. ICMP 隧道 ICMP 隧道利用 ICMP 协议进行数据传输,适合在网络环境对 ICMP 协议开放但限制其他协议的情况下使用[^1]。尽管 ICMP 隧道的实现较为复杂,但在某些特殊场景下可能是唯一可行的选择。 以下是一个基于 FRP 的简单配置示例: ```ini # frpc.ini (客户端配置文件) [common] server_addr = x.x.x.x # 中间服务器的公网IP server_port = 7000 [ssh] type = tcp local_ip = 127.0.0.1 local_port = 22 remote_port = 6000 ``` ```ini # frps.ini (中间服务器配置文件) [common] bind_port = 7000 ``` 运行上述配置后,可以通过中间服务器的 `x.x.x.x:6000` 访问内网的 SSH 服务。 --- ### 注意事项 - **安全性**:无论选择哪种方案,都应确保隧道或代理的安全性,避免敏感信息泄露。 - **性能**:DNS 和 ICMP 隧道的性能较差,仅适用于低带宽需求的场景。 - **合法性**:在实施内网穿透前,请确保操作符合相关法律法规及公司政策。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI小模型

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值