Pertanyaan bagaimana cara mendapatkan alamat ip berikutnya dari ip yang diberikan di java?


Orang-orang,

Saya mencari cuplikan kode Java, yang memberikan alamat selanjutnya dari IP yang diberikan.

begitu getNextIPV4Address("10.1.1.1") kembali "10.1.1.2".

Mengunyah benang bisa dilakukan tetapi mungkin berakhir berantakan. Apakah ada banyak cara formal untuk melakukan ini.

Terima kasih atas waktunya.


4
2018-06-09 15:49


asal


Jawaban:


Ini akan membantu Anda memulai (menambahkan penanganan kesalahan, kasus sudut dll.):

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();
}

Kasus cobaan:

@Test
public void testNextIpAddress() {
    assertEquals("1.2.3.5", nextIpAddress("1.2.3.4"));
    assertEquals("1.2.4.0", nextIpAddress("1.2.3.255"));
}

2
2018-06-09 16:02



Saya mencari cuplikan kode Java, yang memberikan alamat selanjutnya dari IP yang diberikan.

Berikut ini cuplikan untuk Anda:

public static String getNextIPV4Address(String ip) {
    String[] nums = ip.split("\\.");
    int i = (Integer.parseInt(nums[0]) << 24 | Integer.parseInt(nums[2]) << 8
          |  Integer.parseInt(nums[1]) << 16 | Integer.parseInt(nums[3])) + 1;

    // If you wish to skip over .255 addresses.
    if ((byte) i == -1) i++;

    return String.format("%d.%d.%d.%d", i >>> 24 & 0xFF, i >> 16 & 0xFF,
                                        i >>   8 & 0xFF, i >>  0 & 0xFF);
}

Contoh input / output (demonstrasi ideone.com):

10.1.1.0        -> 10.1.1.1
10.255.255.255  -> 11.0.0.0
10.0.255.254    -> 10.1.0.0

6
2018-06-09 15:59



Alamat IP tidak "berurutan", jadi saya ragu Anda akan menemukan perpustakaan untuk melakukannya untuk Anda.


4
2018-06-09 15:51



Alamat IP cukup banyak hanya bilangan bulat 32-bit. Tergantung pada bagaimana Anda menyimpannya, dimungkinkan untuk meningkatkan nilai dasar ini. Ini mungkin tidak akan sangat dapat diandalkan karena Anda harus mempertimbangkan subnet, kelas alamat yang berbeda, dll.

Sebagai dty menunjukkan, alamat IP tidak berurutan, jadi saya tidak akan membayangkan ada semacam cara 'formal' untuk melakukan hal ini.


3
2018-06-09 15:53



Dibagi oleh ., berikan elemen terakhir ke int dan increment itu. Periksa apakah nilainya kurang dari 254 atau Anda akan memenangkan sendiri alamat broadcast. Berdoalah agar Anda selalu berurusan dengan subnet kelas penuh C.


1
2018-06-09 15:56



Bagi string dengan "." dan mengubah 4 string menjadi byte. Gandakan semua byte untuk mendapatkan perkalian int. Tingkatkan hasilnya. Pulihkan byte dengan membagi integer dan menyimpan mod di setiap byte. Konversikan byte ke string dan concat semua string.


0
2018-06-09 15:56



Jika menggunakan pustaka pihak ke-3 tidak masalah, Jambu biji dapat digunakan untuk mendapatkan nomor alamat IP berikutnya (atau nomor satu setelah) seperti ini:

InetAddress a = InetAddresses.forString("192.168.1.1");
int i = InetAddresses.coerceToInteger(a);
InetAddress b = InetAddresses.fromInteger(i+1);
String s = InetAddresses.toAddrString(b);
System.out.println(s);

0
2018-04-26 10:45