此篇文章发布距今已超过40天,您需要注意文章的内容或图片是否可用!
ping wan口的ip,为什么在nat的wan口抓不到包?但是ping外网ip,能在wan口抓到包?如:在虚拟机10.10.10.11上ping 10.16.0.2src: 10.10.10.11 dst: 10.16.0.2数据包到达10.10.10.254,经过路由器jx00000001的SNAT,变成:src: 10.16.0.2 dst: 10.16.0.2Ping 10.16.0.2(WAN口),是一个纯粹的ICMP Packet的路由过程,即Only Routing。- Ping 10.16.0.2 的Ethernet Frame到达LAN口,IP层提取出目的IP=10.16.0.2,然后遍历一遍接口,看看哪一个接口的IP == 10.16.0.2?
- 很显然ICMP报文的目的IP=10.16.0.2 ==WAN口的IP(10.16.0.2)。
- 接下来,IP层根据IP头里的Protocol =1 (ICMP),调用ICMP_Input()进一步处理。
- ICMP_Input(),将源、目IP地址互换,更新TTL、更新ICMP Checksum。
- 调用IP_Output(),它的工作是查询路由,找出口,并更新IP Checksum。
- 调用Ethernet_Output()将以太帧(没有FCS)放入发送队列。
- Ethernet_Output()计算CRC32,并填入FCS字段。
Incoming ICMP包是从LAN口进入,Outgoing ICMP包是从LAN口流出。意味着进出的流量都不会经过WAN口的链路层。所以WAN口抓包是抓不到这个进出的ICMP Packet的。当前使用的抓包工具,如TCPDUMP,基本上是指令物理接口的链路层将Input/Output Queue里的数据Copy一次,提供给抓包工具分析使用。所以,题主在WAN口抓不到Ping WAN口的包是正常的。Ping 8.8.8.8(互联网IP),由ICMP Packet的路由过程 + NAT过程组成,即IP Routing + NAT。Ping 8.8.8.8 的Ethernet Frame到达LAN口,IP层提取出目的IP=8.8.8.8,然后遍历一遍接口,看看哪一个接口的IP ==8.8.8.8?意味着,这个ICMP Packet真正的目的地并不是本机。IP_Forward()查询路由发现,最佳路由是通过WAN口离开本机。NAT的触发条件:需要3个条件同时满足,缺一不可。条件1:Incoming Interface = LAN口条件2:Outgoing Interface = WAN口条件3:Source IP = 10.10.10.x/24NAT做的工作很简单,就是将Source IP = 10.10.10.x 用WAN口的IP = 10.16.0.2 替换,并短暂记忆这个替换关系(NAT Table)。替换后的IP报文 Source IP =10.16.0.2。替换后的IP报文 Destination IP不变,依然= 8.8.8.8。然后IP_Output(),然后就进入WAN口的Ethernet_Ouput()。而抓包软件(TCPDUMP)预置的Copy接口位于Ethernet_Ouput/Ethernet_Input内部,所以进出WAN口流量都是可以Captured的。所以,在这种情况下,是可以捕获到Ping包的,双向(Request/Reply)都是可以的。当返程流量途经NAT过程时,由于匹配到NAT Table,触发NAT工作。即,将目的IP = 10.16.0.2 替换成10.10.10.x。 推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
https://ZhouSa.com
还没有评论,来说两句吧...