判断ip地址是否在一个网段(局域网)

将IP地址 和 掩码 进行与运算,可得出该IP地址所在的网段。
1、首先将IP地址、掩码换算成二进制数
220.193.128.9 11011100.11000001.10000000.00001001
255.255.255.240 11111111.11111111.11111111.11110000
2、将两组二进制对应的第一位乘第一位,第二位乘第二位......类推
得出: 11011100.11000001.10000000.00000000
3、再转为十进制即:220.193.128.0
再用同样的方法算220.193.128.14所在的网段,会也是220.193.128.0
因此两个IP位于同一网段中。
其实计算多了,用口算就可以算出来结果。

	/*
	 * 判断ip是否在一个网段(局域网)
	 * 用ip地址逻辑且子网掩码
	 */
	public boolean isIPAtSameSection(String ip1, String ip2) {
		if (TextUtils.isEmpty(ip1) || TextUtils.isEmpty(ip2)) {
			return false;
		}
		
		ip1 = ip1.trim();
		ip2 = ip2.trim();
		String subnetmask = getSubnetMask().trim();
		String[] ip1s = new String[4];
		String[] ip2s = new String[4];
		String[] subnetmasks = new String[4];
		String[] ipResult1s = new String[4];
		String[] ipResult2s = new String[4];
		ip1s = ip1.split("\\.");
		ip2s = ip2.split("\\.");
		subnetmasks = subnetmask.split("\\.");
		for (int i = 0; i < ip1s.length; ++i) {
			ipResult1s[i] = String.valueOf(Integer.parseInt(ip1s[i]) & Integer.parseInt(subnetmasks[i]));
		}
		for (int i = 0; i < ip2s.length; ++i) {
			ipResult2s[i] = String.valueOf(Integer.parseInt(ip2s[i]) & Integer.parseInt(subnetmasks[i]));
		}
		String newIp1 = ipResult1s[0] + ipResult1s[1] + ipResult1s[2] + ipResult1s[3];
		String newIp2 = ipResult2s[0] + ipResult2s[1] + ipResult2s[2] + ipResult2s[3];
		
		if (newIp1 != null && newIp2 != null && newIp1.equals(newIp2)) {
			return true;
		}
		
		return false;
	}
	// 返回当前手机网卡的子网掩码
	private String getSubnetMask() {
		WifiManager wifi = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);
		DhcpInfo dhcp = wifi.getDhcpInfo();
		String ret = intToIp(dhcp.netmask);
		return ret;
	}
	
	// IP地址或网关都是
	private String intToIp(int paramInt) {
		return (paramInt & 0xFF) + "." + (0xFF & paramInt >> 8) + "."
				+ (0xFF & paramInt >> 16) + "." + (0xFF & paramInt >> 24);
	}



  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值