Найти - Пользователи
Полная версия: Проверка валидности сетевой маски.
Начало » Network » Проверка валидности сетевой маски.
1
hokey
Доброго времени суток!
Решил написать инсталлер, поиск не помог найти нужное, написал проверку айпи адреса через модуль 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?
BM21
hokey
p.s. one more question…=grep ip в предпоследней строке не работает, как можно использовать переменную назначенную в коде питона запихнуть в os.system?
 mask = os.system('ifconfig | grep %s' % ip)
Ток желательно ее экранировать, если она перед этим непроверяется(переменная).

Нужно просто проверить входит ли маска в список тех что выше7
PEHDOM
hokey
hokey
давайте вы расскажете что конкретно вы хотите? Чтобы маска была ровно такая как в настройках сетевой карты? а если у человека две сетевухи? а если три? или просто коректность введенной маски?
hokey
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
BM21
Экранировать это типа raw_input?Я просто только учусь)
BM21
hokey
, по поводу маски метод overlaps класса IPv4Network, тогоже пакета ipaddress.
Экранировать это исключать возможность изменить суть команды через перемнную.
Ну например
mask = os.system('ifconfig | grep %s' % ip)   
и вместо ip будет что-то вроде “ && echo ‘shell’ > /var/www/html/shell.php”. И.т.д. Тоесть данные от пользователя желательно проверять… Но тут они и так вроде проверяются.
hokey
BM21
hokey, по поводу маски метод overlaps класса IPv4Network, тогоже пакета ipaddress.Экранировать это исключать возможность изменить суть команды через перемнную.Ну например


Это простой инсталлер, человек сам на своем компе запускает его, чтобы вручную не настраивать файлы, а сделать все скриптом…тут как бы если он напишет какой то код то себе хуже, просто делаю так скажем защиту, если допустим промахнулся и поставил не ту цифру, проверка только для этого…
PEHDOM
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-х отдельных чисел.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB