pwnat仍在工作吗?

sud*_*esh 20 rdp network-programming nat pwnat

我需要NAT遍历的解决方案来通过互联网传输RDP数据.我遇到了以下工具,它真的很棒 - pwnat.

我已尝试使用不同路由器后面的两台不同的机器,但我无法使其工作,如上面链接中所述.所以pwnat仍然有效,如果是的话,我做错了什么?这对我很有帮助.

注意:我正在使用Windows机器进行测试,并从以下链接下载了Windows版本.

http://www.sumitgupta.net/pwnat-windows-complied-version/

任何帮助请..

jfl*_*fly 9

不,
我猜你知道它是如何工作的: 在此输入图像描述
服务器将ICMP echo请求报文发送到固定地址(例如1.2.3.4),其中不会返回回应回复,客户端假装是Internet上的跳,发送ICMP Time Exceeded报文给服务器,期望服务器前面的NAT将ICMP超时消息转发给服务器.

上面的图片来自pwnat主页,它的前提是客户端不在NAT之后,并且NAT实现通常不会检查超过时间的原始有效载荷.如果客户端和服务器都是这样的NAT,

=========================================================================================
| CLIENT  | <---> |  NAT-C  | <---> { internet } <---> |  NAT-S  | <---> | SERVER |
=========================================================================================
Run Code Online (Sandbox Code Playgroud)

它现在很少有用,主要有以下两个原因:

  1. 当服务器向固定地址发送ICMP echo请求报文时,根据RFC 3022,ICMP echo请求报头中的标识符字段将通过NAT-S唯一映射到已注册IP地址的查询标识符,以便它可以路由未来的ICMP Echo使用相同的查询ID回复发件人,因此必须修改ICMP查询数据包中的ICMP头以替换查询ID和ICMP头校验和.RFC 3022 ICMP错误包修改部分:

    在NAPT设置中,如果ICMP中嵌入的IP消息恰好是TCP,UDP或ICMP查询数据包,您还需要修改TCP/UDP报头中的相应TU端口号或ICMP查询中的查询标识符字段头.

    但是客户端不知道外部查询ID(pwnat中的代码使用0作为原始请求的标识符),它向服务器发送ICMP Time Exceeded数据包,即使数据包可以到达NAT-S前面.服务器,NAT-S找不到嵌入式数据包的主动映射,大多数NAT实现都会丢弃它.

  2. 此外,根据rfc 5508,当NAT-C从私有领域接收ICMP错误数据包时,NAT-C使用嵌入在ICMP错误消息中的数据包(即,从客户端到服务器的IP数据包)来查找嵌入数据包所属的NAT会话.如果NAT-C没有嵌入数据包的活动映射,则NAT-C应该静默地丢弃ICMP错误数据包.这意味着来自客户端的ICMP Time Exceeded数据包不会到达NAT-S.

因此pwnat仅适用于基本NAT设备(rfc 1631描述),它执行简单的地址转换,不适用于具有强大NAPT实现的任何NAPT设备.而本文确实提到了这个问题.

  • 有人知道后继工具吗?还是2016年最后一次提交到GitHub中的samyk / pwnat源或fork timdiels / pwnat sorces的帮助? (2认同)