Java 根据指定ipv6网络前缀,生成子网ip列表

wuys 2018-10-13 09:33:51
java 根据ipv6网络子网前缀,生成ip地址列表:求算法
...全文
515 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
十八道胡同 2018-10-14
  • 打赏
  • 举报
回复
用 String ipv6="AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAA,";
new TestIPV6().GetIPV6(ipv6);
做测试

开始生成IPV6:
AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAA0
AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAA1
AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAA2
AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAA3
AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAA4
AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAA5
AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAA6
AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAA7
AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAA8
AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAA9
AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA
AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAB
AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAC
AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAD
AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAE
AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAF

Process finished with exit code 0
十八道胡同 2018-10-14
  • 打赏
  • 举报
回复
package com.demo;

import java.util.ArrayList;
import java.util.List;

public class TestIPV6 {
public static void main(String[] args) {

/**
*  格式为X:X:X:X:X:X:X:X,其中每个X表示地址中的16b,以十六进制表示,例如:
  ABCD:EF01:2345:6789:ABCD:EF01:2345:6789
*/

//下面的A代表已经定义好的前缀,后面的,代表可以使用的子网IP范围
String ipv6="AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:,,,,:,,,,";
new TestIPV6().GetIPV6(ipv6);
}

String output(List<Character> characterList)
{
StringBuffer ss=new StringBuffer();
for (int i = 0; i < characterList.size(); i++) {
if(i>0 && i%4==0)
{
ss.append(":");
}
ss.append(characterList.get(i) );
}
return ss.toString();
}
void GetIPV6(String knowIPV6)
{
int totalLength=knowIPV6.length();
String preffix=knowIPV6.substring(0,knowIPV6.indexOf(","));//找到前缀
//System.out.println(preffix);

String genEnd=knowIPV6.substring(knowIPV6.indexOf(","),totalLength);//找到需要生成的
System.out.println(genEnd);
System.out.println("开始生成IPV6:");
int genLength=genEnd.replaceAll(":","").length();//需要生成的ip长度
List<Character> genIP=new ArrayList<Character>() ;
for (int i = 0; i < genLength; i++) {
genIP.add('0');//每个都初始化为0,然后在0-9 A-Z轮询
}
System.out.println(preffix + output(genIP));//输出第一个
List<String> finalString=new ArrayList<String>();
finalString.add("F");
finalString.add(":");//当最终生成的字符串只含有:F时就结束
int thisIndex=genLength-1;
while(!genIP.containsAll(finalString) && thisIndex>=0)
{
Character thisStr=(genIP.get(thisIndex));
if(thisStr=='9')
{
genIP.set(thisIndex,'A');
}else if(thisStr=='F')
{
//从后向前找一个不是F的,继续生成
int tmpIndex=Integer.MAX_VALUE;
for (int i = genLength-1; i >=0 ; i--) {
if(genIP.get(i)!='F'){
tmpIndex=i;//可以处理tmpIndex了
}
}
if(tmpIndex==Integer.MAX_VALUE)//找不到可以处理的位数了
{
break;
}else
{
Character tmpStr=(genIP.get(tmpIndex));
if(tmpStr=='9')
{
genIP.set(tmpIndex, new Character('A'));
}else
{
genIP.set(tmpIndex, new Character((char)((int)tmpStr+1)));
}

thisIndex=genLength-1;
genIP.set(thisIndex,'0');
}

}else
{
genIP.set(thisIndex, new Character((char)((int)thisStr+1)));
}

System.out.println(preffix + output(genIP));//输出这个IPV6

}
}
}

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧