Android 手机作为热点时,客户端请求上网的过程中出现私有IP(192.168.x.x)泄露到公有网络的问题,就是在抓到的数据包中,有一段时间作为热点的手机用私有IP去请求网络数据。查找问题原因,做以下记录。
NAT(Network Address Translation,网络地址转换)是将IP 数据包头中的IP 地址转换为另一个IP 地址的过程。在实际应用中,NAT 主要用于实现私有网络访问公共网络的功能。这种通过使用少量的公有IP 地址代表较多的私有IP 地址的方式,将有助于减缓可用IP
地址空间的枯竭。
NAT的功能就是指将使用私有地址的网络与公用网络INTERNET相连,使用私有地址的内部网络通过NAT路由器发送数据时,私有地址将被转化为合法注册的IP地址从而可以与INTERNET上的其他主机进行通讯。 NAT路由器被置于内部网和INTERNET的边界上并且在把数据包发送到外部网络前将数据包的源地址转换为合法的IP地址。当多个内部主机共享一个合法IP地址时,地址转换是通过端口多路复用即改变外出数据包的源端口并进行端口映射完成。
说明:
私有 IP 地址是指内部网络或
主机的IP 地址,公有IP 地址是指在因特网上全球唯一的IP 地址。
RFC 1918 为私有网络预留出了三个IP 地址块,如下:
A 类:10.0.0.0~10.255.255.255
B 类:172.16.0.0~172.31.255.255
C 类:192.168.0.0~192.168.255.255
上述三个范围内的地址不会在因特网上被分配,因此可以不必向ISP 或注册中心申请而在公司或企业内部自由使用。
Android 4.1中,有客户端连接到热点分配IP之前,先做了disableNatBySubnet,再enableNatBySubnet。
D( 459: 560) disableNatBySubnet : nat disable wlan0 rmnet0 2 fe80::/64 192.168.43.0/24
V( 459: 560) disableNatBySubnet() cmd:nat disable wlan0 rmnet0 2 fe80::/64 192.168.43.0/24 response is Nat operation succeeded
D( 459: 560) enableNatBySubnet : nat enable wlan0 rmnet0 2 fe80::/64 192.168.43.0/24
V( 459: 560) enableNatBySubnet() cmd:nat enable wlan0 rmnet0 2 fe80::/64 192.168.43.0/24 response is Nat operation succeeded
I( 2146: 2146) DHCPDISCOVER(wlan0) c4:6a:b7:2d:0f:f7
I( 2146: 2146) DHCPOFFER(wlan0) 192.168.43.178 c4:6a:b7:2d:0f:f7
I( 2146: 2146) DHCPREQUEST(wlan0) 192.168.43.178 c4:6a:b7:2d:0f:f7
I( 2146: 2146) DHCPACK(wlan0) 192.168.43.178 c4:6a:b7:2d:0f:f7 android-8881a377cd2d2cdc
调用 disableNatBySubnet, enableNatBySubnet方法时存在问题导致私有IP泄露。