Java 生成随机IP地址
我想生成一些随机IP地址。但每次此GeneratePaddress函数返回0.0.0.0字符串作为ipAddress。但每次都应该返回一些随机的ipAddress,而不是0.0.0.0。有什么建议说明为什么会这样吗Java 生成随机IP地址,java,ip,subnet,Java,Ip,Subnet,我想生成一些随机IP地址。但每次此GeneratePaddress函数返回0.0.0.0字符串作为ipAddress。但每次都应该返回一些随机的ipAddress,而不是0.0.0.0。有什么建议说明为什么会这样吗 private void callingGeoService() { int p1 = 255; int p2 = 0; int p3 = 0; int inc = 5; String ipAddress = generateIPAddres
private void callingGeoService() {
int p1 = 255;
int p2 = 0;
int p3 = 0;
int inc = 5;
String ipAddress = generateIPAddress(p1, p2, p3);
p3 += inc;
if (p3 > 255) {
p3 = 0;
p2 += inc;
if (p2 > 255) {
p2 = 0;
p1--;
if (p1 <= 0) {
p1 = 0;
}
}
}
}
我希望以p1、p2、p3
的形式为ipAddress
分配一个随机值,最后一位应该是0
,,使用:
Random r = new Random();
return r.nextInt(256) + "." + r.nextInt(256) + "." + r.nextInt(256) + "." + r.nextInt(256);
当然,您可以验证生成的地址是否不是多播等。假设您实际上并不关心生成的IP地址是否以任何形式有效,那么您就有一个简单的问题 生成地址的代码将参数
p3
和p2
设置为小于255
的值<代码>p1被限制在255
和0
之间
Random r = new Random();
return r.nextInt(256) + "." + r.nextInt(256) + "." + r.nextInt(256) + "." + r.nextInt(256);
真正的问题是,将其转换为地址的代码会移动这些值<代码>p1由24
,p2
由16
和p3
由8
。了解调用方法中应用的限制,可以知道p1
、p2
和p3
永远不会超过255
,因此在这种情况下,知道8
或更多的移位将导致0
,地址的任何单个元素都不会产生除0
以外的值,并且最后一个八位字节总是0
,因此结果地址将是0.0.0
如果要防止其成为0.0.0.0
,首先要做的是删除换档操作。这仍然会将最后一个字段保留为0
,因为它从未设置过,但它应该生成地址
同样,这与地址的状态无关,使用此方法,您将得到广播、多播和仅本地的地址。当您调用
generateIPAddress(p1,p2,p3)
时,p1
是255
,p2
和p3
是0
Random r = new Random();
return r.nextInt(256) + "." + r.nextInt(256) + "." + r.nextInt(256) + "." + r.nextInt(256);
这条线
int b1 = (p1 >> 24) & 0xff;
将p1
24位向右移位。换班前,p1为11111111
。换档结果为0
。其实你也可以用
int b1 = p1 >> 8;
asp1
仅开启其8个最低有效位。由于操作在两个int
操作数之间,因此使用&0xff
是多余的。所以b1
是0
Random r = new Random();
return r.nextInt(256) + "." + r.nextInt(256) + "." + r.nextInt(256) + "." + r.nextInt(256);
p2
和p3
与值0
一起传递,因此移位(通过16
或8
)不会改变它一位,从而导致b2
和b3
也成为0
Random r = new Random();
return r.nextInt(256) + "." + r.nextInt(256) + "." + r.nextInt(256) + "." + r.nextInt(256);
b4
被显式设置为0
Random r = new Random();
return r.nextInt(256) + "." + r.nextInt(256) + "." + r.nextInt(256) + "." + r.nextInt(256);
因此,所有的b1
、b2
、b3
和b4
都是0
,您可以从中创建ip1
到ip4
。因此方法generateIPAddress(p1,p2,p3)
总是返回0.0.0
然后p3+=inc代码>将5
添加到0
。p3
中的Reuslt现在是5
如果(p3>255)
条件将始终失败,因为p3
是5
,这是<255
。我最近开发了一种可以使用不同类型约束生成随机IPv4地址的方法:
MockNeat mock = MockNeat.threadLocal();
String ipv4 = mock.ipv4s().val();
System.out.println(ipv4);
String ipClassA = mock.ipv4s().type(CLASS_A).val();
System.out.println(ipClassA);
String classAorB = mock.ipv4s().types(CLASS_A, CLASS_B).val();
System.out.println(classAorB);
List<String> ip4s = mock.ipv4s().list(10).val();
System.out.println(ip4s);
使用以下代码生成随机IP地址(请注意,在此代码中,子网掩码具有以下格式):
import java.util.Random;
导入java.util.Scanner;
公共类主类{
公共静态int findRange(int掩码)
{
int x=8-掩模;
整数和=0;
对于(int i=0;i7&&掩码<16)
IP=findfexedpart(IPPrefix,0)+“+”(findfexedpart(IPPrefix,1)+r.nextInt(findRange(mask-8)))+“+r.nextInt(256)+“+r.nextInt(256);
否则如果(遮罩>15和遮罩<24)
IP=findfexedpart(IPPrefix,0)+“+”+findfexedpart(IPPrefix,1)+“+”+(findfexedpart(IPPrefix,2)+r.nextInt(findRange(mask-16)))+”+r.nextInt(256);
否则如果(遮罩>23和遮罩<33)
IP=findfexedpart(IPPrefix,0)+“+”+findfexedpart(IPPrefix,1)+“+”+findfexedpart(IPPrefix,2)+“+”+”(findfexedpart(IPPrefix,3)+r.nextInt(findRange(mask-24));
返回IP;
}
公共静态void main(字符串[]输入输出)
{
System.out.println(“输入IP前缀:”);
扫描仪sc=新的扫描仪(System.in);
字符串IPPrefix=sc.nextLine();
System.out.println(“输入掩码:”);
整数掩码=sc.nextInt();
//在子网掩码中查找随机IP
字符串IP=生成器域IP(IPPrefix,掩码);
系统输出打印项次(IP);
}
}
此函数将帮助您生成无限多个随机IP地址:
StringBuilder ip = new StringBuilder("xx.xx.xx.xx");
for (int i=0 ; i <11;i++){
if (i==2){}
else if (i==5){}
else if (i==8){}
else{
Random r = new Random();
int random = r.nextInt((9 - 1) + 1) + 1;
char c = (char)(random+'0');
ip.setCharAt(i, c);
}
}
Log.v("ip","Server IP : "+ip);
StringBuilder ip=新的StringBuilder(“xx.xx.xx.xx”);
对于(int i=0;i我编写了一个短代码,以筛选出中列出的特殊范围(略多于仅基于第一个八位字节):
生成随机ip地址的一种非常简单快速的方法:
import java.util.Random;
public class IpAddressHelper {
public static String createRandom() {
return randomNumber() + "." + randomNumber() + "." + randomNumber() + "." + randomNumber();
}
public static int randomNumber() {
return new Random().nextInt((255 - 1) + 1) + 1;
}
}
Java没有out参数这是什么意思。我不明白?哦,没关系;我以为你想给p1/p2/p3分配一些东西,但我的反应有点太快了。仍然不确定修改(p3+=inc;
等)是什么意思