IPアドレスが1つのセグメント(ローカルエリアネットワーク)にあるかどうかを判断する
2084 ワード
IPアドレスとマスクを演算し、そのIPアドレスが存在するセグメントを導出する.1、まずIPアドレス、マスクを2進数220.193.128.9 11011100.1100000.000010010010000010010010000001255.255.255.255.240111111.11111111111111.11111111111111.111100002に換算し、2組の2進数に対応する1位を1位に乗じ、2位を2位に乗じる…類推によると、11011100.110000001.1100000.00000003、再10進法に移行すると、220.193.128.0と同じ方法で220.193.128.14のネットワークセグメントが計算され、220.193.128.0になるため、2つの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);
}