Уведомления

Группа в Telegram: @pythonsu

#1 Май 7, 2012 07:34:01

ValeriyB
Зарегистрирован: 2012-04-10
Сообщения: 26
Репутация: +  1  -
Профиль   Отправить e-mail  

Sockets + IP фильтрация.

Приветствую.

Есть незамысловатый код сервера, принимающего коннекты.
Нужно организовать фильтрацию по маске.

Нужно примерно такое:
1) Проверять так:

if ip in "192.168.1.0/24":
   print("Welcome!")
else:
   connection.close()

2) Так:
if ip in "192.168.*.*":
   print("Welcome!")
else:
   connection.close()

3) И так:
if ip in "192.168.1.0 - 192.168.2.255": #В диапазоне
   print("Welcome!")
else:
   connection.close()

Второй вариант предпочтительнее (хотя интересны все ). Эти маски буду размещать в текстовом файле, который будет подгружаться при старте сервера.

Подкинет кто пример?

Отредактировано ValeriyB (Май 7, 2012 07:50:06)

Офлайн

#2 Май 7, 2012 09:17:42

beelze
Зарегистрирован: 2012-04-11
Сообщения: 104
Репутация: +  3  -
Профиль   Отправить e-mail  

Sockets + IP фильтрация.

>>> import fnmatch
>>> print fnmatch.fnmatch('192.168.9000.100500', '192.168.*.*')
True


вот еще примерчик (невозбранно спащенный со stackoverflow
import socket,struct
def makeMask(n):
    "return a mask of n bits as a long integer"
    return (2L<<n-1) - 1
def dottedQuadToNum(ip):
    "convert decimal dotted quad string to long integer"
    return struct.unpack('L',socket.inet_aton(ip))[0]
def networkMask(ip,bits):
    "Convert a network address to a long integer" 
    return dottedQuadToNum(ip) & makeMask(bits)
def addressInNetwork(ip,net):
   "Is an address in a network"
   return ip & net == net
address = dottedQuadToNum("192.168.1.1")
networka = networkMask("10.0.0.0",24)
networkb = networkMask("192.168.0.0",24)
print (address,networka,networkb)
print addressInNetwork(address,networka)
print addressInNetwork(address,networkb)

Отредактировано beelze (Май 7, 2012 09:25:38)

Офлайн

#3 Май 7, 2012 09:25:42

ValeriyB
Зарегистрирован: 2012-04-10
Сообщения: 26
Репутация: +  1  -
Профиль   Отправить e-mail  

Sockets + IP фильтрация.

Хороший вариант, а самое главное не грузный, вполне удовлетворяет мои потребности. Спасибо.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version