powered by simpleCommunicator - 2.0.57     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / IPRange
1 сообщений из 1, страница 1 из 1
IPRange
    #32683388
^ozzy^
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код дeлает следующее:
syntax:
IPRange = new IPRange(new String[]{"ip1", "ip2"});
Формат IP:
127.0.0.1
127.0.0.1/20
127.0.0.1/20,22,23
127.0.0.*

Проверяет, входит ли ip адрес, указанный в matches к одному из диапозонов, указанных в конструкторе.
127.0.0.1/20,22,23
озанчает, что это ip:
начиная с 127.0.0.1 по 127.0.0.20
127.0.0.22
127.0.0.23

Использовать регулярные выражения нельзя.

Подскажите, как можно немного упростить.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
public class IPRange {
     
     //входные данные 
    String range;
     //массив ip-адресов 
    String[] rangeArray;

    public IPRange(String aRange[]) {
        this.rangeArray = aRange;
    }

    public boolean matches(String ip) {
    for (int n = 0; n < this.rangeArray.length; n++) {
            range = rangeArray[n];
             //длина строки range 
            int range_length = range.length();
             //длина строки ip 
            int ip_length = ip.length();

             //позиция последнего символа "." в range 
            int rangeLastIndexDot = range.lastIndexOf(".");
             //позиция последнего символа "." в ip 
            int ipLastIndexDot = ip.lastIndexOf(".") + 1;

            if (range_length < 7 || ip_length < 7) {
                return false;
            }

            if (!(range.substring(0, rangeLastIndexDot).equalsIgnoreCase(ip.substring(0, ipLastIndexDot - 1)))) {
                continue;
            }

             //суффикс ip 
            byte ip_suff = (byte) Integer.parseInt(ip.substring(ipLastIndexDot, ip_length));

             //для range типа 127.0.0.1/20  || 127.0.0.1/20,34,33 
            if (range.indexOf("/") > 0) {
                 //конечная часть ip-адреса (127.0.0._1\24,4_) 
                String range_suff = range.substring(rangeLastIndexDot + 1, range_length);
                 //индекс слэша 
                byte rangeLastIndexSlash = (byte) range_suff.indexOf("/");
                 //начало диапозона 
                byte start_number = (byte) Integer.parseInt(range_suff.substring(0, rangeLastIndexSlash));
                 //          System.out.println(start_number); 
                 //конец диапозона 
                byte end_number;

                 //27.0.0.1\20,21,23,25,28 
                if (range_suff.indexOf(",") > 0) {
                    end_number = (byte) Integer.parseInt(range_suff.substring(rangeLastIndexSlash + 1, range_suff.indexOf(",")));

                    String tmp = range_suff.substring(rangeLastIndexSlash + 1, range_suff.length());
                    String[] other_numbers = new String[tmp.split(",").length + 1];
                    other_numbers = tmp.split(",");


                    for (int i = 0; i < other_numbers.length; i++) {

                        if (ip_suff == (byte) Integer.parseInt(other_numbers)) {
                            return true;
                        }
                    }
                }
                try {
                    end_number = (byte) Integer.parseInt(range_suff.substring(rangeLastIndexSlash + 1));
                } catch (Exception e) {
                    end_number = (byte) Integer.parseInt(range_suff.substring(rangeLastIndexSlash + 1, range_suff.indexOf(",")));
                }

                for (int i = start_number; i <= end_number; i++) {
                    if (i == ip_suff) {
                        return true;
                    }
                }
            }
             [i]//для range вида 127.0.0.* 
            if (range.indexOf("*") > 0) {
                for (int i = 0; i <= 255; i++) {
                    if (ip_suff == i) {
                        return true;
                    }
                }
            }
        }
        return false;
    }

}

Тест к нему:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
import junit.framework.TestCase;
 /**
 * Created by IntelliJ IDEA.
 * User: ozzy
 * Date: 26.08.2004
 * Time: 12:46:45
 * To change this template use File | Settings | File Templates.
 */ 
public class IPRangeTest extends TestCase {

    public void testIPRange() {
      IPRange iprange = new IPRange(new String[]{"127.0.0.1/20,33,34,56,89,100,122", "192.168.0.1/40,65", "198.23.65.15/23"});
      assertTrue(iprange.matches("198.0.65.21"));
    }

}
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / IPRange
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]