Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 18, 2018 15:56:22

hokey
Зарегистрирован: 2018-09-18
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка валидности сетевой маски.

Доброго времени суток!
Решил написать инсталлер, поиск не помог найти нужное, написал проверку айпи адреса через модуль ipaddress, ещё нужна проверка маски и роутера, в принципе айпи роутера можно проверить таким же образом как и айпи машины, вот с маской загвоздка.

Bот код.

 def ip_checker(ip):
    try:
        if ipaddress.ip_address(ip).is_private:
            print('IP address is correct')
            global ip_bool
            ip_bool = False
            return ip_bool
        else:
            print('Try again.You must use only 192.168.0.0/16, 10.0.0.0/8 or 172.16.0.0/12')
            return ip_bool
    except ValueError:
        print('IP address is not correct')
        return ip_bool

Нужно проверить чтобы юзер вводил корректную сетевую маску. Подумал что можно сделать так.

mask = os.system('ifconfig | grep ip') #и из полученной строки выбрать маску чтобы вообще не спрашивать юзера.

Может есть лучший способ для проверки ?

p.s. one more question…=grep ip в предпоследней строке не работает, как можно использовать переменную назначенную в коде питона запихнуть в os.system?

Офлайн

#2 Сен. 18, 2018 16:09:34

BM21
Зарегистрирован: 2018-09-15
Сообщения: 29
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка валидности сетевой маски.

hokey
p.s. one more question…=grep ip в предпоследней строке не работает, как можно использовать переменную назначенную в коде питона запихнуть в os.system?
 mask = os.system('ifconfig | grep %s' % ip)
Ток желательно ее экранировать, если она перед этим непроверяется(переменная).

Нужно просто проверить входит ли маска в список тех что выше7

Офлайн

#3 Сен. 18, 2018 16:27:20

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Проверка валидности сетевой маски.

hokey
hokey
давайте вы расскажете что конкретно вы хотите? Чтобы маска была ровно такая как в настройках сетевой карты? а если у человека две сетевухи? а если три? или просто коректность введенной маски?



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#4 Сен. 18, 2018 16:38:16

hokey
Зарегистрирован: 2018-09-18
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка валидности сетевой маски.

PEHDOM
Инсталлер ставит несколько пакетов и сам настраивает, но чтобы настроить dhcp-сервер, нужны айпи роутера, машины которая будет принимать соединения(PXE-сервер) и маску. Айпи, маска и роутер полученные таким путем вставляются в код который будет ниже…т.е. человек ввел приватный айпишник, далее вводит маску и роутер, после того как человек ввел 255.0.0.0. например, нужно проверить подходит ли эта маска для внутренних адресов(для 192.168.0.0 не подходит например).

Надеюсь смог понятно объяснить, вот dhcp.conf
 option domain-name-servers 8.8.8.8, 8.8.4.4;
option ip-forwarding on;
default-lease-time 60;
min-lease-time 120;
max-lease-time 240;
authoritative;
ddns-update-style interim;
log-facility local7;
option space pxelinux;
option pxelinux.magic code 208 = string;
option pxelinux.configfile code 209 = text;
option pxelinux.pathprefix code 210 = text;
shared-network PXE-Network {
    subnet 192.168.1.0 netmask 255.255.255.0{
    range start_ip_address end_ip_address;
    option routers router_ip_address;
    option subnet-mask 255.255.255.0;
    option domain-name-servers 8.8.8.8, 8.8.4.4;
    filename "gpxelinux.0";
    next-server PXEserver_ip_address;
    option root-path "PXEserver_ip_address:/srv/tftp/";
    option pxelinux.configfile "http://PXEserver_ip_address/srv/tftp/pxelinux.cfg/default";
    option pxelinux.pathprefix "http://PXEserver_ip_address/srv/tftp/";
    vendor-option-space pxelinux;
}

Отредактировано hokey (Сен. 18, 2018 16:39:12)

Офлайн

#5 Сен. 18, 2018 16:42:42

hokey
Зарегистрирован: 2018-09-18
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка валидности сетевой маски.

BM21
Экранировать это типа raw_input?Я просто только учусь)

Офлайн

#6 Сен. 18, 2018 16:58:47

BM21
Зарегистрирован: 2018-09-15
Сообщения: 29
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка валидности сетевой маски.

hokey
, по поводу маски метод overlaps класса IPv4Network, тогоже пакета ipaddress.
Экранировать это исключать возможность изменить суть команды через перемнную.
Ну например

mask = os.system('ifconfig | grep %s' % ip)   
и вместо ip будет что-то вроде “ && echo ‘shell’ > /var/www/html/shell.php”. И.т.д. Тоесть данные от пользователя желательно проверять… Но тут они и так вроде проверяются.

Офлайн

#7 Сен. 18, 2018 17:24:37

hokey
Зарегистрирован: 2018-09-18
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка валидности сетевой маски.

BM21
hokey, по поводу маски метод overlaps класса IPv4Network, тогоже пакета ipaddress.Экранировать это исключать возможность изменить суть команды через перемнную.Ну например


Это простой инсталлер, человек сам на своем компе запускает его, чтобы вручную не настраивать файлы, а сделать все скриптом…тут как бы если он напишет какой то код то себе хуже, просто делаю так скажем защиту, если допустим промахнулся и поставил не ту цифру, проверка только для этого…

Офлайн

#8 Сен. 19, 2018 14:51:39

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Проверка валидности сетевой маски.

hokey
после того как человек ввел 255.0.0.0. например, нужно проверить подходит ли эта маска для внутренних адресов(для 192.168.0.0 не подходит например).
тут ведь собсна вопрос критериев подходит-неподходит. Для 192.168.0.0 255.255.255.0 подходит? а 255.255.0.0? а 255.255.255.240? Ага, все они подходят.В такой постановке вопроса нам нужно только понимать маска менее 8, 12 или 16 в случаях если ИП у нас из частного диапазона. соотвевенно нам нужно:
1. перевести данные из десятичного формата в двоичный.
2. посчитать идут ли все единицы подряд, если не подряд то сразу говорим что маска неправильная
3. если все единицы подряд, посчитать их колличество, если оно больше или равно 8, 12 или 16(в зависимости от того какая у нас подсеть) то все ОК, иначе выдаем что маска неправильная.

ЗЫ а можно в тупую создать словарь со всеми возможными масками, благо их вообще всего 33 по типу
{'0.0.0.0': 0, ‘128.0.0.0’: 1, ‘192.0.0.0’ : 2…} и смотреть если ключа нет с словаре то маска точно не валидная, если такой ключ есть, то брать значение и сравнивать ужо с 8, 12 или 16. Это конечно если маску вы получаете в виде строки, а не в виде 4-х отдельных чисел.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Сен. 19, 2018 15:03:53)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version