Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / IPRange / 1 сообщений из 1, страница 1 из 1
07.09.2004, 14:30
    #32683388
^ozzy^
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IPRange
Код д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
Форумы / Java [игнор отключен] [закрыт для гостей] / IPRange / 1 сообщений из 1, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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