пятница, 30 июля 2010 г.

Python: Генератор ipfilter.dat для uTorrent

Начал изучать Python, а т.к. на практике дело движется веселее и имеется потребность в генерации свежих фильтров для uTorrent'а, начал писать генератор ipfilter.dat из имеющегося списка подсетей.

Есть несколько специфических особенностей генератора:

1. Адреса и маски подсетей хранятся в двоичном формате. Это было сделано для удобства отладки.

2. Т.к. данные в двоичном виде в питоне, на самом деле, хранятся в виде строки, то с этим возникают некоторые проблемы. Для произведения математических операций приходится преобразовывать в int. Например для получения следующего ip адреса приходится городить такую конструкцию bin2ip(bin(int(File[i][1],2) + 1)). С шестнадцатиричным ещё не разбирался, если он храниться не ввиде строки, то переведу на него. Тем более нет большой разницы в преобразовании ip адреса из bin'а или hex'a, бъём строку на 4 подстроки, которые преобразуем в числа.

3. Первоначально в регэкспе на парсинг диапазона вида: xxx.xxx.xxx.xxx yyy.yyy.yyy.yyy, между адресом и маской стоял пробел, который в последствии заменил на \s+, ибо попалась запись в которой разделителем была табуляция.

Сырцы, как обычно на googlecode

P.S. Если есть конструктивные замечания и предложения по коду, буду рад услышать и обсудить.