Форум сайта python.su
Приветствую.
Есть незамысловатый код сервера, принимающего коннекты.
Нужно организовать фильтрацию по маске.
Нужно примерно такое:
1) Проверять так:
if ip in "192.168.1.0/24": print("Welcome!") else: connection.close()
if ip in "192.168.*.*": print("Welcome!") else: connection.close()
if ip in "192.168.1.0 - 192.168.2.255": #В диапазоне print("Welcome!") else: connection.close()
Отредактировано ValeriyB (Май 7, 2012 07:50:06)
Офлайн
>>> import fnmatch >>> print fnmatch.fnmatch('192.168.9000.100500', '192.168.*.*') True
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)
Офлайн
Хороший вариант, а самое главное не грузный, вполне удовлетворяет мои потребности. Спасибо.
Офлайн