java 打印出两个IP之间的所有IP值 考虑使用16进制的加法来做,可是对java16进制加法不是很了解,网上没有找到相关的资料,希望指教。谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这里提供一个笨方法,很多人多用过的:import java.util.*; public class Test { /** * @param args */ public static void main(String[] args) { String ip1 = "192.168.5.1 "; String ip2 = "192.168.6.254 "; for(Iterator ipItr = getIPs(ip1, ip2).iterator(); ipItr.hasNext();){ System.out.println(ipItr.next()); } } public static List getIPs(String ip1, String ip2){ String ipOne[] = ip1.split( "\\. "); String ipTwo[] = ip2.split( "\\. "); int intIpOne[] = new int[4]; int intIpTwo[] = new int[4]; for(int i = 0; i < 4; i ++){ intIpOne[i] = Integer.parseInt(ipOne[i]); intIpTwo[i] = Integer.parseInt(ipTwo[i]); } List result = new ArrayList(); for(int i = intIpOne[0]; i <= intIpTwo[0]; i++){ for(int j = intIpOne[1]; j <= intIpTwo[1]; j++){ for(int k = intIpOne[2]; k <= intIpTwo[2]; k++){ for(int l = intIpOne[3]; l <= intIpTwo[3]; l++){ StringBuffer ip = new StringBuffer(); ip.append(i).append( ". ") .append(j).append( ". ") .append(k).append( ". ") .append(l); result.add(ip.toString()); } } } } return result; } } ip = 4个int 你可以将它转化为一个 long 数字然后....在2个long 之间循环我想你知道了吧。。 提供你一个我以前写的IP转为long的方法,反向的你自己写写看,我就不给你了! public static long ipToLong(String ip) { String[] parts = StrTools.split(ip, "."); if (parts.length != 4) { return -1; } long rtn = 0; try { for (String part : parts) { rtn <<= 8; rtn += Integer.parseInt(part.trim()); } return rtn; } catch (Exception ex) { ex.printStackTrace(); return -1; } } 答:将IPV4转成32位无符号的数(一个IPV4是一个32位的二进制数),然后处理。参考代码如下:import java.net.*;import java.nio.*;public class PrintIP { //一个IP,是一个32位无符号的二进制数。故用long的低32表示无符号32位二进制数。 public static long getIP(InetAddress ip) { byte[] b=ip.getAddress(); long l= b[0]<<24L & 0xff000000L| b[1]<<16L & 0xff0000L | b[2]<<8L & 0xff00L | b[3]<<0L & 0xffL ; return l; } //由低32位二进制数构成InetAddress对象 public static InetAddress toIP(long ip) throws UnknownHostException { byte[] b=new byte[4]; int i=(int)ip;//低32位 b[0]= (byte)( (i >> 24) & 0x000000ff ); b[1]= (byte)( (i >> 16) & 0x000000ff ); b[2]= (byte)( (i >> 8) & 0x000000ff ); b[3]= (byte)( (i >> 0) & 0x000000ff ); return InetAddress.getByAddress(b); } public static void main(String[] args) throws UnknownHostException { long ip1=getIP(InetAddress.getByName("192.168.0.233")); long ip2=getIP(InetAddress.getByName("192.168.1.12")); System.out.println("192.168.0.233到192.168.1.12之间所有的IP是:"); for(long ip=ip1;ip<=ip2;ip++) { System.out.println(toIP(ip).getHostAddress()); } }}程序运行结果:192.168.0.233到192.168.1.12之间所有的IP是:192.168.0.233192.168.0.234192.168.0.235192.168.0.236192.168.0.237192.168.0.238192.168.0.239192.168.0.240192.168.0.241192.168.0.242192.168.0.243192.168.0.244192.168.0.245192.168.0.246192.168.0.247192.168.0.248192.168.0.249192.168.0.250192.168.0.251192.168.0.252192.168.0.253192.168.0.254192.168.0.255192.168.1.0192.168.1.1192.168.1.2192.168.1.3192.168.1.4192.168.1.5192.168.1.6192.168.1.7192.168.1.8192.168.1.9192.168.1.10192.168.1.11192.168.1.12因为不知道你的需求中要不要去掉特殊的IP。故程序中没有判特殊IP。说明:若要去掉网络地址如:192.168.0.0,192.168.1.0,191.12.0.0,12.0.0.0与定向广播地址如:192.168.0.255,192.168.1.255,192.12.255.255,12.255.255.255等,你在程序中再判一下。 java数据类型及其封装类的问题 你们习惯怎样写主函数形参里的args? 找规律填数字 java 怎么学习 随机密码生成 有人能真正的解答这一问题吗? 使用过JTable的高手请帮忙,给高分! 紧急求助,关于字符型转变成Date型 jdk1.4 与 jdk 1.3.1 有何差别??? 大佬们,能帮我看看吗? print()的 问题 如何利用JAVA來將資訊寫入圖片中的EXIF裡面
import java.util.*; public class Test { /**
* @param args
*/
public static void main(String[] args) {
String ip1 = "192.168.5.1 ";
String ip2 = "192.168.6.254 "; for(Iterator ipItr = getIPs(ip1, ip2).iterator(); ipItr.hasNext();){
System.out.println(ipItr.next());
} } public static List getIPs(String ip1, String ip2){ String ipOne[] = ip1.split( "\\. ");
String ipTwo[] = ip2.split( "\\. "); int intIpOne[] = new int[4];
int intIpTwo[] = new int[4];
for(int i = 0; i < 4; i ++){
intIpOne[i] = Integer.parseInt(ipOne[i]);
intIpTwo[i] = Integer.parseInt(ipTwo[i]);
} List result = new ArrayList();
for(int i = intIpOne[0]; i <= intIpTwo[0]; i++){
for(int j = intIpOne[1]; j <= intIpTwo[1]; j++){
for(int k = intIpOne[2]; k <= intIpTwo[2]; k++){
for(int l = intIpOne[3]; l <= intIpTwo[3]; l++){
StringBuffer ip = new StringBuffer();
ip.append(i).append( ". ")
.append(j).append( ". ")
.append(k).append( ". ")
.append(l); result.add(ip.toString());
}
}
}
} return result;
}
}
然后....
在2个long 之间循环我想你知道了吧。。
public static long ipToLong(String ip) {
String[] parts = StrTools.split(ip, ".");
if (parts.length != 4) {
return -1;
}
long rtn = 0;
try {
for (String part : parts) {
rtn <<= 8;
rtn += Integer.parseInt(part.trim());
}
return rtn;
} catch (Exception ex) {
ex.printStackTrace();
return -1;
}
}
参考代码如下:import java.net.*;
import java.nio.*;
public class PrintIP { //一个IP,是一个32位无符号的二进制数。故用long的低32表示无符号32位二进制数。
public static long getIP(InetAddress ip)
{
byte[] b=ip.getAddress();
long l= b[0]<<24L & 0xff000000L|
b[1]<<16L & 0xff0000L |
b[2]<<8L & 0xff00L |
b[3]<<0L & 0xffL ;
return l;
}
//由低32位二进制数构成InetAddress对象
public static InetAddress toIP(long ip) throws UnknownHostException
{
byte[] b=new byte[4];
int i=(int)ip;//低32位
b[0]= (byte)( (i >> 24) & 0x000000ff );
b[1]= (byte)( (i >> 16) & 0x000000ff );
b[2]= (byte)( (i >> 8) & 0x000000ff );
b[3]= (byte)( (i >> 0) & 0x000000ff );
return InetAddress.getByAddress(b);
}
public static void main(String[] args) throws UnknownHostException {
long ip1=getIP(InetAddress.getByName("192.168.0.233"));
long ip2=getIP(InetAddress.getByName("192.168.1.12"));
System.out.println("192.168.0.233到192.168.1.12之间所有的IP是:");
for(long ip=ip1;ip<=ip2;ip++)
{
System.out.println(toIP(ip).getHostAddress());
}
}
}
程序运行结果:
192.168.0.233到192.168.1.12之间所有的IP是:
192.168.0.233
192.168.0.234
192.168.0.235
192.168.0.236
192.168.0.237
192.168.0.238
192.168.0.239
192.168.0.240
192.168.0.241
192.168.0.242
192.168.0.243
192.168.0.244
192.168.0.245
192.168.0.246
192.168.0.247
192.168.0.248
192.168.0.249
192.168.0.250
192.168.0.251
192.168.0.252
192.168.0.253
192.168.0.254
192.168.0.255
192.168.1.0
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5
192.168.1.6
192.168.1.7
192.168.1.8
192.168.1.9
192.168.1.10
192.168.1.11
192.168.1.12
因为不知道你的需求中要不要去掉特殊的IP。故程序中没有判特殊IP。
说明:若要去掉网络地址如:192.168.0.0,192.168.1.0,191.12.0.0,12.0.0.0与定向广播地址如:192.168.0.255,192.168.1.255,192.12.255.255,12.255.255.255等,你在程序中再判一下。