一个范围内的IP地址

时间:2015-10-13 05:06:30

标签: java arrays arraylist ip

有人可以帮助解决这个问题。我想使用命令行检查特定范围内的IP地址。

例如,我在cmd" java IPAddressCheck 1.1.1.1 5"中运行程序。输出应该是:

1.1.1.1
1.1.1.2
1.1.1.3
1.1.1.4
1.1.1.5

这是我的代码,问题是我运行的代码将从#34; 1.1.1.2"开始计算。直到" 1.1.1.6"。

import java.util.*;
import java.net.*;


public class IPAddressCheck 
{
public static void main(String[] args) throws Exception
{
        String startIp = args[0];
        int number = 0;

        if (args.length != 1)
        {
            try
            {
                number = Integer.parseInt(args[1]);
            }
            catch(IllegalArgumentException e)
            {
                System.out.println("Error");
                System.exit(0);
            }

            ArrayList<String> ipRange = new ArrayList<>();
            String currentIp = startIp;

            for(int i = 0; i < number; i++) 
            {
                String nextIp = nextIpAddress(currentIp);
                ipRange.add(nextIp);
                currentIp = nextIp;
                //System.out.println("----------------------------------");
                System.out.println(nextIp);
            }   
        }
        else
        {
            System.out.println("Wrong number of arguments");
            System.out.println("Please try again");
        }
}


public static final String nextIpAddress(final String input) 
{
        final String[] tokens = input.split("\\.");
        if (tokens.length != 4)
            throw new IllegalArgumentException();
        for (int i = tokens.length - 1; i >= 0; i--) 
        {
            final int item = Integer.parseInt(tokens[i]);
            if (item < 255) 
            {
                tokens[i] = String.valueOf(item + 1);
                for (int j = i + 1; j < 4; j++) 
                {
                    tokens[j] = "0";
                }
                break;
            }
        }
        return new StringBuilder()
                .append(tokens[0]).append('.')
                .append(tokens[1]).append('.')
                .append(tokens[2]).append('.')
                .append(tokens[3])
                .toString();    
}
}

2 个答案:

答案 0 :(得分:2)

您必须首先使用第一个IP地址初始化您的范围,然后使迭代次数等于地址数1,因为您的列表中已经有一个地址:

ipRange.add(currentIp);
for(int i = 0; i < number-1; i++) 
{
    currentIp = nextIpAddress(currentIp);
    ipRange.add(currentIp);
}

很高兴看到你发现我的answer很有用))

答案 1 :(得分:1)

这很简单。您的对帐单订单过早更改了IP。将for循环版本看起来像这样:

        System.out.println(currentIp);
        ipRange.add(currentIp);
        for(int i = 1; i < number; i++) 
        {
            currentIp = nextIpAddress(currentIp);
            ipRange.add(currentIp);
            System.out.println(currentIp);
        }   

首先,您的currentIp是您的起始IP,您也想显示它。您可以输出它并在第二个地址开始循环。

相关问题