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等,你在程序中再判一下。 如何才能知道map的容量啊? JScrollPane的 add和setViewportView怎么回事啊 创建LinkedList数组时出现问题 java怎么读取doc和rtf格式的内容到txt文件中??? Java中如何直接打开网络中的另一台机器上的文件? 如何获取oracle某个表的字段? 关于密码的问题 高分求救:Java Mail收邮件时的中文问题 如何实现进度条? 在浏览器中运行JAVA CGI 提示java.lang.OutOfMemoryError: Java heap space 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等,你在程序中再判一下。